本章では、簡単な色空間の説明と、色空間変換に用いた定義式を示します。 以下に示す色空間のうち、FAST独自仕様と表記されているものは、弊社独自の色空間定義です。 当社旧ライブラリ(FVL,FVXなど)での色空間の定義では、いくつか一般的な定義と異なるものが あったため、今回のライブラリではそれらをより一般的なものに変更しております。 そこで、これら当社旧ライブラリとの互換性を保つために、変更された色空間を 当社独自仕様として別途用意しました。 なお、特に表記がない色空間は、旧ライブラリと同一の仕様か、 または旧ライブラリに存在しなかった色空間です。
本ライブラリでは、基準色空間としてRGB色空間を定義しています。 Fig1に基準色空間であるRGB色空間を示します。
Fig1. RGB色空間
- RGB -> RGB への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
- UC8 -> DOUBLE
- DOUBLE -> UC8
変換後のRGB色空間を (R',G',B') とします。 なお、DOUBLE -> DOUBLE 、UC8 -> UC8 の同一の画素タイプへの変換には、
fnFIE_img_copy() を使用しています。
本変換は、RGB色空間との相互変換が不可な変換です。 つまり、RGBからグレースケール画像へ変換した画像から逆変換によりRGBに戻した画像は、変換前の画像と等しくなりません。 もし、グレースケールで何らかの処理をした後、変換前のRGBを使用したい場合には、RGB画像を保持しておく必要があります。
- RGB -> Gray への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
- UC8 -> DOUBLE
- DOUBLE -> UC8
- Gray -> RGB への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
- UC8 -> DOUBLE
- DOUBLE -> UC8
- Gray -> Gray への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
- UC8 -> DOUBLE
- DOUBLE -> UC8
変換後のGray色空間をGray'とします。 なお、DOUBLE -> DOUBLE 、UC8 -> UC8の同一の画素タイプへの変換には、
fnFIE_img_copy() を使用しています。
RGB表色系では、等色関数に負の値があります。 そのため、等色関数の値がすべて非負となるようにXYZ表色系が導入されました。 XYZ表色系は他のCIE表色系の基礎となります。
Fig2にXYZ色空間を示します。
Fig2. XYZ色空間
- RGB -> XYZ への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- RGB -> XYZ への変換(スケーリングあり)
-
- XYZ -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8
- XYZ -> RGB への変換(スケーリングあり)
-
- XYZ -> XYZ への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のXYZ色空間を(X',Y',Z')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります。
- XYZ -> XYZ への変換(スケーリングあり)
-
変換後のXYZ色空間を(X',Y',Z')とします。 そして、

とするためのスケーリング行列をSとします。
- XYZ -> XYZ への変換(スケーリングあり)
-
変換後のXYZ色空間を(X',Y',Z')とします。 そして、

とするためのスケーリング行列をSとします。
YUV(PAL/SECAM)はアジアやヨーロッパでのTVの信号の規格です。 Y成分(輝度)についてはCIE1931XYZに従います。 ここで、CIE1931XYZ表色系とは、CIE(国際照明委員会)で 1931年に採択した等色関数

、

、

に基づく三色表色系です(2°視野 XYZ表色系ともいいます)。
Fig3にYUV色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig3と異なります。
Fig3. YUV色空間
- RGB -> YUV への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- RGB -> YUV への変換(スケーリング、オフセットあり)
-

とするためのスケーリング行列をS 、平行移動行列をTとします。
YUV色空間への変換行列をMとすると、以下の通りとなります。
ここで、上式を斉次座標を用いて表します。
- YUV -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8
- YUV -> RGB への変換(スケーリング、オフセットあり)
-
- YUV -> YUV への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のYUV色空間を(Y',U',V') とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります。
- YUV -> YUV への変換(スケーリングあり、オフセットあり)
-
変換後のYUV色空間を(Y',U',V')とします。 そして、

とするためのスケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- YUV -> YUV への変換(スケーリングあり、オフセットあり)
-
変換後のYUV色空間を(Y',U',V')とします。 そして、

、

、

とするためのスケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
YIQ(NTSC)は北アメリカでのTVの信号の規格です。 Y成分(輝度)についてはCIE1931XYZに従います。
Fig4にYIQ色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig4と異なります。
Fig4. YIQ色空間
- RGB -> YIQ への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- RGB -> YIQ への変換(スケーリング、オフセットあり)
-

とするためのスケーリング行列をS 、平行移動行列をTとします
YIQ色空間への変換行列をMとすると、以下の通りとなります。
ここで、上式を斉次座標を用いて表します。
- YIQ -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8
- YIQ -> RGB への変換(スケーリング、オフセットあり)
-
- YIQ -> YIQ への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のYIQ色空間を(Y',I',Q')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります。
- YIQ -> YIQ への変換(スケーリングあり、オフセットあり)
-
変換後のYIQ色空間(Y',I',Q')とします。 そして、

とするためのスケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- YIQ -> YIQ への変換(スケーリングあり、オフセットあり)
-
変換後のYIQ色空間を(Y',I',Q')とします。 そして、

、

、

とするためのスケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
RGB色空間はRGBの3値が互いに相関を持っているため情報の重複があると考えらます。 このRGBを無相関な3値に変換しようというのがI1I2I3色空間です。
Fig5にI1I2I3色空間を示します。
Fig5. I1I2I3色空間
- RGB -> I1I2I3 への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- RGB -> I1I2I3 への変換(オフセットあり)
-

とするための平行移動行列をT とします。
I1I2I3色空間への変換行列をMとすると、以下の通りとなります。
ここで、上式を斉次座標を用いて表します。
- I1I2I3 -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8
- I1I2I3 -> RGB への変換(オフセットあり)
-
- I1I2I3 -> I1I2I3 への変換(オフセットなし)
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のI1I2I3色空間を(I1',I2',I3')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります。
- I1I2I3 -> I1I2I3 への変換(オフセットあり)
-
変換後のI1I2I3色空間を(I1',I2',I3') とします。 そして、

とするための平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- I1I2I3 -> I1I2I3 への変換(オフセットあり)
-
変換後のI1I2I3色空間を(I1',I2',I3')とします。 そして、

とするための平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
RGB色空間では、人間の感覚に合った色彩に関する処理を行うことは難しいです。 そこで、直感的にわかりやすいマンセル表色系に近い色相、彩度、明度の三属性からなる色空間です。 HSV色空間には、いくつかのモデルが存在します。 ここでは、Smithの六角錐モデルを示します。
Fig6にHSV(Smithの六角錐モデル)色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig6と異なります。
Fig6. HSV(Smithの六角錐モデル)色空間
- RGB -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
ここで、
のとき、
に
を加えます。
のとき
不定となります。
ただし、本ライブラリでは、
不定の場合、
とします。
- RGB -> HSV への変換(スケーリングあり)
-
先に求められたH, S, Vが、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
- HSV -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8

のとき
のとき
のとき
のとき
のとき
のとき
- HSV -> RGB への変換(スケーリングあり)
-
まず、与えられたH,S,Vを

、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
以後の計算は、スケーリングがない場合と同様です。
- HSV -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のHSV色空間を(H',S',V')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
双六角錐モデルは、Smithの六角錐モデルをより精密にしたもので、デザイン分野で利用されるオストワルト表色系に近いモデルです。
Fig7にHSV(Jobloveらの双六角錐モデル)色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig7と異なります。 Fig7のHueはH、DiffはS、SumはVを表しています。
Fig7. HSV(Jobloveらの双六角錐モデル)色空間
- RGB -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE

は、Smithの六角錐モデルと同定義です。

のとき、

に

を加えます。

のとき

不定となります。
ただし、本ライブラリでは、

不定の場合、

とします。
- RGB -> HSV への変換(スケーリングあり)
-
先に求められたH, S, Vが、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
- HSV -> RGB への変換
- DOUBLE -> DOUBLE
- DOUBLE -> UC8
Xは必要に応じて以下の処理で求めます。
S=0のとき、
- HSV -> RGB への変換(スケーリングあり)
-
まず、与えられたH,S,Vを

、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
以後の計算は、スケーリングがない場合と同様です。
- HSV -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のHSV色空間を(H',S',V')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLEの場合は、
変換の画素タイプがUC8 -> UC8の場合は、
となります
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を SCALE とします。
CIEが均等知覚色空間の標準化のために推奨した表色系です。 この表色系は、三刺激値X,Y,Zで均等色空間を近似することを目的に設計され、L*a*b* の直交座標系で定義されています。
ただし、RGBから L*a*b* 色空間変換で L*a*b* の画素タイプがF_IMG_UC8であった場合、 スケーリング、オフセット処理が施されるため、均等色空間としての意味を成しませんので注意してください。
Fig8に L*a*b* 色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig8と異なります。
Fig8. L*a*b*色空間
- RGB -> L*a*b* への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
※CIEが修正式を勧告しています。
関数
は、以下の通りです。
、
も同様です。
、
、
は、対象と同一照明下の標準白色に対する三刺激値です。 照明の種類毎に指定する必要となります。 ただし、本ライブラリでは照明の種類が特定できないため、
と定義します。
- RGB -> L*a*b* への変換(スケーリングあり、オフセットあり)
-
本処理では、最終的に

となるため、一部の計算を省略可能となります。
関数
は、以下の通りです。
、
も同様です。
、
、
は、対象と同一照明下の標準白色に対する三刺激値です。 照明の種類毎に指定する必要があります。 ただし、本ライブラリでは照明の種類が特定できないため、
と定義します。
とするためのスケーリング行列をS 、平行移動行列をTとします。 変換後の L*a*b* 色空間を
とします。
ここで、上式を斉次座標を用いて表します。
- L*a*b* -> RGB への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
ここで、
、
、
は以下の通りです。
求められた
、
、
より、
、
、
を求めます。
、
、
は、対象と同一照明下の標準白色に対する三刺激値です。 照明の種類毎に指定する必要があります。 ただし、本ライブラリでは照明の種類が特定できないため、
と定義します。
- L*a*b* -> RGB への変換(スケーリングあり、オフセットあり)
-
まず、与えられた L*a*b* を

、

、

となるようにスケーリング処理をします。 変換後の L*a*b* 色空間を

とします。 ここで、スケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
以後の計算は、スケーリングなし、オフセットなしの場合と同様です。
- L*a*b* -> L*a*b* への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後の L*a*b* 色空間を

とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプがDOUBLE -> DOUBLE の場合は、
変換の画素タイプが UC8 -> UC8 の場合は、
となります
- L*a*b* -> L*a*b* への変換(スケーリングあり、オフセットあり)
-
変換後の L*a*b* 色空間を

とします。 ここで、スケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- L*a*b* -> L*a*b* への変換(スケーリングあり、オフセットあり)
-
変換後の L*a*b* 色空間を

とします。 ここで、スケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
一般にはHLS色空間と呼ばれています。 上記のHSV色空間とは、彩度と輝度の考え方が異なります。
彩度は、純色から彩度が落ちることは、灰色になるという考えに基づいています。
輝度は輝度0を黒、100を白として、その中間を純色としています。 通常HSV色空間では、明度100を純色としています。
Fig9にYC1C2色空間、Fig10にHSV色空間を示します。 なお、出力画像オブジェクトの画素タイプがF_IMG_UC8などで、 スケーリング処理された場合は、Fig10と異なります。 本色空間では、RGBをまずYC1C2に変換後、HSVに変換します。 Fig9のCrはC1、CbはC2を表しています。
Fig9. YC1C2色空間
Fig10. HSV(FAST独自仕様)色空間
- RGB -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
求められた
より、
が求められます。
- RGB -> HSV への変換(スケーリングあり、オフセットあり)
-
先で求められたH, S, Vが、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を
SCALE とします。
- HSV -> RGB
-
- HSV -> RGB への変換(スケーリングあり)
-
まず、与えられたH,S,Vを

、

となるようにスケーリング処理をします。 変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を
SCALE とします。
以後の計算は、スケーリングなしと同様です。
- HSV -> HSV への変換
- DOUBLE -> DOUBLE
- UC8 -> UC8
変換後のHSV色空間を(H',S',V')とします。 なお、変換には
fnFIE_img_copy() を使用しています。
変換の画素タイプが DOUBLE -> DOUBLE の場合は、
変換の画素タイプが UC8 -> UC8 の場合は、
となります
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V') とします。 ここで、スケーリング行列を
SCALE とします。
ただし、
ならば 
- HSV -> HSV への変換(スケーリングあり)
-
変換後のHSV色空間を(H',S',V')とします。 ここで、スケーリング行列を
SCALE とします。
ただし、
ならば 
本変換では、処理の高速化のため、一部の変換式を省略して処理が行われています。 また、上記した本ライブラリでの L*a*b* 色空間の変換とは異なり、 RGBから L*a*b* 色空間変換で L*a*b* の画素タイプがF_IMG_UC8であった場合のみではなく、 全ての変換で、等色空間としての意味を成しませんので注意してください。
本色空間は、上記した L*a*b* の各成分をスケーリング変換したものとほぼ同等です。 前述したように、一部の変換式を省略して処理が行われているために、完全には一致しません。
RGB -> L*a*b* 、L*a*b* -> RGB 共に、画素タイプがUC8 -> UC8の変換では、数値テーブルを利用します。
- RGB -> L*a*b* への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- UC8 -> UC8
- DOUBLE -> UC8
変換後の L*a*b* 色空間を
とします。 ここで、スケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- L*a*b* -> RGB への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- UC8 -> UC8
- DOUBLE -> UC8
まず、与えられた L*a*b* を

、

、

となるようにスケーリング処理をします。 変換後の L*a*b* 色空間を

とします。 ここで、スケーリング行列をS、平行移動行列をTとします。
ここで、上式を斉次座標を用いて表します。
- L*a*b* -> L*a*b* への変換
- DOUBLE -> DOUBLE
- UC8 -> DOUBLE
- UC8 -> UC8
- DOUBLE -> UC8
変換後のL*a*b* 色空間を

とします。 なお、DOUBLE -> DOUBLE 、UC8 -> UC8 の同一の画素タイプへの変換には、
fnFIE_img_copy() を使用しています。