Source code for cdl.computation.image.morphology
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
"""
Morphology computation module
-----------------------------
"""
# pylint: disable=invalid-name # Allows short reference names like x, y, ...
# Note:
# ----
# All dataset classes must also be imported in the cdl.computation.param module.
from __future__ import annotations
import guidata.dataset as gds
from skimage import morphology
from cdl.computation.image import dst_11, restore_data_outside_roi
from cdl.config import _
from cdl.obj import ImageObj
[docs]
class MorphologyParam(gds.DataSet):
"""White Top-Hat parameters"""
radius = gds.IntItem(
_("Radius"), default=1, min=1, help=_("Footprint (disk) radius.")
)
[docs]
def compute_white_tophat(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute White Top-Hat with :py:func:`skimage.morphology.white_tophat`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "white_tophat", f"radius={p.radius}")
dst.data = morphology.white_tophat(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst
[docs]
def compute_black_tophat(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute Black Top-Hat with :py:func:`skimage.morphology.black_tophat`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "black_tophat", f"radius={p.radius}")
dst.data = morphology.black_tophat(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst
[docs]
def compute_erosion(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute Erosion with :py:func:`skimage.morphology.erosion`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "erosion", f"radius={p.radius}")
dst.data = morphology.erosion(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst
[docs]
def compute_dilation(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute Dilation with :py:func:`skimage.morphology.dilation`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "dilation", f"radius={p.radius}")
dst.data = morphology.dilation(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst
[docs]
def compute_opening(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute morphological opening with :py:func:`skimage.morphology.opening`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "opening", f"radius={p.radius}")
dst.data = morphology.opening(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst
[docs]
def compute_closing(src: ImageObj, p: MorphologyParam) -> ImageObj:
"""Compute morphological closing with :py:func:`skimage.morphology.closing`
Args:
src: input image object
p: parameters
Returns:
Output image object
"""
dst = dst_11(src, "closing", f"radius={p.radius}")
dst.data = morphology.closing(src.data, morphology.disk(p.radius))
restore_data_outside_roi(dst, src)
return dst