From a9b2c5226124d5c0592e424991e007fe0d2db6b2 Mon Sep 17 00:00:00 2001 From: giraffedata Date: Sun, 13 Dec 2020 22:56:46 +0000 Subject: Base Poisson noise on intensity, not brightness, to match the physical effect of quantized light git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4003 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- editor/pamaddnoise.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/editor/pamaddnoise.c b/editor/pamaddnoise.c index fa0df6f5..8035b197 100644 --- a/editor/pamaddnoise.c +++ b/editor/pamaddnoise.c @@ -31,6 +31,7 @@ #include #include "pm_c_util.h" +#include "pm_gamma.h" #include "pam.h" static double const EPSILON = 1.0e-5; @@ -218,7 +219,9 @@ addPoissonNoise(struct pam * const pamP, -----------------------------------------------------------------------------*/ samplen const origSamplen = pnm_normalized_sample(pamP, origSample); - double const lambda = origSamplen * lambdaOfMaxval; + float const origSampleIntensity = pm_ungamma709(origSamplen); + + double const lambda = origSampleIntensity * lambdaOfMaxval; double const u = rand1(); @@ -240,7 +243,11 @@ addPoissonNoise(struct pam * const pamP, break; } - *newSampleP = pnm_unnormalized_sample(pamP, k/lambdaOfMaxval); + { + samplen const newSamplen = pm_gamma709(k/lambdaOfMaxval); + + *newSampleP = pnm_unnormalized_sample(pamP, newSamplen); + } } -- cgit 1.4.1