From: cristy Date: Sun, 15 Jun 2014 13:01:43 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2224 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=180908c3457893af93b890e3d01a992727574877;p=imagemagick --- diff --git a/MagickCore/option.c b/MagickCore/option.c index e4c5ae702..f517add2c 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -1042,6 +1042,8 @@ static const OptionInfo { "PoissonNoise", PoissonNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse }, { "Pow", PowEvaluateOperator, UndefinedOptionFlag, MagickFalse }, { "RightShift", RightShiftEvaluateOperator, UndefinedOptionFlag, MagickFalse }, + { "RMS", RootMeanSquareEvaluateOperator, UndefinedOptionFlag, MagickFalse }, + { "RootMeanSquare", RootMeanSquareEvaluateOperator, UndefinedOptionFlag, MagickFalse }, { "Set", SetEvaluateOperator, UndefinedOptionFlag, MagickFalse }, { "Sin", SineEvaluateOperator, UndefinedOptionFlag, MagickFalse }, { "Sine", SineEvaluateOperator, UndefinedOptionFlag, MagickFalse }, @@ -1621,6 +1623,8 @@ static const OptionInfo { "Minimum", MinimumStatistic, UndefinedOptionFlag, MagickFalse }, { "Mode", ModeStatistic, UndefinedOptionFlag, MagickFalse }, { "NonPeak", NonpeakStatistic, UndefinedOptionFlag, MagickFalse }, + { "RootMeanSquare", RootMeanSquareStatistic, UndefinedOptionFlag, MagickFalse }, + { "RMS", RootMeanSquareStatistic, UndefinedOptionFlag, MagickFalse }, { "StandardDeviation", StandardDeviationStatistic, UndefinedOptionFlag, MagickFalse }, { (char *) NULL, UndefinedMethod, UndefinedOptionFlag, MagickFalse } }, diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c index 20537a795..a69646b3d 100644 --- a/MagickCore/statistic.c +++ b/MagickCore/statistic.c @@ -369,6 +369,11 @@ static double ApplyEvaluateOperator(RandomInfo *random_info,const Quantum pixel, result=(double) ((size_t) pixel >> (size_t) (value+0.5)); break; } + case RootMeanSquareEvaluateOperator: + { + result=(double) (pixel*value); + break; + } case SetEvaluateOperator: { result=value; @@ -699,6 +704,13 @@ MagickExport Image *EvaluateImages(const Image *images, } break; } + case RootMeanSquareEvaluateOperator: + { + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + evaluate_pixel[x].channel[i]=sqrt(evaluate_pixel[x].channel[i]/ + (double) number_images); + break; + } default: break; } @@ -2688,6 +2700,38 @@ static inline void GetNonpeakPixelList(PixelList *pixel_list,Quantum *pixel) *pixel=ScaleShortToQuantum((unsigned short) color); } +static inline void GetRootMeanSquarePixelList(PixelList *pixel_list, + Quantum *pixel) +{ + double + sum; + + register SkipList + *p; + + size_t + color; + + ssize_t + count; + + /* + Find the mean value for each of the color. + */ + p=(&pixel_list->skip_list); + color=65536L; + count=0; + sum=0.0; + do + { + color=p->nodes[color].next[0]; + sum*=(double) p->nodes[color].count*color; + count+=p->nodes[color].count; + } while (count < (ssize_t) pixel_list->length); + sum/=pixel_list->length; + *pixel=ScaleShortToQuantum((unsigned short) sqrt(sum)); +} + static inline void GetStandardDeviationPixelList(PixelList *pixel_list, Quantum *pixel) { @@ -2959,6 +3003,11 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type, GetNonpeakPixelList(pixel_list[id],&pixel); break; } + case RootMeanSquareStatistic: + { + GetRootMeanSquarePixelList(pixel_list[id],&pixel); + break; + } case StandardDeviationStatistic: { GetStandardDeviationPixelList(pixel_list[id],&pixel); diff --git a/MagickCore/statistic.h b/MagickCore/statistic.h index 78dd8584a..5917cdc47 100644 --- a/MagickCore/statistic.h +++ b/MagickCore/statistic.h @@ -89,6 +89,7 @@ typedef enum PoissonNoiseEvaluateOperator, PowEvaluateOperator, RightShiftEvaluateOperator, + RootMeanSquareEvaluateOperator, SetEvaluateOperator, SineEvaluateOperator, SubtractEvaluateOperator, @@ -119,6 +120,7 @@ typedef enum MinimumStatistic, ModeStatistic, NonpeakStatistic, + RootMeanSquareStatistic, StandardDeviationStatistic } StatisticType;