]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 15 Jun 2014 13:01:43 +0000 (13:01 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 15 Jun 2014 13:01:43 +0000 (13:01 +0000)
MagickCore/option.c
MagickCore/statistic.c
MagickCore/statistic.h

index e4c5ae702fd8c875014e22b276f9ea615380ba14..f517add2cf68649cd201385b9d178d60c53dccda 100644 (file)
@@ -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 }
   },
index 20537a795e19b35e32f744e132ccc6b7a4a18daf..a69646b3d581b305073030070da0b2b0a35824c8 100644 (file)
@@ -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);
index 78dd8584a544718ee272879a70cee9e605f0fde9..5917cdc476fa446ca3be816b53a00951f51db00a 100644 (file)
@@ -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;