]> granicus.if.org Git - imagemagick/commitdiff
https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=32591
authorCristy <urban-warrior@imagemagick.org>
Tue, 5 Sep 2017 22:42:51 +0000 (18:42 -0400)
committerCristy <urban-warrior@imagemagick.org>
Tue, 5 Sep 2017 22:44:55 +0000 (18:44 -0400)
MagickCore/compare.c

index 5e558cda1289374789bb27f66ddcf328813e2c99..cccd8fae1e290819bbac50c4e91e092e605c584f 100644 (file)
@@ -292,7 +292,10 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
+        if (channel == AlphaPixelChannel)
+          distance=p[i]-GetPixelChannel(reconstruct_image,channel,q);
+        else
+          distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
         if ((distance*distance) > fuzz)
           {
             difference=MagickTrue;
@@ -447,7 +450,10 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
+        if (channel == AlphaPixelChannel)
+          distance=p[i]-GetPixelChannel(reconstruct_image,channel,q);
+        else
+          distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q);
         if ((distance*distance) > fuzz)
           {
             channel_distortion[i]++;
@@ -460,7 +466,7 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image,
       q+=GetPixelChannels(reconstruct_image);
     }
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-    #pragma omp critical (MagickCore_GetAbsoluteError)
+    #pragma omp critical (MagickCore_GetAbsoluteDistortion)
 #endif
     for (j=0; j <= MaxPixelChannels; j++)
       distortion[j]+=channel_distortion[j];
@@ -556,8 +562,12 @@ static MagickBooleanType GetFuzzDistortion(const Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
-          channel,q));
+        if (channel == AlphaPixelChannel)
+          distance=QuantumScale*(p[i]-GetPixelChannel(reconstruct_image,
+            channel,q));
+        else
+          distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
+            channel,q));
         channel_distortion[i]+=distance*distance;
         channel_distortion[CompositePixelChannel]+=distance*distance;
       }
@@ -667,8 +677,12 @@ static MagickBooleanType GetMeanAbsoluteDistortion(const Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
-          channel,q));
+        if (channel == AlphaPixelChannel)
+          distance=QuantumScale*fabs(p[i]-GetPixelChannel(reconstruct_image,
+            channel,q));
+        else
+          distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(
+            reconstruct_image,channel,q));
         channel_distortion[i]+=distance;
         channel_distortion[CompositePixelChannel]+=distance;
       }
@@ -768,7 +782,11 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q));
+        if (channel == AlphaPixelChannel)
+          distance=fabs(p[i]-GetPixelChannel(reconstruct_image,channel,q));
+        else
+          distance=fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,
+            q));
         distortion[i]+=distance;
         distortion[CompositePixelChannel]+=distance;
         mean_error+=distance*distance;
@@ -874,8 +892,12 @@ static MagickBooleanType GetMeanSquaredDistortion(const Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
-          channel,q));
+        if (channel == AlphaPixelChannel)
+          distance=QuantumScale*(p[i]-GetPixelChannel(reconstruct_image,
+            channel,q));
+        else
+          distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
+            channel,q));
         channel_distortion[i]+=distance*distance;
         channel_distortion[CompositePixelChannel]+=distance*distance;
       }
@@ -1171,8 +1193,12 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image,
             (reconstruct_traits == UndefinedPixelTrait) ||
             ((reconstruct_traits & UpdatePixelTrait) == 0))
           continue;
-        distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,
-          channel,q));
+        if (channel == AlphaPixelChannel)
+          distance=QuantumScale*fabs(p[i]-GetPixelChannel(reconstruct_image,
+            channel,q));
+        else
+          distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(
+            reconstruct_image,channel,q));
         if (distance > channel_distortion[i])
           channel_distortion[i]=distance;
         if (distance > channel_distortion[CompositePixelChannel])