torch_staintools.functional.stain_extraction package
Submodules
torch_staintools.functional.stain_extraction.extractor module
- class torch_staintools.functional.stain_extraction.extractor.BaseExtractor
Bases:
ABC
,Callable
Stain Extraction by stain matrix estimation.
Regulate how a stain matrix estimation function should look like
- _abc_impl = <_abc._abc_data object>
- get_partial(*, luminosity_threshold: float = 0.8, num_stains: int = 2, regularizer: float = 0.1, perc: int = 1, rng: Generator | None = None, **kwargs) Callable
- abstract static get_stain_matrix_from_od(od: Tensor, tissue_mask: Tensor, num_stains: int, *args, **kwargs) Tensor
Abstract function to implement: how to estimate stain matrices from optical density vectors.
- Parameters:
od – optical density image in batch (BxCxHxW)
tissue_mask – tissue mask so that only pixels in tissue regions will be evaluated
num_stains – number of stains.
*args – other positional arguments
**kwargs – other keyword arguments.
- Returns:
B x num_stain x num_input_color_channel
- Return type:
output batch of stain matrices
- static normalize_matrix_rows(A: Tensor) Tensor
Normalize the rows of an array. :param A: An array to normalize
- Returns:
Array with rows normalized.
torch_staintools.functional.stain_extraction.factory module
- torch_staintools.functional.stain_extraction.factory.build_from_name(algo: str) BaseExtractor
A factory builder to create stain extractor from name.
- Parameters:
algo – support ‘macenko’ and ‘vahadane’
Returns:
torch_staintools.functional.stain_extraction.macenko module
- class torch_staintools.functional.stain_extraction.macenko.MacenkoExtractor
Bases:
BaseExtractor
- _abc_impl = <_abc._abc_data object>
- static angular_helper(t_hat)
- static cov(x)
Covariance matrix for eigen decomposition. https://en.wikipedia.org/wiki/Covariance_matrix
- static get_stain_matrix_from_od(od: Tensor, tissue_mask: Tensor, *, perc: int = 1, num_stains: int = 2, **kwargs)
- Parameters:
od – Image in the Optical Density space with shape of BxCxHxW
tissue_mask – tissue mask so that only pixels in tissue regions will be evaluated
perc – Percentile number to find the minimum angular term. min angular as perc percentile max angular as 100 - perc percentile.
num_stains – number of stains to separate. For now only support 2 as it might be complicated to separate angular terms in a 3D or higher dimensional space.
**kwargs – Not used. For compatibility.
- Returns:
Stain Matrices in shape of B x num_stains x num_input_color_channel. For H&E stain estimation, if the original image is RGB before converted to OD, then the stain matrix is B x 2 x 3, with the first row, i.e., stain_mat[:, 0, :] as H, and the second row, i.e., stain_mat[:, 1, :] as E.
- static stain_matrix_helper(t_hat: Tensor, perc: int, eig_vecs: Tensor)
Helper function to compute the stain matrix.
Separate the projected OD vectors on singular vectors (SVD of OD in Macenko paper, which is also the eigen vector of the covariance matrix of the OD)
- Parameters:
t_hat – projection of OD on the plane of most significant singular vectors of OD.
perc – perc –> min angular term, 100 - perc –> max angular term
eig_vecs – eigen vectors of the cov(OD), which may also be the singular vectors of OD.
- Returns:
sorted stain matrix in shape of B x num_stains x num_input_color_channel. For H&E cases, the first row in dimension of num_stains is H and the second is E (only num_stains=2 supported for now).
torch_staintools.functional.stain_extraction.utils module
- torch_staintools.functional.stain_extraction.utils.percentile(t: Tensor, q: float, dim: int) Tensor
Author: adapted from https://gist.github.com/spezold/42a451682422beb42bc43ad0c0967a30
Return the
q
-th percentile of the flattenepip d input tensor’s data.Caution
Needs PyTorch >= 1.1.0, as
torch.kthvalue()
is used.Values are not interpolated, which corresponds to
numpy.percentile(..., interpolation="nearest")
.
- Parameters:
t – Input tensor.
q – Percentile to compute, which must be between 0 and 100 inclusive.
dim – which dim to operate for function tensor.kthvalue.
- Returns:
Resulting value (scalar).
torch_staintools.functional.stain_extraction.vahadane module
- class torch_staintools.functional.stain_extraction.vahadane.VahadaneExtractor
Bases:
BaseExtractor
- _abc_impl = <_abc._abc_data object>
- static get_stain_matrix_from_od(od: Tensor, tissue_mask: Tensor, *, regularizer: float = 0.1, lambd=0.01, num_stains: int = 2, algorithm='ista', steps=30, constrained=True, persist=True, init='ridge', verbose: bool = False, rng: Generator | None = None) Tensor
Stain matrix estimation via method of: A. Vahadane et al. ‘Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images’
- Parameters:
od – optical density image in batch (BxCxHxW)
tissue_mask – tissue mask so that only pixels in tissue regions will be evaluated
regularizer – regularization term in ista for dictionary learning
lambd – lambda term for the sparse penalty in objective of dictionary learning
num_stains – # of stains to separate
algorithm – which algorithm to use, iterative-shrinkage soft thresholding algorithm ista or coordinate descent cd.
steps – max number of steps if still not converged
constrained – whether to force dictionary to be positive
persist – whether retain the previous z value for its update or initialize every time in the iteration.
init – init method of the codes a in X = D x a. Selected from ridge, zero, unif (uniformly random), or transpose. Details see torch_staintools.functional.optimization.sparse_util.initialize_code
verbose – whether to print progress messages.
rng – torch.Generator for any random initializations incurred (e.g., if init is set to be unif)
- Returns:
List of HE matrix (B*2x3 - H on the 1st row in the 2nd dimension)