phenotypic.enhance.SatoRidgeFilter#

class phenotypic.enhance.SatoRidgeFilter(sigmas: Iterable[float] = (1, 2, 3), black_ridges: bool = False, mode: str = 'reflect', cval: float = 0)[source]

Bases: ImageEnhancer

Enhance tubular and ridge-like structures in detect_mat with the Sato tubeness filter.

Computes the Sato tubeness measure from Hessian matrix eigenvalues to highlight continuous ridge structures such as filamentous colonies, mycelial networks, and branching morphologies. Less sensitive to parameter tuning than Frangi, making it a good first choice for ridge detection.

For algorithm details, see What Enhancement Actually Does.

Parameters:
  • sigmas (Iterable[float]) – Sequence of standard deviations for Gaussian derivatives. Smaller values detect finer structures; larger values detect thicker features. Typical range: (1, 2, 3) to range(1, 10, 2). Default: (1, 2, 3).

  • black_ridges (bool) – If True, detect dark ridges on bright background. If False (default), detect bright ridges on dark background.

  • mode (str) – Boundary handling. Accepted values: 'constant', 'reflect', 'wrap', 'nearest', 'mirror'. Default: 'reflect'.

  • cval (float) – Fill value when mode='constant'. Default: 0.

Returns:

Input image with detect_mat replaced by the Sato tubeness response map. rgb and gray are unchanged.

Return type:

Image

Best For:
  • Thin filamentous colonies or mycelial networks (fungi, Bacillus, streptomycetes).

  • Continuous ridge-like structures that global thresholding misses.

  • Interconnected fungal networks or biofilm structures.

  • Organisms with branching or root-like colony morphologies.

Consider Also:

See also

Tutorial 3: Enhancing Before Detection for a visual walkthrough of ridge enhancement on plate images. What Enhancement Actually Does for background on Hessian-based ridge detection methods.

Methods

__init__

apply

Applies the operation to an image, either in-place or on a copy.

widget

Return (and optionally display) the root widget.

__init__(sigmas: Iterable[float] = (1, 2, 3), black_ridges: bool = False, mode: str = 'reflect', cval: float = 0)[source]
Parameters:
  • sigmas (tuple | list) – Sequence of standard deviations for Gaussian derivatives. Smaller values detect finer features, larger values detect thicker structures. Default (1, 2, 3).

  • black_ridges (bool) – If True, detect dark ridges (colonies) on bright background. If False, detect bright ridges on dark background. For agar plates with dark colonies on light background, use True. Default False.

  • mode (str) – How to handle image boundaries. Options: ‘constant’ (pad with cval), ‘reflect’ (mirror), ‘wrap’ (tile), ‘nearest’ (replicate edge), ‘mirror’ (symmetric mirror). Default ‘reflect’.

  • cval (float) – Fill value when mode=’constant’. Default 0.

__del__()

Automatically stop tracemalloc when the object is deleted.

__getstate__()

Prepare the object for pickling by disposing of any widgets.

This ensures that UI components (which may contain unpickleable objects like input functions or thread locks) are cleaned up before serialization.

Note

This method modifies the object state by calling dispose_widgets(). Any active widgets will be detached from the object.

apply(image, inplace=False)

Applies the operation to an image, either in-place or on a copy.

Parameters:
  • image (Image) – The arr image to apply the operation on.

  • inplace (bool) – If True, modifies the image in place; otherwise, operates on a copy of the image.

Returns:

The modified image after applying the operation.

Return type:

Image

widget(image: Image | None = None, show: bool = False) Widget

Return (and optionally display) the root widget.

Parameters:
  • image (Image | None) – Optional image to visualize. If provided, visualization controls will be added to the widget.

  • show (bool) – Whether to display the widget immediately. Defaults to False.

Returns:

The root widget.

Return type:

ipywidgets.Widget

Raises:

ImportError – If ipywidgets or IPython are not installed.