diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-09-06 23:20:19 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-09-06 23:20:19 +0000 |
commit | 6c8b9ea2f03aa6cc250dd80a0d6232c8c4449cb7 (patch) | |
tree | 5ab8e5f0a109da13c3a575e3fc281bf86a777d2b /editor | |
parent | cacc48b5dc3fe179980070a26cd9da03308708d6 (diff) | |
download | netpbm-mirror-6c8b9ea2f03aa6cc250dd80a0d6232c8c4449cb7.tar.gz netpbm-mirror-6c8b9ea2f03aa6cc250dd80a0d6232c8c4449cb7.tar.xz netpbm-mirror-6c8b9ea2f03aa6cc250dd80a0d6232c8c4449cb7.zip |
Release 11.03.05
git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@4636 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor')
-rw-r--r-- | editor/pamaddnoise.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/editor/pamaddnoise.c b/editor/pamaddnoise.c index 9ca80394..e585700b 100644 --- a/editor/pamaddnoise.c +++ b/editor/pamaddnoise.c @@ -43,14 +43,6 @@ static double const SALT_RATIO = 0.5; -static double -rand1(struct pm_randSt * const randStP) { - - return (double)pm_rand(randStP)/RAND_MAX; -} - - - enum NoiseType { NOISETYPE_GAUSSIAN, NOISETYPE_IMPULSE, /* aka salt and pepper noise */ @@ -226,19 +218,13 @@ addGaussianNoise(sample const maxval, Based on Kasturi/Algorithms of the ACM -----------------------------------------------------------------------------*/ - double x1, x2, xn, yn; + double grnd1, grnd2; /* Gaussian random numbers. mean=0 sigma=1 */ double rawNewSample; - x1 = rand1(randStP); - - if (x1 == 0.0) - x1 = 1.0; - x2 = rand1(randStP); - xn = sqrt(-2.0 * log(x1)) * cos(2.0 * M_PI * x2); - yn = sqrt(-2.0 * log(x1)) * sin(2.0 * M_PI * x2); + pm_gaussrand2(randStP, &grnd1, &grnd2); rawNewSample = - origSample + (sqrt((double) origSample) * sigma1 * xn) + (sigma2 * yn); + origSample + (sqrt((double) origSample) * sigma1 * grnd1) + (sigma2 * grnd2); *newSampleP = MAX(MIN((int)rawNewSample, maxval), 0); } @@ -259,7 +245,7 @@ addImpulseNoise(sample const maxval, double const pepperRatio = 1.0 - saltRatio; double const loTolerance = tolerance * pepperRatio; double const hiTolerance = 1.0 - tolerance * saltRatio; - double const sap = rand1(randStP); + double const sap = pm_drand(randStP); *newSampleP = sap < loTolerance ? 0 : @@ -281,7 +267,7 @@ addLaplacianNoise(sample const maxval, From Pitas' book. -----------------------------------------------------------------------------*/ - double const u = rand1(randStP); + double const u = pm_drand(randStP); double rawNewSample; @@ -314,21 +300,10 @@ addMultiplicativeGaussianNoise(sample const maxval, From Pitas' book. -----------------------------------------------------------------------------*/ - double rayleigh, gauss; + double rawNewSample; - { - double const uniform = rand1(randStP); - if (uniform <= EPSILON) - rayleigh = infinity; - else - rayleigh = sqrt(-2.0 * log( uniform)); - } - { - double const uniform = rand1(randStP); - gauss = rayleigh * cos(2.0 * M_PI * uniform); - } - rawNewSample = origSample + (origSample * mgsigma * gauss); + rawNewSample = origSample + (origSample * mgsigma * pm_gaussrand(randStP)); *newSampleP = MIN(MAX((int)rawNewSample, 0), maxval); } @@ -384,7 +359,7 @@ addPoissonNoise(struct pam * const pamP, double const lambda = origSampleIntensity * lambdaOfMaxval; - double const u = rand1(randStP); + double const u = pm_drand(randStP); /* We now apply the inverse CDF (cumulative distribution function) of the Poisson distribution to uniform random variable 'u' to get a Poisson |