]> granicus.if.org Git - imagemagick/commitdiff
Correct overall entropy calculation
authorCristy <urban-warrior@imagemagick.org>
Thu, 14 Dec 2017 02:13:26 +0000 (21:13 -0500)
committerCristy <urban-warrior@imagemagick.org>
Thu, 14 Dec 2017 02:13:26 +0000 (21:13 -0500)
MagickCore/statistic.c

index cc6b5aa1ff30ba1590f5c4ace7bb7094f2937892..3fc4f07afc0c069df4e0c7b4b2d846dd41384012 100644 (file)
@@ -1348,6 +1348,8 @@ static size_t GetImageChannels(const Image *image)
     PixelTrait traits = GetPixelChannelTraits(image,channel);
     if (traits == UndefinedPixelTrait)
       continue;
+    if ((traits & UpdatePixelTrait) == 0)
+      continue;
     channels++;
   }
   return((size_t) (channels == 0 ? 1 : channels));
@@ -2141,17 +2143,22 @@ MagickExport ChannelStatistics *GetImageStatistics(const Image *image,
   }
   channel_statistics[CompositePixelChannel].mean=0.0;
   channel_statistics[CompositePixelChannel].standard_deviation=0.0;
+  channel_statistics[CompositePixelChannel].entropy=0.0;
   for (i=0; i < (ssize_t) MaxPixelChannels; i++)
   {
     channel_statistics[CompositePixelChannel].mean+=
       channel_statistics[i].mean;
     channel_statistics[CompositePixelChannel].standard_deviation+=
       channel_statistics[i].standard_deviation;
+    channel_statistics[CompositePixelChannel].entropy+=
+      channel_statistics[i].entropy;
   }
   channel_statistics[CompositePixelChannel].mean/=(double)
     GetImageChannels(image);
   channel_statistics[CompositePixelChannel].standard_deviation/=(double)
     GetImageChannels(image);
+  channel_statistics[CompositePixelChannel].entropy/=(double)
+    GetImageChannels(image);
   if (y < (ssize_t) image->rows)
     channel_statistics=(ChannelStatistics *) RelinquishMagickMemory(
       channel_statistics);