Scikit Image - Contrast



Contrast in an image refers to the difference in brightness and color between different elements within the image. In a high-contrast image, the difference between the lightest and darkest areas is significant, resulting in well-defined edges and a more visual appearance. On the other hand, in a low-contrast image, the range between light and dark is minimal, resulting in a flatter and less visual appearance of the image elements.

To increase and decrease the contrast of an image using the scikit-image library, you can use the rescale_intensity() method from the exposure module.

The skimage.exposure.rescale_intensity() method

The exposure.rescale_intensity() function in scikit-image is used to adjust the intensity range of an image.

Syntax

Following is the syntax of this method −

skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')

Parameters

  • image: The input image array whose intensity range is adjusted.
  • In_range, out_range: (str or 2-tuple, optional) Specifies the minimum and maximum intensity values of the input image. It can take several forms.
  • 'image': This uses the minimum and maximum intensity values present in the input image as the range.
  • 'dtype': This uses the minimum and maximum values allowed by the image's data type (dtype) as the range.
  • dtype-name: This uses the intensity range based on the desired dtype. Must be a valid key in DTYPE_RANGE.
  • 2-tuple: This uses the range_values as the explicit minimum and maximum intensities.

Return Value

It returns an array that represents the image after rescaling its intensity levels. The output image has the same data type (dtype) as the input image.

Example

The following example demonstrates how to use the exposure.rescale_intensity() method to increase the contrast of an image.

from skimage import io, exposure
import matplotlib.pyplot as plt

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

# Increase contrast by stretching the intensity range
high_contrast_image = exposure.rescale_intensity(image, in_range=(0, 100), out_range=(0, 1))

# Display the original and high-contrast images
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
ax1, ax2 = axes.ravel()

ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
ax1.set_axis_off()

ax2.imshow(high_contrast_image, cmap='gray')
ax2.set_title('High Contrast Image')
ax2.set_axis_off()

plt.show()

Output

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

Example

The following example demonstrates how to use the exposure.rescale_intensity() method to decrease the contrast of an image.

from skimage import io, exposure
import matplotlib.pyplot as plt

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

# Decrease contrast by compressing the intensity range
low_contrast_image = exposure.rescale_intensity(image, in_range=(100, 200), out_range=(0, 1))

# Display the original and low-contrast images
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
ax1, ax2 = axes.ravel()

ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')

ax2.imshow(low_contrast_image, cmap='gray')
ax2.set_title('Low Contrast Image')

plt.show()

Output

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

Advertisements