Scikit Image - Isotopic Dilation and Erosion



isotropic dilation and erosion are binary morphological operations that use circular structuring elements and an optimization technique involving the Euclidean distance map to efficiently expand or shrink white regions in binary images. These operations are particularly helpful when dealing with large circular structuring elements and can be applied to various image-processing tasks, including segmentation and feature extraction.

The scikit-image library provides the isotropic_dilation() and isotropic_erosion() functions in the morphology module to perform these isotropic morphological dilation and erosion operations with optimizations for large circular structuring elements.

Using the skimage.morphology.isotropic_dilation() function

The isotropic_dilation() function performs binary morphological dilation on an input image. It operates similarly to skimage.morphology.binary_dilation() but is optimized for faster execution when using large circular structuring elements. This optimization is achieved by applying a threshold to the inverted image's Euclidean distance map using the implementation function scipy.ndimage.distance_transform_edt.

Syntax

Following is the syntax of this function −

skimage.morphology.isotropic_dilation(image, radius, out=None, spacing=None)

Parameters

  • image (ndarray): This is the binary input image on which the dilation operation is performed.
  • radius (float): This parameter specifies the radius by which regions in the binary image should be dilated.
  • out (ndarray of bool, optional): an optional output array where the result of the dilation operation will be stored. If you pass None, a new array will be created to store the result.
  • spacing (float or sequence of float, optional): This parameter specifies the spacing of elements along each dimension of the input image. If provided as a single number, it will be used for all axes. If not specified, a grid spacing of unity is implied.

Return Value

It returns the dilated image as a numpy array of boolean values (True for the dilated regions and False for the background).

Example

The following example demonstrates how to use the morphology.isotropic_dilation() function to perform isotropic dilation operation on a binary image.

import numpy as np
from skimage import morphology, io
from skimage.util import invert
import matplotlib.pyplot as plt

# Load an input image
image = io.imread('Images/Circle2.jpg', as_gray=True)

# Invert the original image to get the white object.
binary_image = invert(image)

# Perform isotropic dilation with a radius of 0.5
dilated_image = morphology.isotropic_dilation(binary_image, 0.5)

# Display the input and dilated images
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
ax = axes.ravel()

# Display the input image
ax[0].imshow(image, cmap=plt.cm.gray)
ax[0].set_title('Original Image')
ax[0].set_axis_off()

# Display the eroded image
ax[1].imshow(dilated_image, cmap=plt.cm.gray)
ax[1].set_title('Isotropic Dilated Image')
ax[1].set_axis_off()
plt.tight_layout()
plt.show()

Output

On executing the above program, you will get the following output −

Using the skimage.morphology.isotropic_erosion() function

The isotropic_erosion() function is used to perform binary morphological erosion on an input binary image.

It works similarly to the skimage.morphology.binary_erosion() function but, it is optimized for faster erosion operations with large circular structuring elements. This optimization is achieved by applying a threshold to the inverted image's Euclidean distance map using the implementation function scipy.ndimage.distance_transform_edt.

Syntax

Following is the syntax of this function−

skimage.morphology.octahedron(radius, dtype=<class 'numpy.uint8'>, *, decomposition=None)

Parameters

  • image (ndarray): This is the binary input image on which the dilation operation is performed.
  • radius (float): This parameter specifies the radius by which regions in the binary image should be dilated.
  • out (ndarray of bool, optional): an optional output array where the result of the dilation operation will be stored. If you pass None, a new array will be created to store the result.
  • spacing (float or sequence of float, optional): This parameter specifies the spacing of elements along each dimension of the input image. If provided as a single number, it will be used for all axes. If not specified, a grid spacing of unity is implied.

Return Value

It returns the eroded image as an ndarray of boolean values (True and False).

Example

Here's an example of how to use morphology.isotropic_erosion() function to perform binary morphological erosion on an image.

import numpy as np
from skimage import morphology, io
from skimage.util import invert
import matplotlib.pyplot as plt

# Load an input image
image = io.imread('Images/Circle2.jpg', as_gray=True)

# Invert the original image to get the white object.
binary_image = invert(image)

# Perform isotropic erosion with a radius of 1
eroded_image = morphology.isotropic_erosion(binary_image, 1)

# Display the input and eroded images
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
ax = axes.ravel()

# Display the input image
ax[0].imshow(image, cmap=plt.cm.gray)
ax[0].set_title('Original Image')
ax[0].set_axis_off()

# Display the eroded image
ax[1].imshow(eroded_image, cmap=plt.cm.gray)
ax[1].set_title('Isotropic Eroded Image')
ax[1].set_axis_off()
plt.tight_layout()
plt.show()

Output

On executing the above program, you will get the following output −

Advertisements