概要

色の三属性(色相、明度、彩度)によって色を定量的に表す方法の一つであるマンセル表示系について記載します。
ここでは、マンセル値の意味とsRGBへの変換方法について記載します。
本ページはマンセル値からsRGBの変換過程をユーザーが指定した値について計算式が示されます。
なお、マンセル値の数字の間隔は視覚上均等となっています。なお、ここで表示して色は各種条件で色が異なって見えますのでご了承ください。そもそもマンセル値の全部をsRGBで表現することも不可能です。
有彩色と無彩色で表現方法が異なります。以下に例を示します。

有彩色の表現

マンセル値が、5Y7/1の場合、以下の意味を示します。
5Y:色相
円周方向
7:明度
鉛直方向
1:彩度

無彩色の表現

マンセル値が、5Nの場合、以下の意味を示します。
5:明度

マンセル・カラー・システム

マンセルの概要

色相 明度 彩度
上図において鉛直方向が色の明度を表し、中心の円柱は無彩色です。
有彩色は中心から離れるほど彩度が大きく(鮮やか)なります。
円状の中心から外側への方向角は、色相を表します。
図上で同じ高さであれば明度は一定となります。

色相

基本色、赤色(R)・黄色(Y)・緑色(G)・青色(B)・紫色(P)を円周に並べます。
さらに各色間を分割して、黄赤(YR)・黄緑(GY)・青緑(BG)・青紫(PB)・赤紫(RP)と定義する。
上記の10色を下図の様に10分割した数値と基本色で色相を表します。
5が標準10色です。
色分割と数値の振り方の規則を示した図を以下に示します。

基本色間をグラデーションで連続表示したものが下図のグラフです。円で表現したいところですが、SVGで使用できるグラデーションはありませんので線形グラデーションで表現しています。

明度(value)

明るさを表します。 黒を0、白を10として視覚的に均等に分割します。

彩度(Chroma)

彩度の値は中心からの水平距離で表せます。中心は無彩色、中心から離れるほど鮮やかな色となります。
色相、明度によって最大彩度の値は異なります。 無彩色の場合、彩度が0なので、中心部となります。

マンセル色立体

マンセルの概念を立体で表現したものが下図に示すマンセル色立体です。

以下のページにマンセル値をThree.jsを使用して3D表示してみまし 図上でマウスのボタンを押しながら移動させたり、マウスホイールを回すと方向や大きさが変わります。
マンセル色立体(Three.js)

マンセル値からsRGBの値を計算する方法

概要

JIS8721付表にマンセル値に対するxy値の表がある。
この表をもとにマンセル値からxy値を求めることができます。
表にない値は前後からの補間により求めます。 Yは明度を表しますが、無彩色の明度から輝度を計算する式によりYを算出することができます。
このxyY値は標準光源Cの値ですので、sRGBでよく使用するD65にxyY値を変換します。
xyY値をXYZ値に変換し反射率や輝度により正規化してsRGBに変換すれば終了です。 CIE1931rgb色度図をもとにX軸とY軸を新規に設定したものがXYZ色度図です。

IS8721付表にマンセル値の表の取得

色彩40パターン、明度9パターン、彩度は2置きのマンセル値のテキストデータが以下のサイトにある。
http://www.rit.edu/cos/colorscience/rc_munsell_renotation.php RIT | Color Science | Resources のreal.datをダウンロードすると以下(膨大なデータなので1部のみ記載)のようなxyの対応表が入手できます。

    h   V  C    x      y      Y
  10RP  1  2 0.3629 0.2710  1.210
  10RP  1  4 0.3920 0.2423  1.210
  10RP  1  6 0.4151 0.2169  1.210
  10RP  1  8 0.4357 0.1921  1.210
  10RP  1 10 0.4521 0.1710  1.210
  10RP  1 12 0.4668 0.1514  1.210

マンセル値からxyY値を取得

下表は、入手したマンセル値の変換表の一部です。
A列が色相、B列が明度、C列が彩度、D~F列がxyYに該当します。
ABCDEF
1 h V C x y Y
2 10RP 1 2 0.3629 0.271 1.21
3 10RP 1 4 0.392 0.2423 1.21
4 10RP 1 6 0.4151 0.2169 1.21
5 10RP 1 8 0.4357 0.1921 1.21
6 10RP 1 10 0.4521 0.171 1.21
7 10RP 1 12 0.4668 0.1514 1.21
有彩色
色相、彩度については計算でxyを求めることができないので表から算出します。表にない値は付近の値を使用して補間して求めます。
Y値については無彩色の式により計算で求めることもできます。
例えば10RP1/6のマンセルに対応する行は上表では着色された4行目に該当します。
無彩色
無彩色は表に有りませんが、白を基準に明度(輝度)を変化させたものになります。
輝度は、計算式または、有彩色から同じ明度の時のYを読み取ることにより求められます。
Y=1.1913v-0.22532v^2+0.23351v^3-0.020483v^4+0.00081936v^5
xyは光源Cの時のホワイトポイントの値となります。
x=0.3101
y=0.3162

XYZを算定

xyZからXYZを算出します。
X=x \frac{Y}{y}
Z=(1-x-y) \frac{Y}{y}

XYZの光源を変換する

前項のXYZはC光源を基準としていますのでsRGBで使用するD65に以下の式を使用して変換します。
X' = 0.99727X - 0.009397Y - 0.015411Z
Y' = -0.0010322X + 1.0008Y + 0.00020888Z
Z' = 0.92095Z

X'Y'Z'を輝度や反射率で正規化

輝度で正規化
sRGBはCRT時代に最大輝度を80cd/m2(カンデラ毎平方メートル)と定められている。液晶では 200 ~ 350 cd/m2 程度の様です。
Y'=1のとき80cm/m2とするためにX'Y'Z'の値をそれぞれ80で割ります。
反射率で正規化
Y'=1のとき反射率100%とするためにX'Y'Z'の値をそれぞれ100で割ります。

X'Y'Z'をsRGBに変換

変換行列によりリニアsRGBに変換します。
その後、非線形で計24bitのsRGBに変換します。
変換方法の詳細は、CIE1931xyz色度図を参照願います。

マンセル値→sRGB計算例

色相・明度・彩度の順番に選択し、最大輝度を入力してマンセル値→sRGB計算例 ボタンをクリックするとマンセル値をsRGBに変換する計算手順が表示されます。
色相 明度 彩度 Y=1の時の反射率または輝度(1=100%,sRGB最大輝度80)

色相に対する明度と彩度の表示例

フォームで色相を選択すると対応する明度と彩度が表示されます。表示された色の上にカーソルを置くと下にsRGB値等が表示されます。
Y=1の時の輝度を80cd/m2としてsRGBの値を計算しています。

マンセル表記=
(x,y,Y)(C光源)=(,,)
sRGB(,,)

明度に対する色相と彩度の表示例

各明度に対する色相と彩度を表示します。Y=1の時の輝度を80cd/m2としてsRGBの値を計算しています。
円の中央の数値は明度を表しています。
一番内側の円が無彩色で外側へ行くほど鮮やかな色になります。