Source code for pyfibre.model.tools.preprocessing

"""
PyFibre
Preprocessing Library

Created by: Frank Longford
Created on: 18/02/2019
"""
import logging
import numpy as np

from skimage.restoration import denoise_nl_means, estimate_sigma
from skimage.exposure import rescale_intensity

logger = logging.getLogger(__name__)


[docs]def clip_intensities(image, p_intensity=(1, 98)): """ Pre-process image to remove outliers, reduce noise and rescale Parameters ---------- image: array_like (float); shape=(n_y, n_x) Image to pre-process p_intensity: tuple (float); shape=(2,) Percentile range for intensity rescaling (used to remove outliers) Returns ------- image: array_like (float); shape=(n_y, n_x) Pre-processed image """ logger.debug( f"Preprocessing images using clipped " f"intensity percentages {p_intensity}") low, high = np.percentile(image, p_intensity) image = rescale_intensity( image, in_range=(low, high), out_range=(low, high) ) return image
[docs]def nl_means(image, p_denoise=(5, 35)): """ Non-local means denoise algorithm using estimate of Gaussian noise Parameters ---------- image: array_like (float); shape=(n_y, n_x) Image to pre-process p_denoise: tuple (float); shape=(2,) Parameters for non-linear means denoise algorithm (used to remove noise) Returns ------- image: array_like (float); shape=(n_y, n_x) Pre-processed image """ sigma = estimate_sigma(image) image = denoise_nl_means( image, patch_size=p_denoise[0], patch_distance=p_denoise[1], fast_mode=True, h=1.2 * sigma, sigma=sigma, multichannel=False) return image