Learn R Programming

munsellinterpol (version 3.0-0)

VandY: Convert Munsell Value V to Luminance Factor Y, and back again

Description

Convert non-linear Munsell Value V to linear Luminance Factor Y, and back again

Usage

YfromV( V, which='ASTM' )
VfromY( Y, which='ASTM' )

Arguments

V

a numeric vector with elements in the interval [0,10]

Y

a numeric vector with elements in the interval [0,100]

which

one of the strings in the first column of this table

reference
'ASTM' ASTM D-1535 (2008)
'OSA' Newhall, et. al. (1943)
'MgO' Newhall, et. al. (1943)
'Munsell' Munsell, et. al. (1933)
'Priest' Priest, et. al. (1920)

Partial matching is enabled, and it is case insensitive.

Value

a numeric vector the same length as the input

Details

'Priest' is the earliest (1920) transfer function in this package. It is implemented as: $$V = sqrt(Y) ~~~~~~and~~~~~~ Y = V^2 $$ One readily checks that when V=10, Y=100, and vice-versa. This transfer function has been implemented in colorimeters, using analog electric circuits. It is used in Hunter Lab - the precursor of CIE Lab.

'Munsell' is the next (1933) transfer function, and was proposed by Munsell's son (Alexander Ector Orr Munsell) and co-workers. It is implemented as: $$V = sqrt( 1.474*Y - 0.00474*Y^2 )$$ $$Y = 50 * ( (1474 - sqrt(1474^2 - 4*4740*V^2)) / 474 )$$ One readily checks that when V=10, Y=100, and vice-versa. The luminance factor Y is absolute, AKA relative to the perfect reflecting diffuser.

'Priest' and 'Munsell' are included in this package for historical interest only.

The remaining three define Y as a quintic polynomial in V.

The next one historically - 'MgO' - is implemented as: $$ Y = (((((8404*V - 210090)*V + 2395100)*V - 2311100)*V + 10000000)*V ) / 10000000$$ One readily checks that when V=10, Y=102.568. This Y is larger than 100, because the authors decided to make Y relative to a clean surface of MgO, instead of the perfect reflecting diffuser. In their words:

  • It should be noted that the reflectances indicated are not absolute but relative to magnesium oxide; whereas the maximum at value 10/ was formerly 100 percent, it is now 102.57. Use of this relation facilitates results and also avoids the somewhat dubious conversion to absolute scale, by permitting Y determinations with a MgO standard to be converted directly to Munsell value.

Nowadays, the perfect reflecting diffuser is preferred over MgO. For users who would like to modify this quintic as little as possible, with the perfect reflecting diffuser in mind (going back to 'MUNSELL'), I offer 'OSA', which is given by this quintic of my own design $$Y = (((((8404*V - 210090)*V + 2395100)*V - 2311100)*V + 10000000)*V ) / 10256800$$

ASTM had a similar modification in mind, but did it a little differently by scaling each coefficient. 'ASTM' is given by this quintic: $$Y = ( ((((81939*V - 2048400)*V + 23352000)*V - 22533000)*V + 119140000)*V ) / 1.e8 $$ One readily checks that when V=10, Y=100 exactly (for both 'OSA' and 'ASTM').

The inverses - from Y to V - of all 3 quintics are implemented as 3 splinefun()s at a large number (about 300) of points. These inverses are both fast and accurate. The round-trip Y V Y is accurate to 7 digits after the decimal. The round-trip V Y V is accurate to 8 digits after the decimal.

References

Priest, I. G. Gibson, K. S. and McNicholas, H. J. An Examination of the Munsell Color System. I. Spectral and and Total Reflection and the Munsell Scale of Value. Technologic Papers of the Bureau of Standards, No. 167. pp. 1-33. Washington D.C. 1920.

Munsell, A. E. O., L. L. Sloan, and I. H. Godlove. Neutral Value Scales. I. Munsell Neutral Value Scale. Journal of the Optical Society of America. Vol. 23. Issue 11. pp. 394-411. November 1933.

Newhall, Sidney M., Dorothy Nickerson, Deane B. Judd. Final Report of the O.S.A. Subcommitte on the Spacing of the Munsell Colors. Journal of the Optical Society of America. Vol. 33. No. 7. pp. 385-418. July 1943.

ASTM D 1535-08. Standard Practice for Specifying Color by the Munsell System. 2008

See Also

MunsellToxyY(), xyYtoMunsell()

Examples

Run this code
# NOT RUN {
VfromY( c(0,50,100) )
##  [1]  0.00000  7.53772 10.00000
# }

Run the code above in your browser using DataLab