From bc0adce07fc084baf24649a163adb5d9d6107b72 Mon Sep 17 00:00:00 2001 From: cristy Date: Wed, 8 Jan 2014 23:15:49 +0000 Subject: [PATCH] --- MagickCore/compare.c | 36 ++++++++++++++++++++++++++++++++++++ MagickWand/compare.c | 6 ++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 36f49e0aa..0e3ab7a97 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -1104,7 +1104,43 @@ static MagickBooleanType GetPeakSignalToNoiseRatio(const Image *image, static MagickBooleanType GetPerceptualHashDistortion(const Image *image, const Image *reconstruct_image,double *distortion,ExceptionInfo *exception) { + ChannelMoments + *image_moments, + *reconstruct_moments; + + double + difference, + sum; + + register ssize_t + i; + *distortion=0.0; + image_moments=GetImageMoments(image,exception); + if (image_moments == (ChannelMoments *) NULL) + return(MagickFalse); + reconstruct_moments=GetImageMoments(reconstruct_image,exception); + if (reconstruct_moments == (ChannelMoments *) NULL) + { + image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); + return(MagickFalse); + } + sum=0.0; + for (i=0; i < 8; i++) + { + ssize_t + channel; + + for (channel=0; channel < MaxPixelChannels; channel++) + { + difference=reconstruct_moments[channel].I[i]-image_moments[channel].I[i]; + sum+=difference*difference; + } + } + *distortion=sum; + reconstruct_moments=(ChannelMoments *) RelinquishMagickMemory( + reconstruct_moments); + image_moments=(ChannelMoments *) RelinquishMagickMemory(image_moments); return(MagickTrue); } diff --git a/MagickWand/compare.c b/MagickWand/compare.c index 74cefc068..7b9e4bb4d 100644 --- a/MagickWand/compare.c +++ b/MagickWand/compare.c @@ -1026,8 +1026,9 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, case FuzzErrorMetric: case MeanAbsoluteErrorMetric: case MeanSquaredErrorMetric: - case RootMeanSquaredErrorMetric: case PeakAbsoluteErrorMetric: + case PerceptualHashErrorMetric: + case RootMeanSquaredErrorMetric: { (void) FormatLocaleFile(stderr,"%g (%g)",QuantumRange*distortion, (double) distortion); @@ -1082,8 +1083,9 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, case FuzzErrorMetric: case MeanAbsoluteErrorMetric: case MeanSquaredErrorMetric: - case RootMeanSquaredErrorMetric: case PeakAbsoluteErrorMetric: + case PerceptualHashErrorMetric: + case RootMeanSquaredErrorMetric: { switch (image->colorspace) { -- 2.40.0