Moved duplicate max fuzz determination to new private inline method.
authordirk <dirk@git.imagemagick.org>
Thu, 8 Jan 2015 23:04:58 +0000 (23:04 +0000)
committerdirk <dirk@git.imagemagick.org>
Thu, 8 Jan 2015 23:04:58 +0000 (23:04 +0000)
Fixed creation of highlight image.
Fixed calculation of distortion for a specific channel in GetAbsoluteDistortion.

MagickCore/color-private.h
MagickCore/compare.c
MagickCore/pixel.c

index 753905deeee512047a0fedd437363d07b629a916..dec4ea9c8478c73854cb1ff4ac75b47fda55fe40 100644 (file)
 #define _MAGICKCORE_COLOR_PRIVATE_H
 
 #include "MagickCore/image.h"
+#include "MagickCore/image-private.h"
 
 #if defined(__cplusplus) || defined(c_plusplus)
 extern "C" {
 #endif
 
+static inline double GetMaxImageFuzz(const Image *a,const Image *b)
+{
+  double
+    fuzz;
+
+  fuzz=(double) MagickMax(MagickMax(a->fuzz,b->fuzz),(MagickRealType)
+    MagickSQ1_2);
+  return(fuzz*fuzz);
+}
+
 extern MagickPrivate MagickBooleanType
   ColorComponentGenesis(void),
   IsEquivalentAlpha(const Image *,const PixelInfo *,const PixelInfo *),
index 1eaa903727e29f48e338246486d0c9f1bf49adcf..f4e434c1387ee551d969082f1e3db1b9e8b28fc4 100644 (file)
@@ -141,6 +141,9 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image,
     *image_view,
     *reconstruct_view;
 
+  double
+    fuzz;
+
   const char
     *artifact;
 
@@ -206,6 +209,7 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image,
     Generate difference image.
   */
   status=MagickTrue;
+  fuzz=GetMaxImageFuzz(image,reconstruct_image);
   image_view=AcquireVirtualCacheView(image,exception);
   reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception);
   highlight_view=AcquireAuthenticCacheView(highlight_image,exception);
@@ -278,8 +282,11 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image,
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
         distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
-        if (fabs(distance) >= MagickEpsilon)
-          difference=MagickTrue;
+        if ((distance*distance) > fuzz)
+          {
+            difference=MagickTrue;
+            break;
+          }
       }
       if (difference == MagickFalse)
         SetPixelViaPixelInfo(highlight_image,&lowlight,r);
@@ -358,9 +365,7 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image,
     Compute the absolute difference in pixels between two images.
   */
   status=MagickTrue;
-  fuzz=(double) MagickMax(MagickMax(image->fuzz,reconstruct_image->fuzz),
-    (MagickRealType) MagickSQ1_2);
-  fuzz*=fuzz;
+  fuzz=GetMaxImageFuzz(image,reconstruct_image);
   image_view=AcquireVirtualCacheView(image,exception);
   reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
@@ -428,15 +433,12 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image,
         distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
         if ((distance*distance) > fuzz)
           {
+            channel_distortion[i]++;
             difference=MagickTrue;
-            break;
           }
       }
       if (difference != MagickFalse)
-        {
-          channel_distortion[i]++;
-          channel_distortion[CompositePixelChannel]++;
-        }
+        channel_distortion[CompositePixelChannel]++;
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(reconstruct_image);
     }
index c43c3489b08bac449818eac18115ca0429a5f107..8c6ba124d27fc6b7d481b5862a0e0e458425a797 100644 (file)
@@ -6036,9 +6036,7 @@ MagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source,
     distance,
     scale;
 
-  fuzz=(double) MagickMax(MagickMax(source->fuzz,destination->fuzz),
-    (MagickRealType) MagickSQ1_2);
-  fuzz*=fuzz;
+  fuzz=GetMaxImageFuzz(source,destination);
   scale=1.0;
   distance=0.0;
   if (source->alpha_trait != UndefinedPixelTrait)