Core Optical, Inc.
ColorimetricConverter ConvertXYZtoLMS Method Industrial Strength, Scientific Grade
Transforms source data in-place from CIE XYZ to LMS space.

Namespace: PrecisionImage.Colorimetry
Assembly: PrecisionImage (in PrecisionImage.dll) Version: (

public void ConvertXYZtoLMS(
	SourceData dataSource


Type: PrecisionImage SourceData
A SourceData object encapsulating the image data to be converted.


This method transforms the source data from CIE XYZ tristumulus values to long/medium/short (LMS) cone excitation space using the Hunter-Pointer-Estevez model. XYZ values must be stored in channels 0, 1 and 2 respectively. LMS output values are stored in-place in channels 0, 1 and 2. To guarantee an invertable result, output values are not clamped to any arbitrary range and are stored as-is. The dataSource object must contain at least 3 channels or an OnlineArgumentOutOfRangeException exception will result.

The following converts the image data from Linear RGB to CIE XYZ, and then from CIE XYZ to LMS cone excitation space.
using PrecisionImage;
using PrecisionImage.Colorimetry;

// Instantiate the SourceData object. "MyBitmapSource" is an rgb image with no alpha channel: 
SourceData imageData = new SourceData(MyBitmapSource);

// Instantiate the ColorimetricConverter object: 
ColorimetricConverter colorConverter = new ColorimetricConverter();

// Image data is currently in linear RGB space. Transform to CIE XYZ in-place (imageData must have exactly 3 channels 
// or exception will result), and then from XYZ to LMS space (in-place):

// Assume some processing on one or more of the LMS channels:
// After channel processing, transform LMS values back to linear RGB (in-place):
See Also