Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

colorangle

2 つの RGB ベクトル間の角度

説明

angle = colorangle(rgb1,rgb2) は、2 つの RGB ベクトルの間の角度を計算します。

すべて折りたたむ

テスト イメージを読み取ります。イメージは、Canon EOS 30D デジタル カメラで撮影した、黒のレベルを補正し、ピクセルごとに 16 ビットにスケーリングした後の生のセンサー データです。デモザイキング、ホワイト バランシング、色強調、ノイズ フィルタリング、またはガンマ補正は適用されていません。

RAW = imread("foosballraw.tiff");

関数demosaicを使用して内挿し、カラー イメージを取得します。カラー フィルターの配列パターンは RGGB です。

A = demosaic(RAW,"rggb");

イメージを表示します。イメージは線形 RGB 色空間であるため、ガンマ補正を適用してイメージが画面上に正しく表示されるようにします。

A_sRGB = lin2rgb(A);
imshow(A_sRGB)

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

イメージは ColorChecker® チャートを含みます。チャートのニュートラル パッチを使用し、事前に計算されたグラウンド トゥルースの光源を指定します。

illuminant_groundtruth = [0.0717 0.1472 0.0975];

光源の推定にずれが生じないように、マスクを作成して ColorChecker チャートを除外します。

mask = true(size(A,1), size(A,2));
mask(920:1330,1360:1900) = false;

illumwhiteillumgray、およびillumpcaの 3 つの異なる光源推定アルゴリズムを実行します。

illuminant_whitepatch = illumwhite(A,"Mask",mask);
illuminant_grayworld = illumgray(A,"Mask",mask);
illuminant_pca = illumpca(A,"Mask",mask);

関数 colorangle を使用して、それぞれの推定された光源とグラウンド トゥルースとの間の角度を計算することによって、各推定値をグラウンド トゥルースと比較します。角度が小さいほど、推定の精度が上がります。推定の大きさは重要ではありません。なぜなら、光源の方向のみが色順応によるイメージのホワイト バランスに使用されるからです。

angle_whitepatch = colorangle(illuminant_whitepatch,illuminant_groundtruth)
angle_whitepatch = 5.0921
angle_grayworld = colorangle(illuminant_grayworld,illuminant_groundtruth)
angle_grayworld = 5.1036
angle_pca = colorangle(illuminant_pca,illuminant_groundtruth)
angle_pca = 5.0134

angle_pca の値は最小です。これは、PCA 光源推定アルゴリズムがこのイメージのグラウンド トゥルース照度に最も近いことを示します。

入力引数

すべて折りたたむ

1 番目の RGB ベクトル。3 要素の数値ベクトルとして指定します。

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

2 番目の RGB ベクトル。3 要素の数値ベクトルとして指定します。

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

出力引数

すべて折りたたむ

RGB ベクトル間の角度。数値スカラーとして返されます。

データ型: double

詳細

すべて折りたたむ

角度誤差

角度誤差は、グラウンド トゥルースに対する光源の推定を評価するのに役立つメトリクスです。グラウンド トゥルースの光源と推定された光源との間の角度が小さいほど、推定の精度は高くなります。

バージョン履歴

R2017b で導入