Scikit Image - Pyramid Laplacian Transform



The Laplacian Pyramid Transform is often referred to as the Laplacian pyramid, and it is a multi-scale representation of an image used for various image processing tasks such as image compression and image enhancement. It is derived from the Gaussian pyramid and is designed to emphasize and extract details or high-frequency components from an image.

In scikit-image, you can use the skimage.transform.pyramid_laplacian() function to create a Laplacian Pyramid from an input image.

Using the skimage.transform.pyramid_laplacian() function

The skimage.transform.pyramid_laplacian() function is used to generate a sequence of images in the Laplacian pyramid created from the input image.

In each layer, the image contains the difference between the downsampled and the downsampled, smoothed image according to the formula:

layer = resize(prev_layer) - smooth(resize(prev_layer))

The initial layer of the pyramid represents the difference between the original, unscaled image and its smoothed version. The total count of images in the pyramid is determined by max_layer + 1. When all layers are computed, the last image could either be a one-pixel image or an image where further reduction does not alter its dimensions.

Syntax

Following is the syntax of this function −

skimage.transform.pyramid_laplacian(image, max_layer=-1, downscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)

Parameters

  • image (ndarray): Input image.
  • max_layer (int, optional): Number of layers for the pyramid. The 0th layer corresponds to the original image. Default is -1, which generates all possible layers.
  • sigma (float, optional): Sigma value for Gaussian filter. Default is calculated as 2 * downscale / 6.0, which covers more than 99% of the Gaussian distribution.
  • mode (str, optional): Determines how the array borders are handled, with cval as the value when mode is 'constant'. It can take the following strings {reflect, constant, edge, symmetric, wrap}.
  • cval (float, optional): Value to fill beyond the edges of the input image if the mode is 'constant'.
  • preserve_range (bool, optional): Whether to maintain the original value range. If False, the input image is converted according to img_as_float conventions.
  • channel_axis (int or None, optional): Indicates the array's axis corresponding to channels. If None, the image is assumed to be grayscale (single channel). This parameter was added in version 0.19.

Return Value

It returns a generator(pyramid ) that yields pyramid layers as float images.

Example

Here is an example of building an image pyramid using the pyramid_laplacian() function.

import numpy as np
import matplotlib.pyplot as plt
from skimage.transform import pyramid_laplacian
from skimage import io

# Load the input image
image = io.imread('Images/Yellow Car.jpg')

# Build the Laplacian pyramid
pyramid = tuple(pyramid_laplacian(image, max_layer=1, downscale=10, channel_axis=-1))

# Display the original and each layer of the Laplacian pyramid
num_layers = len(pyramid)

# Create subplots
fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# Display the original image
axes[0].imshow(image)
axes[0].set_title("Original Image")
axes[0].axis('off')

# Display each layer of the Laplacian pyramid
for i, layer in enumerate(pyramid):
    axes[i + 1].imshow(layer)
    axes[i + 1].set_title(f'Layer {i + 1}')
    axes[i + 1].axis('off')

plt.tight_layout()
plt.show()

Output

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

Advertisements