EasyColor - カラー画像の前処理
EasyColorはオブジェクトを検出、分類、解析することでカラー画像の処理効率を高めます。さまざまな変換機能がありますので、どのようなカラーシステムでも処理できます。


人間の目は光に敏感です:
- 輝度または無色感覚。グレースケール画像によって取り込まれます。
- 波長または色彩感覚。赤、緑、青の原色で表現されます。
トゥルーカラーデジタル画像(ピクセル当たり24ビット、RGBチャネル当たり8ビット)は肉眼で識別できるすべての色を表します。
XYZ色空間の可視色域
カラーシステムには3種類あります:
- 混色システム (RGB/XYZ) では3原色の混合比率で色を表します。
- YUVルマ/クロマシステム (XYZ/YUV) では無色 (Y) と色彩 (U & V) が区別されます。白黒画像が必要とされる場合にも使用されます(テレビなど)。
- 輝度/彩度/色相システム (RGB/XYZ/YUV) では、無色(白黒の輝度) と強化された色彩(色の彩度と色相)感覚が区別されます。照明の効果を取り除くため、またはRGB画像を他のカラーシステムに変換するために使用されます。彩度が高い色は鮮やかに、彩度が低い色は暗くなります。
一般に:
- RGBはモニタ、カメラ、その他のディスプレイ装置で使用されます。
- YUVはクロミナンス情報を圧縮することで、カラー画像の効率的な転送に使用されます。
- XYZはデバイスに依存しない色の表現に使用されます。
すべての画像処理演算で量子座標を使用できます。これは、フレームバッファに画像を保存するためにバイト表現を使用する [0~255] 範囲の離散値です。
カラーシステムの変換演算では、より簡易な非量子化座標を使用することもできます。多くの場合、[0~1] の範囲に正規化される連続値となります。

カラー画像は、1ピクセル当たり3つの成分を含むベクトル場です。オブジェクトから反射された3つの全RGB成分には、光源の輝度に比例した振幅があります。2つの色成分の比率を考慮することで、照明に依存しない画像を取得できます。各ピクセルの3つの情報をうまく組み合わせることができれば、より正確に特徴を抽出できます。
カラー画像を処理する方法には3とおりあります:
- 成分の抽出:3つの色情報から最も重要な特徴のみを抽出して、データ量を減少させることができます。例えば、色相によってオブジェクトを識別することができる場合は、前処理ステップとして色相値のみを含むグレーレベル画像に画像を変換します。
- 分割変換:各色成分に個別に演算を実行できます。例えば、2枚の画像を加算して赤、緑、青の成分を加算し、その結果を成分ごとに結果カラー画像に保存することができます。
- 結合変換:3つすべての色成分を組み合わせて、3つの派生成分を生成できます。例として、YIQからRGBへの変換があります。

EasyColorのルックアップテーブルは、特定の入力データに対してどの出力が対応するのかを定義する数値配列です。これにより、ユーザーが定義した変換方法で画像を変更することができます。
カラーピクセルは16,777,216 (224) の値をとることができるため、このエントリ数を持つフルカラーLUTは50 MBのメモリ容量を必要とします。また、変換には相当の時間がかかります。事前計算されたLUTを使うことで、色変換をスムーズに行えるようになります。
カラー画像を変換するには、次のいずれかの関数を用いてカラーLUTを初期化します:
□ | ゲイン/オフセット(カラー)用のLUT : EasyImage::GainOffset、 |
□ | カラーキャリブレーション用のLUT: EColorLookup::Calibrate、 |
□ | カラーバランス用のLUT: EColorLookup::WhiteBalance、 |
□ | EColorLookup::ConvertFromRGB、 EColorLookup::ConvertToRGB |
そしてこのカラーLUTをEasyColor::Transformなどの変換演算に使用します。あるいは、非量子化値(連続、[0~1] の範囲に正規化)をとるEasyColorTransformを用いてカスタム変換を作成して、ソース/目的カラーシステムを指定します。例えばRGB形式の画像でU (YUV) 成分を変更する場合など、演算によってはLUTがオンザフライ方式で使用され、変換された画像が保存されないことがあります。
精度と速度の最適な組み合わせは、どのIndexBitsおよびIndexBitsを選択するかによって決まります。変換後の値の精度はインデックスビットの数にほぼ相当します。
- ルックアップテーブルのエントリ数が少ないと必要なメモリ容量が小さくなりますが、精度は低下します。
- 補間をしない場合は実行時間が短縮されますが、精度は低下します。補間により成分ごとに8ビットの精度を回復できます。変換が線形の場合(YUVからRGBなど)、テーブルのエントリ数に関係なく補間により常に正確な結果が得られます。
インデックスビット |
エントリ数 |
テーブルサイズ(バイト) |
---|---|---|
4 |
2(3*4) = 4,096 |
14,739 |
5 |
2(3*5) = 32,768 |
107,811 |
6 |
2(3*6) = 262,144 |
823,875 |

Format444To422関数を使って4:4:4から4:2:2フォーマットに変換(またはFormat444To422 変換)すると、視覚的な品質を落とすことなくYUV画像が最小化されます。
- 4:4:4ではピクセルごとに3バイトの情報が使用されます。
- 4:2:2ではピクセルごとに2バイトの情報が使用されます。
このとき、UおよびVクロマの偶数ピクセルとYルマの偶数および奇数ピクセルが次のように保存されます:
Y[偶数] U[偶数] Y[奇数] V[偶数]

カラー画像には連続色調画像の3つの色平面が含まれています。
グレーレベル画像がカラーシステムのひとつの成分となることがあります。

EasyColor は1度に1つの平面、または3つすべての平面を同時に変更または抽出できます。Compose、 Decompose、 GetComponent、 SetComponentを参照。
これらの演算ではオンザフライ方式でカラーLUTを使用して、明度、彩度、色相の各平面からRGB画像を構築できます。
EasyColorの各関数は、インターリーブ方式の色平面(青、緑、赤のピクセルが相互に続く)のWindowsビットマップ形式をサポートするために必要なインターリーブ/デインターリーブ演算を実行します。

標準的な256色を定義し、それぞれの色に対応するグレーレベル値のピクセルを割り当てます。
疑似カラーの濃淡を定義するには、任意のカラーシステムの色空間で軌跡を指定します。そして、描画関数のカラーパレットを用いて画像を疑似カラー表示すると(画像とベクトル描画を参照)、通常のカラー画像と同じように保存したり変換することができます。
グレーレベル画像と疑似カラー画像

EasyColorプロセスでは、異なる色のセットを決めておき、各ピクセルに最も近い色を割り当てることができます。その際使用されるレイヤインデックスは、後にEasyObjectでラベル付けされた画像セグメンタと一緒に使用して、ブロブ作成に役立てることができます。
原画像とセグメント化された画像(3色)