Source code for histomicstk.preprocessing.color_normalization.reinhard_stats

import collections

import numpy as np

from histomicstk.preprocessing import color_conversion
from histomicstk.utils import sample_pixels


[docs] def reinhard_stats( slide_path, sample_fraction, magnification=None, tissue_seg_mag=1.25, invert_image=False, style=None, frame=None, default_img_inversion=False): """Samples a whole-slide-image to determine colorspace statistics (mean, variance) needed to perform global Reinhard color normalization. Normalizing individual tiles independently creates a significant bias in the results of segmentation and feature extraction, as the color statistics of each tile in a whole-slide image can vary significantly. To remedy this, we sample a subset of pixels from the entire whole-slide image in order to estimate the global mean and standard deviation of each channel in the Lab color space that are needed for reinhard color normalization. Parameters ---------- slide_path : str path and filename of slide. sample_fraction : double Fraction of pixels to sample (range (0, 1]). magnification : scalar Desired magnification for sampling. Defaults to native scan magnification. tissue_seg_mag: double, optional low resolution magnification at which foreground will be segmented. Default value = 1.25. Returns ------- Mu : array_like A 3-element array containing the means of the target image channels in sample_pix_lab color space. Sigma : array_like A 3-element list containing the standard deviations of the target image channels in sample_pix_lab color space. Notes ----- Returns a namedtuple. See Also -------- histomicstk.preprocessing.color_conversion.lab_mean_std histomicstk.preprocessing.color_normalization.reinhard """ # generate a sampling of sample_pixels_rgb pixels from whole-slide image sample_pixels_rgb = sample_pixels( slide_path, sample_fraction=sample_fraction, magnification=magnification, tissue_seg_mag=tissue_seg_mag, invert_image=invert_image, style=style, frame=frame, default_img_inversion=default_img_inversion, ) # reshape the Nx3 pixel array into a 1 x N x 3 image for lab_mean_std sample_pixels_rgb = np.reshape(sample_pixels_rgb, (1, sample_pixels_rgb.shape[0], 3)) # compute mean and stddev of sample pixels in Lab space Mu, Sigma = color_conversion.lab_mean_std(sample_pixels_rgb) # build named tuple for output ReinhardStats = collections.namedtuple('ReinhardStats', ['Mu', 'Sigma']) stats = ReinhardStats(Mu, Sigma) return stats
[docs] def reinhard_stats_rgb(rgb_image): rgb_pixels = np.reshape(rgb_image, (1, rgb_image.shape[0] * rgb_image.shape[1], 3)) Mu, Sigma = color_conversion.lab_mean_std(rgb_pixels) # build named tuple for output return collections.namedtuple('ReinhardStats', ['Mu', 'Sigma'])(Mu, Sigma)