def wavelength_to_XYZ(wavelength, observer='1931_2deg'):
''' Uses tristimulus color matching functions to map a awvelength to XYZ
coordinates.
Args:
wavelength (`float`): wavelength in nm.
observer (`str`): CIE observer name, must be 1931_2deg.
Returns:
`numpy.ndarray`: array with last dimension corresponding to X, Y, Z.
'''
wavelength = np.asarray(wavelength, dtype=config.precision)
cmf = get_cmf(observer)
wvl, X, Y, Z = cmf['wvl'], cmf['X'], cmf['Y'], cmf['Z']
ia = {'bounds_error': False, 'fill_value': 0, 'assume_sorted': True}
f_X, f_Y, f_Z = interp1d(wvl, X, **ia), interp1d(wvl, Y, **ia), interp1d(wvl, Z, **ia)
x, y, z = f_X(wavelength), f_Y(wavelength), f_Z(wavelength)
shape = wavelength.shape
return np.stack((x, y, z), axis=len(shape))
评论列表
文章目录