Scikit Image - Image Pyramids



An image pyramid is a multi-scale representation of an image created by progressively downscaling or upscaling the original image. Each level of the pyramid represents the image at a different scale. It is a technique commonly used in computer vision and image processing for various tasks, including object detection, image recognition, and image compression.

The scikit-image library provides the functions called pyramid_reduce() and pyramid_expand() functions in the transform module to build and manipulate image pyramids.

Using the skimage.transform.pyramid_expand() function

The skimage.transform.pyramid_expand function is used to upsample and then smooth an input image.

Syntax

Following is the syntax of this function −

skimage.transform.pyramid_expand(image, upscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)

Parameters

  • image (ndarray): Input image.
  • upscale (float, optional): Upscale factor.
  • sigma (float, optional): Sigma for Gaussian filter. Default is calculated as 2 * upscale / 6.0, which corresponds to a filter mask twice the size of the scale factor that covers more than 99% of the Gaussian distribution.
  • order (int, optional): Order of splines used in interpolation of upsampling. See skimage.transform.warp for detail.
  • mode (str, optional): Determines how the array borders are handled, where cval is the value when mode is equal to 'constant'.
  • cval (float, optional): Value to fill past edges of input if mode is 'constant'.
  • preserve_range (bool, optional): Whether to keep the original range of values. Otherwise, the input image is converted according to the conventions of img_as_float.
  • channel_axis (int or None, optional): If None, the image is assumed to be a grayscale (single channel) image. Otherwise, this parameter indicates which axis of the array corresponds to channels. This parameter was added in version 0.19.

Return Value

It returns an array representing the upsampled and smoothed float image.

Example

Here are some examples of how to use the transform.pyramid_expand() function to upsample and smooth an image.

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

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

# Apply pyramid_expand function
upscale_factor = 2
upsampled_smoothed_image = pyramid_expand(image, upscale=upscale_factor, channel_axis=-1)

# Display the original and upsampled-smoothed images
plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title("Original Image")
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(upsampled_smoothed_image)
plt.title("Upsampled Smoothed Image")
plt.axis('off')

plt.tight_layout()
plt.show()

Output

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

Using the skimage.transform.pyramid_reduce() function

The skimage.transform.pyramid_reduce function is used to smooth and then downsample an input image.

Syntax

Following is the syntax of this function −

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

Parameters

  • image (ndarray): Input image.
  • downscale (float, optional): Downscale factor.
  • sigma (float, optional): Sigma for Gaussian filter. Default is calculated as 2 * downscale / 6.0, covering more than 99% of the Gaussian distribution.
  • order (int, optional): Order of splines used in interpolation of downsampling. Refer to skimage.transform.warp for details.
  • mode (str, optional): Determines how the array borders are handled. cval is the value when mode is 'constant'.
  • cval (float, optional): Value to fill past edges of input if mode is 'constant'.
  • preserve_range (bool, optional): Whether to keep the original value range. If False, the input image is converted according to img_as_float conventions.
  • channel_axis (int or None, optional): Indicates which axis of the array corresponds 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 ndarray which represents the smoothed and downsampled float image.

Example

Here are some examples of how to use the transform.pyramid_reduce() function to smooth and then downsample an image.

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

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

# Apply pyramid_reduce
smoothed_downsampled_image = pyramid_reduce(image, downscale=4, order=5, channel_axis=-1)

# Display the original and smoothed-downsampled images
plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title("Original Image")
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(smoothed_downsampled_image)
plt.title("Smoothed Downsampled Image")
plt.axis('off')

plt.tight_layout()
plt.show()

Output

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

Advertisements