Commit 0c1cf1e07 for imagemagick.org
commit 0c1cf1e07631ea805201dcb6419334e2f69c20df
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sat May 30 19:07:44 2026 -0400
2nd attempt to scale pHash
diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c
index 2b2f9893c..2714153d3 100644
--- a/MagickCore/statistic.c
+++ b/MagickCore/statistic.c
@@ -1761,6 +1761,10 @@ MagickExport ChannelPerceptualHash *GetImagePerceptualHash(const Image *image,
ChannelMoments
*moments;
+ double
+ mn = DBL_MAX,
+ mx = -DBL_MAX;
+
Image
*hash_image;
@@ -1793,8 +1797,26 @@ MagickExport ChannelPerceptualHash *GetImagePerceptualHash(const Image *image,
break;
for (channel=0; channel <= MaxPixelChannels; channel++)
for (j=0; j < MaximumNumberOfImageMoments; j++)
- perceptual_hash[channel].phash[i][j]=
- (-MagickSafeLog10(fabs(moments[channel].invariant[j])));
+ {
+ double x = moments[channel].invariant[j];
+ double alpha = (x > 0.0 ? 1.0 : (x < 0.0 ? -1.0 : 0.0))*
+ log10(fabs(x)+MagickEpsilon);
+
+ if (alpha < mn)
+ mn=alpha;
+ if (alpha > mx)
+ mx=alpha;
+ }
+ for (channel=0; channel <= MaxPixelChannels; channel++)
+ for (j=0; j < MaximumNumberOfImageMoments; j++)
+ {
+ double x = moments[channel].invariant[j];
+ double alpha = (x > 0.0 ? 1.0 : (x < 0.0 ? -1.0 : 0.0))*
+ log10(fabs(x)+MagickEpsilon);
+ double scaled = 255.0*(alpha-mn)*MagickSafeReciprocal(mx-mn);
+ perceptual_hash[channel].phash[i][j]=MagickMin(MagickMax(scaled,0.0),
+ 255.0);
+ }
moments=(ChannelMoments *) RelinquishMagickMemory(moments);
}
colorspaces=DestroyString(colorspaces);