Color::Model::Munsell::Util - Utility functions for Color::Model::Munsell


    use Color::Model::Munsell;
    use Color::Model::Munsell::Util;
    use Color::Model::RGB;

    my $m = Color::Model::Munsell->new("5R 4.5/14");
    printf("Munsell: %s = RGB: #%s\n", $m, Munsell2RGB($m));


Color::Model::Munsell::Util gives some utility functions for color conversion from Munsell to CIE xyY, XYZ or RGB, etc.


Only subroutine Munsell2RGB is exported by defalut.


    $n = huedegree( "5R" );

Return degree number of Hue; considered 10.0RP is 0, 10R to be 10, 10YR 20, ..., and ends 9.9RP as 99.9. If bad formatted hue given, this returns undef.


Munsell2xyY() returns an array of CIE x, y and Y which are calculated with linear interpolation from Munsell-xyY table.

    use Color::Model::Munsell::Util qw(Munsell2xyY);

    $m = Color::Model::Munsell->new("2.5G 5.5/10");
    ($x, $y, $Y) = Munsell2xyY($m);

This Munsell-xyY table is from MCSL, R.I.T. which condition is using illuminant C and the CIE 1931 2 degree observer.



    Munsell2XYZ( $m )
    Munsell2XYZD65( $m [, "ChromaticAdaptType" ] )

Munsell2XYZ() and Munsell2XYZD65() returns an array of CIE X,Y and Z.

    $m = Color::Model::Munsell->new("7.5B 6/10");
    printf("%s -> CIE XYZ (%.f, %.f, %.f)", $m, Munsell2XYZ($m));

    # perform cromatic adaptation from C to D65
    printf("%s -> CIE XYZ (%.f, %.f, %.f) via Chromatic Adaptation", $m, Munsell2XYZD65($m));

Munsell2XYZ() simply calculates XYZ from xyY. And Munsell2XYZD65() calculates them with chromatic adaptatation to illuminant D65. Adaptation type must be "XYZ", "vonKries", "Bradford" or "None". If Omitted, "Bradford" is used. Specifying "None" is same as calling Munsell2XYZ().



    Munsell2rgb( $m [, "RGBModel" [, "ChromaticAdaptType" ]] )
    Munsell2RGB( $m [, "RGBModel" [, "ChromaticAdaptType" [, $gamma ]]] )

Munsell2rgb() returns an array of R, G and B values which calculated from XYZ with transformation matrix. And Munsell2RGB() returns RGB values with Color::Model::RGB object which applied gamma value.

    $m = Color::Model::Munsell->new("7PB 2.5/3");
    printf("%s -> RGB %s of sRGB", $m, Munsell2RGB($m));
    printf("%s -> RGB %s of AdobeRGB(1998)", $m, Munsell2RGB($m,"AdobeRGB"), 2.2);

RGBModel must be "sRGB", "AdobeRGB" that means Adobe RGB(1998), "AppleRGB" or "NTSC". A gamma value will be used when RGB model is not sRGB.


    calc_Yc( $m )

calc_Yc() calculates Y value of illuminant C and 2 degree observer from Munsell value with approximate calculation. Argument must be a Color::Model::Munsell object or Munsell value.

    $m = Color::Model::Munsell->new("5R 4/14")
    printf "%.4f", calc_Yc( $m );
    printf "%.4f", calc_Yc( 7.5 );


Takahiro Onodera, <>


Please report any bugs or feature requests to bug-color-model-munsell-util at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


Color::Model::Munsell, Color::Model::RGB


Munsell Color Science Laboratory, R.I.T - - Munsell-xyY data are from this site. - - Chromatic adaptation matrixes, transformation matrixes and important knowledge are from this site.

Japanese Industrial Standards(JIS) JIS Z 8721(1993)


Copyright 2010 Takahiro Onodera.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.