Defines objects for tristimulus values computation from spectral data.
Converts given spectral power distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant.
Parameters: |
|
---|---|
Returns: | CIE XYZ tristimulus values. |
Return type: | ndarray, (3,) |
Warning
The output domain of that definition is non standard!
Notes
References
[1] | Wyszecki, G., & Stiles, W. S. (2000). Integration Replace by Summation. In Color Science: Concepts and Methods, Quantitative Data and Formulae (pp. 158–163). Wiley. ISBN:978-0471399186 |
Examples
>>> from colour import (
... CMFS, ILLUMINANTS_RELATIVE_SPDS, SpectralPowerDistribution)
>>> cmfs = CMFS.get('CIE 1931 2 Degree Standard Observer')
>>> data = {380: 0.0600, 390: 0.0600}
>>> spd = SpectralPowerDistribution('Custom', data)
>>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('D50')
>>> spectral_to_XYZ(spd, cmfs, illuminant)
array([ 4.5764852...e-04, 1.2964866...e-05, 2.1615807...e-03])
Converts given wavelength \(\lambda\) to CIE XYZ tristimulus values using given colour matching functions.
If the wavelength \(\lambda\) is not available in the colour matching function, its value will be calculated using CIE recommendations: The method developed by Sprague (1880) should be used for interpolating functions having a uniformly spaced independent variable and a Cubic Spline method for non-uniformly spaced independent variable.
Parameters: |
|
---|---|
Returns: | CIE XYZ tristimulus values. |
Return type: | ndarray |
Raises: |
|
Notes
Warning
Examples
Uniform data is using Sprague (1880) interpolation by default:
>>> from colour import CMFS
>>> cmfs = CMFS.get('CIE 1931 2 Degree Standard Observer')
>>> wavelength_to_XYZ(480, cmfs)
array([ 0.09564 , 0.13902 , 0.812950...])
>>> wavelength_to_XYZ(480.5, cmfs)
array([ 0.0914287..., 0.1418350..., 0.7915726...])
Enforcing Cubic Spline interpolation:
>>> wavelength_to_XYZ(480.5, cmfs, 'Cubic Spline')
array([ 0.0914288..., 0.1418351..., 0.7915729...])
Enforcing Linear interpolation:
>>> wavelength_to_XYZ(480.5, cmfs, 'Linear')
array([ 0.0914697..., 0.1418482..., 0.7917337...])
Enforcing Pchip interpolation:
>>> wavelength_to_XYZ(480.5, cmfs, 'Pchip')
array([ 0.0914280..., 0.1418341..., 0.7915711...])