2008年9月7日日曜日

画像処理 第3回 ちょっとカラーモデル

何と無くHSV変換について調べていたので、カラーモデルに関して少しばかり。

・RGB
RGB(RGBカラーモデル)は、Red、Green、Blueの3つを混ぜて色を表現する加法混色の一つです。
数値が増えるにつれて、白に近づきます。
テレビは、正にRGBカラーモデルを採用しています。モニターに近づいてドットを見ると、白のドットがRGBのドット3つで構成されているのが見えたりします。離れて見えると白に見えます、不思議。

・CMY
CMYはCyan、Magenta、Yellowの3つによる、減法混色です。
例は絵の具。数値が増えるにつれて、黒に近づきます。

この辺はよく知られていると思われます。

・HSV
HSVは色相Hue、彩度Saturation、明度Value
から構成されます。HSB(Hue、Saturation、Brightness)とも呼びます。

V=1の時の例を下に示します。



中心に向かうにつれ、白に近づいていきます。
変換式はこんな感じ。


h=floor(H/(PI/3))

P=I*(1-S)
Q=I*(1-S(H-h))
T=I*(1-S*(1-H+h))

if h=0 R=I, G=T, B=P
if h=1 R=Q, G=I, B=P
if h=2 R=P, G=I, B=T
if h=3 R=P, G=Q, B=I
if h=4 R=T, G=P, B=I
if h=5 R=I, G=P, B=Q

0<=R, G, B, S, I<=1, 0<=H<=2*PI


この式だと、若干不連続な領域があります。
ちなみにJavaのColorクラスにもHSVからRGBに変換してくれるメソッドがあります。
このメソッドでは、上に示したものより不連続な点が改善されているようです。

・HLS
HLSは色相Hue、輝度Lightness/Luminance、彩度Saturation
から構成されます。 HSI(Hue、Saturation、Intensity)、HSLとも呼びます。
HSVに似ています…がちょっと違います。

L=0.5の時の例を下に示します。



中心に向かうにつれて、灰色に近づいていきます。
変換式はこんな感じ。

R=X (h=H+2/3*PI)
G=X (h=H)
B=X (h=H-2/3*PI)

X(h)は下の定義
h'=h
h'=h+2*PI (h<0)
h'=h-2*PI (h>2*PI)
M2=I*(1+S) (I<=0.5)
M2=I+S-I*S (I>0.5)
M1=2*I-M2
X=M1+(M2-M1)*h'/(1/3*PI)
(h' < 1/3*PI)
X=M2
(1/3*PI <= h' < PI)
X=M1+(M2-M1)*(4/3*PI-h')/(1/3*PI)
(PI <= h' < 4/3*PI)
X=M1
(4/3*PI <= h' < 2*PI)

0<=R, G, B, S, I<=1, 0<=H<=2*PI

この変換式は、綺麗にできます。

再現性はかなり低いですが、下のようなものもあります。

I=1/5の例。



変換式は…

R=I/3+2*S*cosH
G=I/3-S*cosH+S*sinH
B=I/3-S*cosH-S*sinH

0<=R, G, B<=1, 0<=I<=3, 0<=H<=2*PI, 0<=S<=2/3

あまりまとまりが無いですが、こんな処で。

0 件のコメント: