Source code for histomicstk.preprocessing.color_deconvolution.separate_stains_xu_snmf

"""Placeholder."""
import numpy
import numpy.linalg as np_linalg

import histomicstk.utils as utils

from . import _linalg as htk_linalg


[docs] def separate_stains_xu_snmf(im_sda, w_init=None, beta=0.2): """Compute the stain matrix for color deconvolution with SNMF. ... (sparse non-negative matrix factorization). Parameters ---------- im_sda : array_like Image (MxNx3) or matrix (3xN) in SDA space for which to compute the stain matrix. w_init : array_like, default is None Initial value for the stain matrix. if not provided, default initialization is used. beta : float Regularization factor for the sparsity of the deconvolved pixels Returns ------- w : array_like A 3x3 matrix of stain column vectors Note ---- All input pixels are used in the factorization. See Also -------- histomicstk.preprocessing.color_deconvolution.color_deconvolution histomicstk.preprocessing.color_deconvolution.separate_stains_macenko_pca References ---------- .. [#] Van Eycke, Y. R., Allard, J., Salmon, I., Debeir, O., & Decaestecker, C. (2017). Image processing in digital pathology: an opportunity to solve inter-batch variability of immunohistochemical staining. Scientific Reports, 7. .. [#] Xu, J., Xiang, L., Wang, G., Ganesan, S., Feldman, M., Shih, N. N., ... & Madabhushi, A. (2015). Sparse Non-negative Matrix Factorization (SNMF) based color unmixing for breast histopathological image analysis. Computerized Medical Imaging and Graphics, 46, 20-29. """ import nimfa # Image matrix m = utils.convert_image_to_matrix(im_sda) m = utils.exclude_nonfinite(m) factorization = \ nimfa.Snmf(m, rank=m.shape[0] if w_init is None else w_init.shape[1], W=w_init, H=None if w_init is None else np_linalg.pinv(w_init).dot(m), beta=beta) factorization.factorize() return htk_linalg.normalize(numpy.array(factorization.W))