From 80c99748e5512e624dd6f74167759bc07591dd20 Mon Sep 17 00:00:00 2001 From: cristy Date: Mon, 4 Apr 2011 14:46:39 +0000 Subject: [PATCH] --- magick/effect.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ magick/effect.h | 5 ++++- magick/option.c | 3 +++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/magick/effect.c b/magick/effect.c index 24893c78e..60d536eb8 100644 --- a/magick/effect.c +++ b/magick/effect.c @@ -5121,6 +5121,13 @@ static inline void InsertPixelList(const Image *image,const PixelPacket *pixel, 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 @@ -5282,8 +5289,41 @@ MagickExport Image *StatisticImageChannel(const Image *image, 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]); @@ -5320,6 +5360,20 @@ MagickExport Image *StatisticImageChannel(const Image *image, 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); diff --git a/magick/effect.h b/magick/effect.h index 1e6f2cb99..2b9d87b96 100644 --- a/magick/effect.h +++ b/magick/effect.h @@ -61,13 +61,16 @@ typedef enum typedef enum { UndefinedStatistic, + BottomHatStatistic, + GradientStatistic, MaximumStatistic, MeanStatistic, MedianStatistic, MinimumStatistic, ModeStatistic, NonpeakStatistic, - StandardDeviationStatistic + StandardDeviationStatistic, + TopHatStatistic } StatisticType; extern MagickExport Image diff --git a/magick/option.c b/magick/option.c index 2c88667b1..01f102483 100644 --- a/magick/option.c +++ b/magick/option.c @@ -1457,6 +1457,8 @@ static const OptionInfo 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 }, @@ -1464,6 +1466,7 @@ static const OptionInfo { "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[] = -- 2.40.0