Source code for topostats.thresholds

"""Functions for calculating thresholds."""

# pylint: disable=no-name-in-module
import logging
from collections.abc import Callable

import numpy.typing as npt
from skimage.filters import threshold_mean, threshold_minimum, threshold_otsu, threshold_triangle, threshold_yen

from topostats.logs.logs import LOGGER_NAME

LOGGER = logging.getLogger(LOGGER_NAME)

# pylint: disable=no-else-return
# pylint: disable=unused-argument


[docs] def threshold(image: npt.NDArray, method: str = None, otsu_threshold_multiplier: float = None, **kwargs: dict) -> float: """ Thresholding for producing masks. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. method : str Method to use for thresholding, currently supported methods are otsu (default), mean and minimum. otsu_threshold_multiplier : float Factor for scaling the Otsu threshold. **kwargs : dict Additional keyword arguments to pass to skimage methods. Returns ------- float Threshold of image using specified method. """ thresholder = _get_threshold(method) return thresholder(image, otsu_threshold_multiplier=otsu_threshold_multiplier, **kwargs)
[docs] def _get_threshold(method: str = "otsu") -> Callable: """ Creator component which determines which threshold method to use. Parameters ---------- method : str Threshold method to use, currently supports otsu (default), mean, minimum, mean yen, and triangle. Returns ------- function Returns function appropriate for the required threshold method. Raises ------ ValueError Unsupported methods result in ValueError. """ if method == "otsu": return _threshold_otsu if method == "mean": return _threshold_mean if method == "minimum": return _threshold_minimum if method == "yen": return _threshold_yen if method == "triangle": return _threshold_triangle raise ValueError(method)
[docs] def _threshold_otsu(image: npt.NDArray, otsu_threshold_multiplier: float = None, **kwargs) -> float: """ Calculate the Otsu threshold. For more information see `skimage.filters.threshold_otsu() <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_otsu>`_. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. otsu_threshold_multiplier : float Factor for scaling Otsu threshold. **kwargs : dict Dictionary of keyword arguments to pass to 'skimage.filters.threshold_otsu(**kwargs)'. Returns ------- float Threshold to be used in masking heights. """ return threshold_otsu(image, **kwargs) * otsu_threshold_multiplier
[docs] def _threshold_mean(image: npt.NDArray, otsu_threshold_multiplier: float = None, **kwargs) -> float: """ Calculate the Mean threshold. For more information see `skimage.filters.threshold_mean() <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_mean>`_. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. otsu_threshold_multiplier : float Factor for scaling (not used). **kwargs : dict Dictionary of keyword arguments to pass to 'skimage.filters.threshold_mean(**kwargs)'. Returns ------- float Threshold to be used in masking heights. """ return threshold_mean(image, **kwargs)
[docs] def _threshold_minimum(image: npt.NDArray, otsu_threshold_multiplier: float = None, **kwargs) -> float: """ Calculate the Minimum threshold. For more information see `skimage.filters.threshold_minimum() <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_minimum>`_. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. otsu_threshold_multiplier : float Factor for scaling (not used). **kwargs : dict Dictionary of keyword arguments to pass to 'skimage.filters.threshold_minimum(**kwargs)'. Returns ------- float Threshold to be used in masking heights. """ return threshold_minimum(image, **kwargs)
[docs] def _threshold_yen(image: npt.NDArray, otsu_threshold_multiplier: float = None, **kwargs) -> float: """ Calculate the Yen threshold. For more information see `skimage.filters.threshold_yen() <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_yen>`_. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. otsu_threshold_multiplier : float Factor for scaling (not used). **kwargs : dict Dictionary of keyword arguments to pass to 'skimage.filters.threshold_yen(**kwargs)'. Returns ------- float Threshold to be used in masking heights. """ return threshold_yen(image, **kwargs)
[docs] def _threshold_triangle(image: npt.NDArray, otsu_threshold_multiplier: float = None, **kwargs) -> float: """ Calculate the triangle threshold. For more information see `skimage.filters.threshold_triangle() <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_triangle>`_. Parameters ---------- image : npt.NDArray 2-D Numpy array of image for thresholding. otsu_threshold_multiplier : float Factor for scaling (not used). **kwargs : dict Dictionary of keyword arguments to pass to 'skimage.filters.threshold_triangle(**kwargs)'. Returns ------- float Threshold to be used in masking heights. """ return threshold_triangle(image, **kwargs)