From 14b8ad2f31f183a7d00a7f093d9ee020fb593d81 Mon Sep 17 00:00:00 2001 From: Cristy Date: Sun, 16 Feb 2025 17:52:53 -0500 Subject: [PATCH] For RMSE, take sqrt() of MSE pixels --- MagickCore/compare.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 29cc8cb79d..b6845cc8f9 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -3831,6 +3831,24 @@ static Image *PSNRSimilarityImage(const Image *image,const Image *reconstruct, } #endif +static Image *RMSESimilarityImage(const Image *image,const Image *reconstruct, + RectangleInfo *offset,double *similarity_metric,ExceptionInfo *exception) +{ + Image + *similarity_image; + + MagickBooleanType + status; + + similarity_image=MSESimilarityImage(image,reconstruct,offset, + similarity_metric,exception); + status=EvaluateImage(similarity_image,PowEvaluateOperator,0.5,exception); + if (status == MagickFalse) + similarity_image=DestroyImage(similarity_image); + *similarity_metric=sqrt(*similarity_metric); + return(similarity_image); +} + static double GetSimilarityMetric(const Image *image,const Image *reconstruct, const MetricType metric,const ssize_t x_offset,const ssize_t y_offset, ExceptionInfo *exception) @@ -3947,9 +3965,8 @@ MagickExport Image *SimilarityImage(const Image *image,const Image *reconstruct, if ((artifact != (const char *) NULL) && (IsStringTrue(artifact) == MagickFalse)) break; - similarity_image=MSESimilarityImage(image,reconstruct,offset, + similarity_image=RMSESimilarityImage(image,reconstruct,offset, similarity_metric,exception); - *similarity_metric=sqrt(*similarity_metric); return(similarity_image); } default: break;