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) はディザリングを有効または無効にします。

すべて折りたたむ

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

RGB = imread('ngc6543a.jpg');
figure
imagesc(RGB)
axis image
zoom(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)
axis image
zoom(4)

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

入力引数

すべて折りたたむ

RGB イメージ。m×n×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 より前に導入