Source code for stimupy.utils.color_conversions

import numpy as np

__all__ = [
    "luminance2munsell",
    "munsell2luminance",
]


[docs] def luminance2munsell(lum_values, reference_white): """ Transform luminance values into Munsell values. The luminance values do not have to correspond to specific units, as long as they are in the same unit as the reference white, because Munsell values are a perceptually uniform scale of relative luminances. Parameters ---------- lum_values : numpy-array reference_white : number Returns ------- munsell_values : numpy-array Reference: H. Pauli, "Proposed extension of the CIE recommendation on 'Uniform color spaces, color difference equations, and metric color terms'," J. Opt. Soc. Am. 66, 866-867 (1976) """ x = lum_values / float(reference_white) idx = x <= (6.0 / 29) ** 3 y1 = 841.0 / 108 * x[idx] + 4.0 / 29 y2 = x[~idx] ** (1.0 / 3) y = np.empty(x.shape) y[idx] = y1 y[~idx] = y2 return 11.6 * y - 1.6
[docs] def munsell2luminance(munsell_values, reference_white): """ Transform Munsell values to luminance values. The luminance values will be in the same unit as the reference white, which can be arbitrary as long as the scale is linear. Parameters ---------- munsell_values : numpy-array reference_white : number Returns ------- lum_values : numpy-array Reference: H. Pauli, "Proposed extension of the CIE recommendation on 'Uniform color spaces, color difference equations, and metric color terms'," J. Opt. Soc. Am. 66, 866-867 (1976) """ lum_values = (munsell_values + 1.6) / 11.6 idx = lum_values <= 6.0 / 29 lum_values[idx] = (lum_values[idx] - 4.0 / 29) / 841 * 108 lum_values[~idx] **= 3 return lum_values * reference_white