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: 2.0.0.0 (2.0.0.0)
Syntax

public void ConvertXYZtoLMS(
	SourceData dataSource
)

Parameters

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

Remarks

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.
Examples

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):
colorConverter.ConvertLinearRGBtoXYZ(imageData);
colorConverter.ConvertXYZtoLMS(imageData);

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