https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30887).
* Set alpha member of draw structure to OpaqueAlpha (reference
https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30894).
+ * Off by 1 error when computing the standard deviation (reference
+ https://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=30866).
2016-11-15 7.0.3-7 Cristy <quetzlzacatenango@image...>
* Release ImageMagick version 7.0.3-7, GIT revision 19024:87aca83:20161115.
* Prevent fault in MSL interpreter (reference
https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30797).
* Mask composite produces proper results for the convert utility (reference
- http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29675).
+ https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29675).
2016-10-10 7.0.3-5 Cristy <quetzlzacatenango@image...>
double
area,
+ gamma,
maximum_error,
mean_error;
}
reconstruct_view=DestroyCacheView(reconstruct_view);
image_view=DestroyCacheView(image_view);
- image->error.mean_error_per_pixel=distortion[CompositePixelChannel]/area;
- image->error.normalized_mean_error=QuantumScale*QuantumScale*mean_error/area;
+ gamma=PerceptibleReciprocal(area);
+ image->error.mean_error_per_pixel=gamma*distortion[CompositePixelChannel];
+ image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
image->error.normalized_maximum_error=QuantumScale*maximum_error;
return(status);
}
double
area,
+ gamma,
maximum_error,
mean_error,
mean_error_per_pixel;
}
reconstruct_view=DestroyCacheView(reconstruct_view);
image_view=DestroyCacheView(image_view);
- image->error.mean_error_per_pixel=(double) (mean_error_per_pixel/area);
- image->error.normalized_mean_error=(double) (QuantumScale*QuantumScale*
- mean_error/area);
- image->error.normalized_maximum_error=(double) (QuantumScale*maximum_error);
+ gamma=PerceptibleReciprocal(area);
+ image->error.mean_error_per_pixel=gamma*mean_error_per_pixel;
+ image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
+ image->error.normalized_maximum_error=(double) QuantumScale*maximum_error;
status=image->error.mean_error_per_pixel == 0.0 ? MagickTrue : MagickFalse;
return(status);
}
area,
beta,
distance,
+ gamma,
maximum_error,
mean_error,
mean_error_per_pixel;
}
}
image_view=DestroyCacheView(image_view);
- image->error.mean_error_per_pixel=(double) mean_error_per_pixel/area;
- image->error.normalized_mean_error=(double) QuantumScale*QuantumScale*
- mean_error/area;
- image->error.normalized_maximum_error=(double) QuantumScale*maximum_error;
+ gamma=PerceptibleReciprocal(area);
+ image->error.mean_error_per_pixel=gamma*mean_error_per_pixel;
+ image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
+ image->error.normalized_maximum_error=QuantumScale*maximum_error;
return(MagickTrue);
}
\f
double *entropy,ExceptionInfo *exception)
{
double
- area;
+ area,
+ gamma;
ChannelStatistics
*channel_statistics;
channel_statistics[i].entropy;
area++;
}
- if (area > MagickEpsilon)
- {
- channel_statistics[CompositePixelChannel].entropy/=area;
- channel_statistics[CompositePixelChannel].standard_deviation=
- sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area);
- }
+ gamma=PerceptibleReciprocal(area);
+ channel_statistics[CompositePixelChannel].entropy*=gamma;
+ gamma=PerceptibleReciprocal(area-1.0);
+ channel_statistics[CompositePixelChannel].standard_deviation=
+ sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation);
*entropy=channel_statistics[CompositePixelChannel].entropy;
channel_statistics=(ChannelStatistics *) RelinquishMagickMemory(
channel_statistics);
double *standard_deviation,ExceptionInfo *exception)
{
double
- area;
+ area,
+ gamma;
ChannelStatistics
*channel_statistics;
channel_statistics[i].mean;
area++;
}
- if (area > MagickEpsilon)
- {
- channel_statistics[CompositePixelChannel].mean/=area;
- channel_statistics[CompositePixelChannel].standard_deviation=
- sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area);
- }
+ gamma=PerceptibleReciprocal(area);
+ channel_statistics[CompositePixelChannel].mean*=gamma;
+ gamma=PerceptibleReciprocal(area-1.0);
+ channel_statistics[CompositePixelChannel].standard_deviation=
+ sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation);
*mean=channel_statistics[CompositePixelChannel].mean;
*standard_deviation=
channel_statistics[CompositePixelChannel].standard_deviation;