From f719ff767aaa90048039586dfc7f161145304dd1 Mon Sep 17 00:00:00 2001 From: Benjamin Loison <12752145+Benjamin-Loison@users.noreply.github.com> Date: Wed, 15 May 2024 20:15:20 +0200 Subject: [PATCH] #66: Stop execution if Pearson correlation is negative --- datasets/raise/attribute_source_camera.py | 4 ++-- datasets/raise/split_and_compare_prnus_of_subgroups.py | 4 ++-- datasets/raise/utils.py | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/datasets/raise/attribute_source_camera.py b/datasets/raise/attribute_source_camera.py index e4efb97..23714fb 100755 --- a/datasets/raise/attribute_source_camera.py +++ b/datasets/raise/attribute_source_camera.py @@ -26,7 +26,7 @@ match DISTANCE: from rms_diff import rmsDiffNumpy case PEARSON_CORRELATION: import scipy - from utils import getPearsonCorrelation + from utils import getPearsonCorrelationDistance setting = ','.join([escapeFilePath(imageCameraFolder) for imageCameraFolder in IMAGES_CAMERAS_FOLDER]) + f'_{DENOISER}' @@ -194,7 +194,7 @@ for computeExtremes in tqdm(([True] if minColor is None or maxColor is None else case ROOT_MEAN_SQUARE: distance = rmsDiffNumpy(cameraTestingImageNoise, camerasIterativeMean[camera].mean) case PEARSON_CORRELATION: - distance = getPearsonCorrelation(cameraTestingImagesNoise[actualCamera][cameraTestingImageIndex], camerasIterativeMean[camera].mean) + distance = getPearsonCorrelationDistance(cameraTestingImagesNoise[actualCamera][cameraTestingImageIndex], camerasIterativeMean[camera].mean) print(f'{cameraTrainingImageIndex=} {cameraTestingImageIndex=} {camera=} {actualCamera=} {distance=}') if minimalDistance is None or distance < minimalDistance: minimalDistance = distance diff --git a/datasets/raise/split_and_compare_prnus_of_subgroups.py b/datasets/raise/split_and_compare_prnus_of_subgroups.py index a42bdc5..b313193 100755 --- a/datasets/raise/split_and_compare_prnus_of_subgroups.py +++ b/datasets/raise/split_and_compare_prnus_of_subgroups.py @@ -20,7 +20,7 @@ match DISTANCE: from rms_diff import rmsDiffNumpy case PEARSON_CORRELATION: import scipy - from utils import getPearsonCorrelation + from utils import getPearsonCorrelationDistance setting = escapeFilePath(IMAGES_FOLDER) + f'_{DENOISER}' @@ -67,7 +67,7 @@ for computeExtremes in tqdm(([True] if minColor is None or maxColor is None else case ROOT_MEAN_SQUARE: distance = rmsDiffNumpy(firstImage, secondImage) case PEARSON_CORRELATION: - distance = getPearsonCorrelation(firstImage, secondImage) + distance = getPearsonCorrelationDistance(firstImage, secondImage) distances += [distance] for subgroupIndex in range(NUMBER_OF_SUBGROUPS): diff --git a/datasets/raise/utils.py b/datasets/raise/utils.py index a3eb311..d92bf1b 100644 --- a/datasets/raise/utils.py +++ b/datasets/raise/utils.py @@ -43,8 +43,12 @@ class Distance(Enum) def getEndUserName(self): return self.name.replace('_', '').title() -def getPearsonCorrelation(firstImage, secondImage): - return abs(scipy.stats.pearsonr(firstImage.flatten(), secondImage.flatten()).statistic - 1) +def getPearsonCorrelationDistance(firstImage, secondImage): + pearsonCorrelation = scipy.stats.pearsonr(firstImage.flatten(), secondImage.flatten()).statistic + if pearsonCorrelation < 0: + print('Negative Pearson correlation, investigate further!') + exit(1) + return abs(pearsonCorrelation - 1) # Source: https://stackoverflow.com/a/43346070 def getGaussianKernel(size, sigma):