Main Content

illumgray

グレー ワールド アルゴリズムを使用した光源の推定

説明

illuminant = illumgray(A) はシーンの平均色がグレーであると仮定して、RGB イメージ A におけるシーン照度を推定します。

illuminant = illumgray(A,percentile) はピクセル値の指定された上限と下限の百分位を除いて、照度を推定します。

illuminant = illumgray(___,Name=Value) は、追加オプションを制御するために名前と値の引数を使用して照度を推定します。

すべて折りたたむ

イメージを開いて、不適切なホワイト バランスで表示します。

A = imread("foosball.jpg");
imshow(A)
title("Original Image")

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

グレー ワールド アルゴリズムは RGB 値が線形であると仮定します。ただし、JPEG ファイル形式はガンマ補正された sRGB 色空間にイメージを保存します。関数rgb2linを使用してガンマ補正を元に戻します。

A_lin = rgb2lin(A);

上位下位 10% のピクセルを除いて、シーン照度を推定します。入力イメージが線形化されているため、illumgray は線形 RGB 色空間で光源を返します。

percentiles = 10;
illuminant = illumgray(A_lin,percentiles)
illuminant = 1×3

    0.2206    0.2985    0.5219

illuminant の 3 番目の係数が最大です。これはイメージの青みがかった色調と一致します。

関数chromadaptに推定された光源を入力することで色を補正します。

B_lin = chromadapt(A_lin,illuminant,ColorSpace="linear-rgb");

関数lin2rgbを使用してガンマ補正を適用することで、画面にホワイト バランス済みのイメージを正しく表示します。

B = lin2rgb(B_lin);

補正したイメージを表示します。

imshow(B)
title("White-Balanced Image Using Gray World with percentiles=["+ ...
    num2str(percentiles)+" "+num2str(percentiles)+"]")

Figure contains an axes object. The axes object with title White-Balanced Image Using Gray World with percentiles=[10 10] contains an object of type image.

入力引数

すべて折りたたむ

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

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

光源推定から除外するピクセルの百分位。数値スカラーまたは 2 要素の数値ベクトルとして指定します。ピクセルを除外すると、露光過多や露光不足のピクセルによる推定の歪みを防ぐことができます。

  • percentile がスカラーの場合、下限の百分位と上限の百分位の両方に同じ値が使用されます。この場合、上限と下限の百分位の合計が 100 を超えないように percentile が [0, 50] の範囲内になければなりません。

  • percentile が 2 要素ベクトルである場合、最初の要素は下限の百分位で、2 番目の要素は上限の百分位です。両方の百分位は [0, 100) の範囲内になければならず、合計が 100 を超えることはできません。

以下のイメージは、光源推定に含まれるピクセルの範囲を示しています。選択は、各カラー チャネルごとに異なります。

Grayscale colorbar showing pixels in increasing order of intensity to the right. The set of pixels to include in the illuminant estimation fall between the thresholds of the bottom percentile and top percentile, exclusive.

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: illuminant = illumgray(I,Mask=m) はバイナリ マスク m に従って選択されたイメージ I 内のピクセルのサブセットを使用してシーンの光源を推定します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: illuminant = illumgray(I,"Mask",m) はバイナリ マスク m に従って選択されたイメージ I 内のピクセルのサブセットを使用してシーンの光源を推定します。

イメージ マスク。m 行 n 列の logical または数値の配列として指定します。マスクは、光源を推定するときに入力イメージ A のどのピクセルを使用するかを示します。計算では、マスク値 0 に対応する A 内のピクセルが除外されます。既定では、マスクはすべて 1 を持ち、A 内のすべてのピクセルが推定に含まれます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

ベクトルのノルムのタイプ (p ノルム)。正の数値スカラーとして指定します。p ノルムは、入力イメージ A の平均 RGB 値の計算に影響します。p ノルムは sum(abs(x)p) ^ (1/p) として定義されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

シーン照度の推定。3 要素の数値の行ベクトルとして返されます。3 つの要素は、光源の赤、緑、青の値に対応しています。

データ型: double

ヒント

  • グレー ワールド アルゴリズムは一様な明るさと線形の RGB 値を仮定します。非線形の sRGB または Adobe RGB イメージを使用して作業している場合は、関数 rgb2lin でガンマ補正を元に戻してから illumgray を使用します。また、関数 lin2rgb を使用して、色順応したイメージを sRGB に必ず戻してください。

  • Mask を指定すると、下限の百分位数と上限の百分位数が、マスクされたイメージに適用されます。

  • 関数 chromadapt を使用して、イメージのカラー バランスを調整し、シーン照明を削除できます。

参照

[1] Ebner, Marc. "The Gray World Assumption." Color Constancy. Chichester, West Sussex: John Wiley & Sons, 2007.

バージョン履歴

R2017b で導入