diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-09-28 02:40:42 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-09-28 02:40:42 +0000 |
commit | 34546ecb9b586f34e04f6e133a247ffe1f50046e (patch) | |
tree | 55c0c6c76c55bfe99a9f3c7dec416604a1c6dbd9 /editor/pamaddnoise.c | |
parent | d484f36f7c690d0a88476127afd9bdf90233699d (diff) | |
download | netpbm-mirror-34546ecb9b586f34e04f6e133a247ffe1f50046e.tar.gz netpbm-mirror-34546ecb9b586f34e04f6e133a247ffe1f50046e.tar.xz netpbm-mirror-34546ecb9b586f34e04f6e133a247ffe1f50046e.zip |
Release 1.04.00
git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@4700 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor/pamaddnoise.c')
-rw-r--r-- | editor/pamaddnoise.c | 89 |
1 files changed, 69 insertions, 20 deletions
diff --git a/editor/pamaddnoise.c b/editor/pamaddnoise.c index e585700b..b662aa96 100644 --- a/editor/pamaddnoise.c +++ b/editor/pamaddnoise.c @@ -39,8 +39,14 @@ #include "pam.h" static double const EPSILON = 1.0e-5; -static double const SALT_RATIO = 0.5; +static double const SIGMA1_DEFAULT = 4.0; +static double const SIGMA2_DEFAULT = 20.0; +static double const MGSIGMA_DEFAULT = 0.5; +static double const LSIGMA_DEFAULT = 10.0; +static double const TOLERANCE_DEFAULT = 0.10; +static double const SALT_RATIO_DEFAULT = 0.5; +static double const LAMBDA_DEFAULT = 12.0; enum NoiseType { @@ -70,6 +76,7 @@ struct CmdlineInfo { float sigma1; float sigma2; float tolerance; + float saltRatio; }; @@ -115,7 +122,7 @@ parseCommandLine(int argc, const char ** const argv, unsigned int option_def_index; unsigned int typeSpec, lambdaSpec, lsigmaSpec, mgsigmaSpec, - sigma1Spec, sigma2Spec, toleranceSpec; + sigma1Spec, sigma2Spec, toleranceSpec, saltRatioSpec; const char * type; @@ -138,6 +145,8 @@ parseCommandLine(int argc, const char ** const argv, &sigma2Spec, 0); OPTENT3(0, "tolerance", OPT_FLOAT, &cmdlineP->tolerance, &toleranceSpec, 0); + OPTENT3(0, "salt", OPT_FLOAT, &cmdlineP->saltRatio, + &saltRatioSpec, 0); opt.opt_table = option_def; opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */ @@ -151,42 +160,82 @@ parseCommandLine(int argc, const char ** const argv, else cmdlineP->noiseType = typeFmName(type); - if (sigma1Spec && cmdlineP->noiseType != NOISETYPE_GAUSSIAN) - pm_error("-sigma1 is valid only with -type=gaussian"); + if (sigma1Spec) { + if (cmdlineP->noiseType != NOISETYPE_GAUSSIAN) + pm_error("-sigma1 is valid only with -type=gaussian"); + else if (cmdlineP->sigma1 < 0) + pm_error("-sigma1 value must be non-negative. You specified %f", + cmdlineP->sigma1); + } - if (sigma2Spec && cmdlineP->noiseType != NOISETYPE_GAUSSIAN) - pm_error("-sigma2 is valid only with -type=gaussian"); + if (sigma2Spec) { + if (cmdlineP->noiseType != NOISETYPE_GAUSSIAN) + pm_error("-sigma2 is valid only with -type=gaussian"); + else if (cmdlineP->sigma2 < 0) + pm_error("-sigma2 value must be non-negative. You specified %f", + cmdlineP->sigma2); + } - if (mgsigmaSpec && - cmdlineP->noiseType != NOISETYPE_MULTIPLICATIVE_GAUSSIAN) - pm_error("-mgsigma is valid only with -type=multiplicative_guassian"); + if (mgsigmaSpec) { + if (cmdlineP->noiseType != NOISETYPE_MULTIPLICATIVE_GAUSSIAN) + pm_error("-mgsigma is valid only with -type=multiplicative_guassian"); + else if (cmdlineP->mgsigma < 0) + pm_error("-mgsigma value must be non-negative. You specified %f", + cmdlineP->mgsigma); + } - if (toleranceSpec && cmdlineP->noiseType != NOISETYPE_IMPULSE) - pm_error("-tolerance is valid only with -type=impulse"); + if (toleranceSpec) { + if (cmdlineP->noiseType != NOISETYPE_IMPULSE) + pm_error("-tolerance is valid only with -type=impulse"); + else if (cmdlineP->tolerance < 0 || cmdlineP->tolerance > 1.0) + pm_error("-tolerance value must be between 0.0 and 1.0. " + "You specified %f", cmdlineP->tolerance); + } - if (lsigmaSpec && cmdlineP->noiseType != NOISETYPE_LAPLACIAN) + if (saltRatioSpec) { + if (cmdlineP->noiseType != NOISETYPE_IMPULSE) + pm_error("-salt is valid only with -type=impulse"); + else if (cmdlineP->saltRatio < 0 || cmdlineP->saltRatio > 1.0) + pm_error("-salt value must be between 0.0 and 1.0. " + "You specified %f", cmdlineP->saltRatio); + } + + if (lsigmaSpec) { + if (cmdlineP->noiseType != NOISETYPE_LAPLACIAN) pm_error("-lsigma is valid only with -type=laplacian"); + else if (cmdlineP->lsigma <= 0) + pm_error("-lsigma value must be positive. You specified %f", + cmdlineP->lsigma); + } - if (lambdaSpec && cmdlineP->noiseType != NOISETYPE_POISSON) + if (lambdaSpec) { + if (cmdlineP->noiseType != NOISETYPE_POISSON) pm_error("-lambda is valid only with -type=poisson"); + else if (cmdlineP->lambda <= 0) + pm_error("-lambda value must be positive. You specified %f", + cmdlineP->lambda); + } if (!lambdaSpec) - cmdlineP->lambda = 12.0; + cmdlineP->lambda = LAMBDA_DEFAULT; if (!lsigmaSpec) - cmdlineP->lsigma = 10.0; + cmdlineP->lsigma = LSIGMA_DEFAULT; if (!mgsigmaSpec) - cmdlineP->mgsigma = 0.5; + cmdlineP->mgsigma = MGSIGMA_DEFAULT; if (!sigma1Spec) - cmdlineP->sigma1 = 4.0; + cmdlineP->sigma1 = SIGMA1_DEFAULT; if (!sigma2Spec) - cmdlineP->sigma2 = 20.0; + cmdlineP->sigma2 = SIGMA2_DEFAULT; if (!toleranceSpec) - cmdlineP->tolerance = 0.10; + cmdlineP->tolerance = TOLERANCE_DEFAULT; + + if (!saltRatioSpec) + cmdlineP->saltRatio = SALT_RATIO_DEFAULT; if (!cmdlineP->seedSpec) cmdlineP->seed = pm_randseed(); @@ -441,7 +490,7 @@ main(int argc, const char ** argv) { addImpulseNoise(inpam.maxval, tuplerow[col][plane], &newtuplerow[col][plane], - cmdline.tolerance, SALT_RATIO, + cmdline.tolerance, cmdline.saltRatio, &randSt); break; |