From 9d2903af6042c8576693a5b8b060169ce897db56 Mon Sep 17 00:00:00 2001 From: Benjamin Loison Date: Fri, 26 Apr 2024 13:57:18 +0200 Subject: [PATCH] Move `denoise` from `extract_noise.py` to `utils.py` See next commit leveraging it in `split_and_compare_prnus_of_subgroups.py` --- datasets/raise/extract_noise.py | 24 ++++++------------------ datasets/raise/utils.py | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/datasets/raise/extract_noise.py b/datasets/raise/extract_noise.py index 895488d..14cf151 100755 --- a/datasets/raise/extract_noise.py +++ b/datasets/raise/extract_noise.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -import skimage.restoration from skimage import img_as_float import numpy as np from PIL import Image @@ -8,26 +7,20 @@ import os from tqdm import tqdm import csv import rawpy -from utils import Color +from utils import Color, denoise import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter imagesFolderPath = 'rafael/arw' imagesFolderPathFileName = imagesFolderPath.replace('/', '_') # Among: -# - `wavelet` -# - `bilateral` -# - `tv_chambolle` -# - `mean` +# `denoise` possible denoisers and `mean`. denoiser = 'mean' raiseNotFlatFields = False # `[Color.RED, Color.GREEN_RIGHT, ...]` or `Color` or `[None]` for not raw images. colors = [None] -if denoiser != 'mean': - denoise = getattr(skimage.restoration, f'denoise_{denoiser}') - imagesFileNames = os.listdir(imagesFolderPath + ('/png' if raiseNotFlatFields else '')) if raiseNotFlatFields: @@ -113,15 +106,10 @@ def treatImage(imageFileName, computeExtremes = False, color = None): imageNpArray = getImageNpArray(imageFileName, computeExtremes, color) if imageNpArray is None: return - match denoiser: - case 'wavelet': - imageDenoisedNpArray = denoise(imageNpArray, rescale_sigma=True) - case 'bilateral': - imageDenoisedNpArray = denoise(imageNpArray, sigma_color=0.05, sigma_spatial=15) - case 'tv_chambolle': - imageDenoisedNpArray = denoise(imageNpArray, weight=0.2) - case 'mean': - imageDenoisedNpArray = means[color] + if denoiser != 'mean': + imageDenoisedNpArray = denoise(imageNpArray, denoiser) + else: + imageDenoisedNpArray = means[color] imageNoiseNpArray = imageNpArray - imageDenoisedNpArray if mean is None: mean = imageNoiseNpArray diff --git a/datasets/raise/utils.py b/datasets/raise/utils.py index 7fca4ab..79fa11d 100644 --- a/datasets/raise/utils.py +++ b/datasets/raise/utils.py @@ -1,4 +1,5 @@ from enum import Enum, auto +import skimage.restoration class Color(Enum): RED = auto() @@ -8,3 +9,19 @@ class Color(Enum): def __str__(self): return self.name.lower() + +# Among: +# - `wavelet` +# - `bilateral` +# - `tv_chambolle` +def denoise(imageNpArray, denoiserName): + skImageRestorationDenoise = getattr(skimage.restoration, f'denoise_{denoiserName}') + + match denoiserName: + case 'wavelet': + imageDenoisedNpArray = skImageRestorationDenoise(imageNpArray, rescale_sigma=True) + case 'bilateral': + imageDenoisedNpArray = skImageRestorationDenoise(imageNpArray, sigma_color=0.05, sigma_spatial=15) + case 'tv_chambolle': + imageDenoisedNpArray = skImageRestorationDenoise(imageNpArray, weight=0.2) + return imageDenoisedNpArray \ No newline at end of file