Main Content

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

illumpca

主成分分析 (PCA) を使用した光源の推定

説明

illuminant = illumpca(A) は主成分分析 (PCA) を使用して、大きな色差から RGB イメージ A 内のシーン照度を推定します。

illuminant = illumpca(A,percentage) は最も暗いピクセルと最も明るいピクセルの指定した割合を使用して照度を推定します。

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

すべて折りたたむ

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

A = imread('foosball.jpg');
figure
imshow(A,'InitialMagnification',25)
title('Original Image')

主成分分析では、RGB 値が線形であると仮定します。ただし、JPEG ファイル形式はガンマ補正された sRGB 色空間にイメージを保存します。関数rgb2linを使用してガンマ補正を元に戻します。

A_lin = rgb2lin(A);

最も暗いおよび明るい 3.5% のピクセル (既定の割合) からシーン照度を推定します。入力イメージは線形であるため、関数 illumpca は線形 RGB 色空間で光源を返します。

illuminant = illumpca(A_lin)
illuminant = 1×3

    0.4075    0.5547    0.7254

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 Principal Component Analysis')

入力引数

すべて折りたたむ

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

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

光源推定のために保持するピクセルの割合。[0, 50] の範囲で数値スカラーとして指定します。

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

名前と値のペアの引数

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

例: illuminant = illumpca(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

出力引数

すべて折りたたむ

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

データ型: double

ヒント

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

アルゴリズム

ピクセルの色は、RGB 色空間内のベクトルとして表されます。アルゴリズムは、イメージ内の平均色に対する投影の明るさまたはノルムに従って色を順序付けます。アルゴリズムは、この順序に従って、最も暗い色と最も明るい色のみを保持します。その後、色のサブセットに対して主成分分析 (PCA) が実行されます。PCA の最初の要素は、光源の推定を示します。

参照

[1] Cheng, Dongliang, Dilip K. Prasad, and Michael S. Brown. "Illuminant Estimation for Color Constancy: Why spatial-domain methods work and the role of the color distribution." Journal of the Optical Society of America A. Vol. 31, Number 5, 2014, pp. 1049–1058.

R2017b で導入