AddNodePixelList(pixel_list,4,index);
}
+static inline MagickRealType MagickAbsoluteValue(const MagickRealType x)
+{
+ if (x < 0)
+ return(-x);
+ return(x);
+}
+
static void ResetPixelList(PixelList *pixel_list)
{
int
r+=image->columns+StatisticWidth;
s+=image->columns+StatisticWidth;
}
+ GetMagickPixelPacket(image,&pixel);
+ SetMagickPixelPacket(image,p+StatisticWidth*StatisticHeight/2,indexes+
+ StatisticWidth*StatisticHeight/2+x,&pixel);
switch (type)
{
+ case BottomHatStatistic:
+ {
+ MagickPixelPacket
+ maximum;
+
+ maximum=GetMaximumPixelList(pixel_list[id]);
+ pixel.red=MagickAbsoluteValue(maximum.red-pixel.red);
+ pixel.green=MagickAbsoluteValue(maximum.green-pixel.green);
+ pixel.blue=MagickAbsoluteValue(maximum.blue-pixel.blue);
+ pixel.opacity=MagickAbsoluteValue(maximum.opacity-pixel.opacity);
+ if (image->colorspace == CMYKColorspace)
+ pixel.index=MagickAbsoluteValue(maximum.index-pixel.index);
+ break;
+ }
+ case GradientStatistic:
+ {
+ MagickPixelPacket
+ maximum,
+ minimum;
+
+ minimum=GetMinimumPixelList(pixel_list[id]);
+ maximum=GetMaximumPixelList(pixel_list[id]);
+ pixel.red=MagickAbsoluteValue(maximum.red-minimum.red);
+ pixel.green=MagickAbsoluteValue(maximum.green-minimum.green);
+ pixel.blue=MagickAbsoluteValue(maximum.blue-minimum.blue);
+ pixel.opacity=MagickAbsoluteValue(maximum.opacity-minimum.opacity);
+ if (image->colorspace == CMYKColorspace)
+ pixel.index=MagickAbsoluteValue(maximum.index-minimum.index);
+ break;
+ }
case MaximumStatistic:
{
pixel=GetMaximumPixelList(pixel_list[id]);
pixel=GetStandardDeviationPixelList(pixel_list[id]);
break;
}
+ case TopHatStatistic:
+ {
+ MagickPixelPacket
+ minimum;
+
+ minimum=GetMinimumPixelList(pixel_list[id]);
+ pixel.red=MagickAbsoluteValue(pixel.red-minimum.red);
+ pixel.green=MagickAbsoluteValue(pixel.green-minimum.green);
+ pixel.blue=MagickAbsoluteValue(pixel.blue-minimum.blue);
+ pixel.opacity=MagickAbsoluteValue(pixel.opacity-minimum.opacity);
+ if (image->colorspace == CMYKColorspace)
+ pixel.index=MagickAbsoluteValue(pixel.index-minimum.index);
+ break;
+ }
}
if ((channel & RedChannel) != 0)
q->red=ClampToQuantum(pixel.red);
StatisticOptions[] =
{
{ "Undefined", (ssize_t) UndefinedStatistic, MagickTrue },
+ { "BottomHat", (ssize_t) BottomHatStatistic, MagickFalse },
+ { "Gradient", (ssize_t) GradientStatistic, MagickFalse },
{ "Maximum", (ssize_t) MaximumStatistic, MagickFalse },
{ "Mean", (ssize_t) MeanStatistic, MagickFalse },
{ "Median", (ssize_t) MedianStatistic, MagickFalse },
{ "Mode", (ssize_t) ModeStatistic, MagickFalse },
{ "Nonpeak", (ssize_t) NonpeakStatistic, MagickFalse },
{ "StandardDeviation", (ssize_t) StandardDeviationStatistic, MagickFalse },
+ { "TopHat", (ssize_t) TopHatStatistic, MagickFalse },
{ (char *) NULL, (ssize_t) UndefinedMethod, MagickFalse }
},
StorageOptions[] =