Scikit Image - Conversion to CIE-LAB Colorspace



The CIELAB color space also referred to as L*a*b*, is a color space defined by the International Commission on Illumination (abbreviated CIE) in 1976. The LAB stands for Lightness, position between red and green, and position between yellow and blue.

It represents colors using three values: L* for perceptual lightness, and a* and b* for the four unique colors of human vision: red, green, blue, and yellow. The primary goal of CIELAB was to create a perceptually uniform color space, where a specific numerical change corresponds to a similar perceived change in color.

It is widely used in various applications, including color image processing, computer vision, color management, and detecting small differences in color.

The Scikit-Image library provides functions like color.rgb2lab(), color.lch2lab(), and color.xyz2lab() to do conversions from RGB, LCH, and XYZ color space to LAB color space.

Converting RGB image to CIE-LAB

The skimage.color.rgb2lab() method is used to perform the conversion of an image from the RGB color space to the CIE Lab color space under the given illuminant and observer.

Syntax

Following is the syntax of this function −

skimage.color.rgb2lab(rgb, illuminant='D65', observer='2', *, channel_axis=-1) 

The method accepts the following parameters −

  • rgb: It is an array-like object representing the image in RGB format. The shape of the array should be at least 2-D with the last dimension having a size of 3, representing the three channels (Red, Green, and Blue).
  • illuminant: An optional string parameter representing the name of the illuminant {A, B, C, D50, D55, D65, D75, E}. The default value is 'D65'.
  • Observer: An optional string parameter representing the aperture angle of the observer {2, 10, R}. The default value is '2'.
  • channel_axis: An optional parameter indicating which axis of the array corresponds to channels. By default, it is set to -1, which corresponds to the last axis. This parameter was introduced in scikit-image new version 0.19.

The method returns a ndarray representing the output image in Lab format. The dimensions of the output array are the same as the input array.

And the method will raise the ValueError. If the rgb input is not at least 2-D with a shape of (..., 3, ...), indicating the presence of the three channels.

Example

The following example demonstrates the conversion of sRGB color space to the CIE Lab color space using color.rgb2lab() method.

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

# Read a RGB image 
rgb_image = io.imread('Images/Fruits.jpg')

# Convert RGB to LAB
lab_image = color.rgb2lab(rgb_image)

# Display the RGB and CIE-LAB images using Matplotlib
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10, 5))

axes[0].imshow(rgb_image)
axes[0].set_title('Input RGB Image')
axes[0].axis('off')

axes[1].imshow(lab_image)
axes[1].set_title('Output CIE-LAB Image')
axes[1].axis('off')

plt.tight_layout()
plt.show()

Output

When you run the above program, it will produce the following output −

RGB

Converting XYZ image to CIE-LAB

The skimage.color.xyz2lab method is used to perform the conversion of an image from the XYZ color space to the CIE Lab color space.

Syntax

Following is the syntax of this function −

skimage.color.xyz2lab(xyz, illuminant='D65', observer='2', *, channel_axis=-1)

The method accepts the following parameters −

  • xyz (array_like): The input image array in XYZ format. The shape of the array should be at least 2-D with the last dimension having a size of 3, representing the three channels (X, Y, and Z).
  • Illuminant: it is an optional string parameter representing the name of the illuminant {A, B, C, D50, D55, D65, D75, E}. The default value is 'D65'.
  • Observer: An optional string parameter representing the aperture angle of the observer {2, 10, R}. The default value is '2'.
  • channel_axis: An optional parameter indicating which axis of the array corresponds to channels. By default, it is set to -1, which corresponds to the last axis. This parameter was introduced in scikit-image new version 0.19.

The method returns a ndarray representing the output image in CIE Lab format. The dimensions of the output array are the same as the input array.

And the method will raise the ValueError if −

  • The xyz input is not at least 2-D with a shape of (..., 3, ...), indicating the presence of the three channels.
  • Or, either the illuminant or the observer angle is unsupported or unknown.

Example

The following example demonstrates the conversion of an image from XYZ to CIE-LAB color space using color.xyz2lab() method.

import numpy as np
from skimage import color, io
import matplotlib.pyplot as plt

# Read a XYZ image
xyz_image = color.rgb2xyz(io.imread('Images/Fruits.jpg'))

# Convert XYZ to LAB
lab_image = color.xyz2lab(xyz_image)

# Display the XYZ and CIE-LAB images using Matplotlib
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10, 5))

axes[0].imshow(xyz_image)
axes[0].set_title('Input XYZ Image')
axes[0].axis('off')

axes[1].imshow(lab_image)
axes[1].set_title('Output CIE-LAB Image')
axes[1].axis('off')

plt.tight_layout()
plt.show()

Output

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

XYZ

Converting LCH image to CIE-LAB

The skimage.color.lch2lab() method is used to perform the conversion of an image from the CIE-LCh color space to the CIE-LAB (Cartesian) color space.

Syntax

Following is the syntax of this function −

skimage.color.lch2lab(lch, *, channel_axis=-1)

The method accepts the following parameters −

  • lch (array_like): The input image in CIE-LCh color space. The shape of the array should be at least 3-D with the last dimension having a size of 3, representing the CIE-LCh channels.
  • channel_axis: This parameter indicates which axis of the array corresponds to the channels. By default, it is set to -1, which corresponds to the last axis.

The method returns a ndarray representing the output image in CIE Lab format. The dimensions of the output array are the same as the input array. And the method will raise the ValueError if the lch input does not have at least 3 channels.

It's important to note that the lch2lab function assumes the Hue channel (i.e., h) is expressed as an angle in the range (0, 2*pi).

Example

The following example demonstrates the conversion of an image from CIE-LCh color space to CIE-LAB color space using color.lab2lch() method.

import numpy as np
from skimage import color, io
import matplotlib.pyplot as plt

# Read a RGB image as lab
lab_image = color.rgb2lab(io.imread('Images/Fruits.jpg'))

# Convert LAB to LCH image 
lch_image = color.lab2lch(lab_image)

# Convert LCH to LAB
lab_image = color.lch2lab(lch_image)

# Display the LCH and CIE-LAB images using Matplotlib
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10, 5))

axes[0].imshow(lch_image)
axes[0].set_title('Input CIE-LCH Image')
axes[0].axis('off')

axes[1].imshow(lab_image)
axes[1].set_title('Output CIE-LAB Image')
axes[1].axis('off')

plt.tight_layout()
plt.show()

Output

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

LCH
Advertisements