Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

illumgray

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

説明

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

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

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

すべて折りたたむ

イメージを開き、それを表示します。表示するイメージのサイズを縮小するオプションの倍率を指定します。

A = imread('foosball.jpg');
figure
imshow(A,'InitialMagnification',25)
title('Original 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);

オプションの倍率を設定して、補正後のイメージを表示します。

figure
imshow(B,'InitialMagnification',25)
title(['White-Balanced Image Using Gray World with percentiles=[' ...
    num2str(percentiles) ' ' num2str(percentiles) ']'])

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

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

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

ベクトルのノルムのタイプ (p ノルム)。'Norm' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。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 で導入