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 λ to CIE XYZ tristimulus values using given colour matching functions.
If the wavelength λ 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...])