Main Content

rgb2ind

RGB イメージをインデックス付きイメージに変換

説明

[X,cmap] = rgb2ind(RGB,Q)は、Q個の量子化された色による最小分散量子化とディザリングを使用して、RGB イメージをカラーマップcmapが関連付けられたインデックス付きイメージXに変換します。

[X,cmap] = rgb2ind(RGB,tol)は、許容誤差tolの一様量子化とディザリングを使用して、RGB イメージをインデックス付きイメージに変換します。

X= rgb2ind (RGB,inmap)は、指定されたカラーマップinmapによる逆カラーマップ アルゴリズムとディザリングを使用して、RGB イメージをインデックス付きイメージに変換します。

___= rgb2ind (___,dithering)はディザリングを有効または無効にします。

すべて折りたたむ

星雲のトゥルーカラーuint8JPEG イメージを読み取って表示します。

RGB = imread('ngc6543a.jpg'); figure imagesc(RGB) axisimagezoom(4)

Figure contains an axes object. The axes object contains an object of type image.

32 色のインデックス付きイメージへの RGB の変換

[IND,map] = rgb2ind(RGB,32); figure imagesc(IND) colormap(map) axisimagezoom(4)

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

RGB イメージ。m x n x 3 の配列として指定します。

データ型:single|double|uint8|uint16

最小分散量子化に使用される量子化された色の数。65,536 以下の正の整数として指定します。返されるカラーマップcmapQ個以下の色をもちます。

一様量子化に使用される許容誤差。[0, 1] の範囲の数値として指定します。返されるカラーマップcmap(floor(1/tol)+1)^3個以下の色をもちます。

入力カラーマップ。範囲 [0, 1] の値をもつ c 行 3 列の行列として指定します。inmapの各行は、カラーマップの各色を構成する赤、緑、青の成分を指定する RGB 3 成分です。カラーマップは最大で 65,536 色をもちます。

データ型:double

ディザリングの実行。'dither'または'nodither'として指定します。ディザリングは、空間的な解像度を犠牲にして色の解像度を高めます。詳細については、ditherを参照してください。

'nodither'を選択した場合、rgb2indはディザリングを実行しません。代わりに、この関数は元のイメージの各色を新しいカラーマップの最も近い色にマッピングします。

出力引数

すべて折りたたむ

インデックス付きイメージ。m 行 n 列の非負の整数の行列として返されます。mapの長さが 256 以下の場合、出力イメージのクラスはuint8です。そうでない場合、出力イメージは、クラスuint16です。出力配列Xの値0はカラーマップの最初の色に対応します。

メモ

イメージXの中の値は、カラーマップmapの中の値に対応します。そして、フィルター処理のような数学的な処理に使用してはなりません。

データ型:uint8|uint16

カラーマップ。値の範囲が [0, 1] の c 行 3 列の行列として返されます。cmapの各行は、カラーマップの各色を構成する赤、緑、青の成分を指定する RGB 3 成分です。カラーマップは最大で 65,536 色をもちます。

データ型:double

アルゴリズム

  • 一様量子化 —tolを指定した場合、rgb2indは一様量子化を使用してイメージを変換します。一様量子化では、RGB カラー キューブを長さtolの小さいキューブに分割します。たとえば、tolを 0.1 に指定した場合、立方体の辺は RGB キューブの長さの 10 分の 1 になります。小さなキューブの総数は、以下のとおりです。

    t = (floor(1/tol)+1)^3

    各キューブは、出力イメージの単一の色を表します。したがって、カラーマップの最大長はtとなります。rgb2indは入力イメージに表示されない色をすべて削除するため、実際のカラーマップはtよりも小さくなることがあります。

  • 最小分散量子化 —Qを指定した場合、rgb2indでは最小分散量子化が行われます。最小分散量子化では、イメージ内のカラー分布に応じて RGB カラー キューブをさまざまなサイズの小さいボックス (キューブとは限らない) に分割します。入力イメージが指定した数よりも少ない色を使っている場合、出力カラーマップもより小さくなります。

  • 逆カラーマップ — 入力カラーマップinmapを指定した場合、rgb2indではカラーマップへのマッピングが行われます。逆カラーマップ アルゴリズムは、指定されたカラーマップを色の成分ごとに 32 の個別レベルに量子化します。次に、入力イメージのピクセルごとに、量子化されたカラーマップ内で最も近い色が検出されます。

参照

[1] Spencer W. Thomas, "Efficient Inverse Color Map Computation", Graphics Gems II, (ed. James Arvo), Academic Press: Boston. 1991. (includes source code)

バージョン履歴

R2006a より前に導入