From dd2ca2549b2d4c801becdbfd75c5a3f466d4ce70 Mon Sep 17 00:00:00 2001 From: ashmeigh Date: Tue, 28 May 2024 20:31:08 +0100 Subject: [PATCH] Modification of calculate_global,compute_function Added Validation Step. Fixed issue with normalization factor --- .../roi_normalisation/roi_normalisation.py | 44 +++++++------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/mantidimaging/core/operations/roi_normalisation/roi_normalisation.py b/mantidimaging/core/operations/roi_normalisation/roi_normalisation.py index 9f2793c0628..0e834c57e0a 100644 --- a/mantidimaging/core/operations/roi_normalisation/roi_normalisation.py +++ b/mantidimaging/core/operations/roi_normalisation/roi_normalisation.py @@ -87,18 +87,19 @@ def filter_func(images: ImageStack, @staticmethod def calculate_global(images, region_of_interest, normalisation_mode, flat_field): global_params = {} + air_means = np.array([ + RoiNormalisationFilter._calc_mean(images.data[i], region_of_interest.left, region_of_interest.top, + region_of_interest.right, region_of_interest.bottom) + for i in range(images.data.shape[0]) + ]) if normalisation_mode == 'Stack Average': - air_means = np.array([ - RoiNormalisationFilter._calc_mean(images.data[i], region_of_interest.left, region_of_interest.top, - region_of_interest.right, region_of_interest.bottom) - for i in range(images.data.shape[0]) - ]) - global_params['global_mean'] = np.mean(air_means) + normed_air_means = air_means / air_means.mean() + global_params['normalisation_factors'] = normed_air_means elif normalisation_mode == 'Flat Field' and flat_field is not None: - flat_field_mean = RoiNormalisationFilter._calc_mean(flat_field.data, region_of_interest.left, - region_of_interest.top, region_of_interest.right, - region_of_interest.bottom) - global_params['flat_field_mean'] = flat_field_mean + flat_means = flat_field.data[:, region_of_interest.top:region_of_interest.bottom, + region_of_interest.left:region_of_interest.right].mean(axis=(1, 2)) + normed_air_means = air_means / flat_means.mean() + global_params['normalisation_factors'] = normed_air_means else: raise ValueError(f"Unknown normalisation_mode: {normalisation_mode}") @@ -108,25 +109,10 @@ def calculate_global(images, region_of_interest, normalisation_mode, flat_field) @staticmethod def compute_function(i: int, array: np.ndarray, params): - region_of_interest = params['region_of_interest'] - normalisation_mode = params['normalisation_mode'] - global_params = params['global_params'] - - air_mean = RoiNormalisationFilter._calc_mean(array[i], region_of_interest.left, region_of_interest.top, - region_of_interest.right, region_of_interest.bottom) - - print(f"Image {i} Air Mean: {air_mean}") - - if normalisation_mode == 'Stack Average': - normalization_factor = global_params['global_mean'] / air_mean - print(f"Image {i} Stack Average Normalization Factor: {normalization_factor}") - array[i] *= normalization_factor - elif normalisation_mode == 'Flat Field': - normalization_factor = global_params['flat_field_mean'] / air_mean - print(f"Image {i} Flat Field Normalization Factor: {normalization_factor}") - array[i] *= normalization_factor - else: - raise ValueError(f"Unknown normalisation_mode: {normalisation_mode}") + normalisation_factors = params['global_params']['normalisation_factors'] + normalization_factor = normalisation_factors[i] + print(f"Image {i} Normalization Factor: {normalization_factor}") + array[i] /= normalization_factor @staticmethod def _calc_mean(data, air_left=None, air_top=None, air_right=None, air_bottom=None):