From 73158e15c788306a02f5a1a088bb91ac837a22b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Novotn=C3=BD?= Date: Thu, 29 Feb 2024 17:22:54 +0100 Subject: [PATCH] Change e in ISSM to 0.01. Normalize entropy and add correct bins. --- image_similarity_measures/quality_metrics.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/image_similarity_measures/quality_metrics.py b/image_similarity_measures/quality_metrics.py index ca8d1ba..02be71a 100644 --- a/image_similarity_measures/quality_metrics.py +++ b/image_similarity_measures/quality_metrics.py @@ -166,7 +166,13 @@ def _ehs(x: np.ndarray, y: np.ndarray): """ Entropy-Histogram Similarity measure """ - H = (np.histogram2d(x.flatten(), y.flatten()))[0] + total_pixels = x.size + + # Original paper operates with entropy specified for images with value range from 0 to 255 + # bins must be set accordingly + value_bins = list(range(256)) + + H = (np.histogram2d(x.flatten(), y.flatten(), bins=[value_bins, value_bins]))[0] / total_pixels return -np.sum(np.nan_to_num(H * np.log2(H))) @@ -203,12 +209,13 @@ def issm(org_img: np.ndarray, pred_img: np.ndarray) -> float: A = 0.3 B = 0.5 C = 0.7 + e = 0.01 ehs_val = _ehs(x, y) canny_val = _edge_c(x, y) - numerator = canny_val * ehs_val * (A + B) + math.e - denominator = A * canny_val * ehs_val + B * ehs_val + C * ssim(x, y) + math.e + numerator = canny_val * ehs_val * (A + B) + e + denominator = A * canny_val * ehs_val + B * ehs_val + C * ssim(x, y) + e return np.nan_to_num(numerator / denominator)