Scikit Image - Generating Footprints



Footprint, often referred to as a structuring element, is a small matrix or shape mask used in basic morphological image processing operations. It defines the neighborhood of pixels around a central pixel during the processing of each pixel in the input image.

Generating footprints refers to the creation of matrices (known as structuring elements) of different shapes including 2D shape and 3D shapes. In scikit-image (skimage), you can generate footprints for morphological operations using various methods provided by the skimage.morphology module.

Creating 2D structuring elements

To create 2D(flat) structuring elements like disk, square, rectangle, diamond, octagon, and star can be possible using the following functions from the skimage.morphology module. Lets see is the synxat of the each function below:

Disk-shaped Footprint

To create a disk(circular) shaped structuring element, the disk() function can be used.

Syntax

Following is the syntax −

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

Diamond-shaped Footprint

The function diamond() generates the diamond-shaped structuring element.

Syntax

Following is the syntax −

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

Octagon-shaped Footprint

The function octagon() generates an octagon-shaped footprint.

Syntax

Following is the syntax −

skimage.morphology.octagon(m, n, dtype=<class 'numpy.uint8'>, *, decomposition=None)

Rectangle-shaped Footprint

The rectangle() function allows you to create a rectangular-shaped structuring element with specified dimensions.

Syntax

Following is the syntax −

skimage.morphology.rectangle(nrows, ncols, dtype=<class 'numpy.uint8'>, *, decomposition=None)

Square-shaped Footprint

Generating a square-shaped structuring element can be possible by using the square() function.

Syntax

Following is the syntax −

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

Star-shaped Footprint

The start-shaped footprints are generated by using the star() function.

Syntax

Following is the syntax −

skimage.morphology.star(a, dtype=<class 'numpy.uint8'>)

Example

This example demonstrates the use of functions from the skimage.morphology library to create flat (2D) footprints. Each plot is labeled with the corresponding function used to generate the structuring element.

import matplotlib.pyplot as plt
from skimage.morphology import (square, rectangle, diamond, disk, octagon, star)

# Generate 2D structuring elements.
struc_2d = {
    "square(10)": square(10),
    "rectangle(10, 5)": rectangle(10, 5),
    "diamond(7)": diamond(7),
    "disk(7)": disk(7),
    "octagon(7, 4)": octagon(7, 4),
    "star(5)": star(5)
}

# Visualize the elements.
fig = plt.figure(figsize=(10, 10))

idx = 1
for title, struc in struc_2d.items():
    ax = fig.add_subplot(3, 3, idx)
    ax.imshow(struc, cmap="Paired", vmin=0, vmax=12)
    for i in range(struc.shape[0]):
        for j in range(struc.shape[1]):
            ax.text(j, i, struc[i, j], ha="center", va="center", color="w")
    ax.set_axis_off()
    ax.set_title(title)
    idx += 1

fig.tight_layout()
plt.show()

Output

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

Creating 3D structuring elements

To generate 3D structuring elements, such as cube, octahedron, and ball, you can utilize the provided functions within the skimage.morphology module. The syntax for each function is discussed below:

Ball-shaped Footprint

To create a ball-shaped(the 3D equivalent of a disk) structuring element you can use the ball() function.

Syntax

Following is the syntax −

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

Cube-shaped Footprint

To create a cube-shaped(the 3D equivalent of a square) structuring element, you can use the cube() function from the skimage.morphology module.

Syntax

Following is the syntax −

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

Octahedron-shaped Footprint

Creating an octahedron-shaped (the 3D equivalent of a diamond) structuring element can be possible by using the octahedron() function.

Syntax

Following is the syntax −

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

Example

This example demonstrates the use of functions from the skimage.morphology library to create 3D footprints. Each plot is labeled with the corresponding function used to generate the structuring element.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from skimage.morphology import (cube, octahedron, ball)

# Generate 3D structuring elements.
struc_3d = {
    "cube(7)": cube(7),
    "octahedron(8)": octahedron(8),
    "ball(10)": ball(10)
}

# Visualize the elements.
fig = plt.figure(figsize=(15, 15))

idx = 1
for title, struc in struc_3d.items():
    ax = fig.add_subplot(3, 3, idx, projection=Axes3D.name)
    ax.voxels(struc)
    ax.set_title(title)
    idx += 1

fig.tight_layout()
plt.show()

Output

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

Advertisements