Main Content

measureIlluminant

テスト チャートを使用したシーンの光源の測定

説明

esfrChart オブジェクトまたは colorChecker オブジェクト

グレー関心領域 (ROI) を自動的に検出する場合は、esfrChart オブジェクトまたは colorChecker オブジェクトを使用します。esfrChart オブジェクトは、Imatest® eSFR テスト チャートの強調版または拡張版をサポートしています[1]esfrChart オブジェクトは、Calibrite ColorChecker® Classic テスト チャートをサポートしています[2]

illuminant = measureIlluminant(chart) は、Imatest eSFR チャートまたは Calibrite ColorChecker Classic チャートのグレー ROI を使用してシーンの光源を測定します。

テスト チャート イメージ (R2024a 以降)

esfrChart オブジェクトまたは colorChecker オブジェクトでサポートされていないその他のタイプのテスト チャートの場合、テスト チャート イメージを使用します。グレー ROI の位置を特定しなければなりません。

illuminant = measureIlluminant(im,roiPositions) は、テスト チャート イメージ im の位置 roiPositions におけるグレー ROI を使用してシーンの光源を測定します。

illuminant = measureIlluminant(im,roiPositions,InputColorSpace=inputColorSpace) は、テスト チャート イメージの入力色空間も指定します。

すべて折りたたむ

この例では、グレー パッチ ROI を使用して eSFR チャートの光源を測定する方法を示します。その後、eSFR チャートのイメージのホワイト バランスを調整します。

eSFR チャートのイメージを読み取って表示します。このテスト チャートの色空間は sRGB です。

I = imread("eSFRTestImage.jpg");
imshow(I)

関数 rgb2lin を使用してテスト チャートを線形化してから、esfrChart オブジェクトを作成します。

Ilin = rgb2lin(I);
chart = esfrChart(Ilin);

線形 RGB 色空間で光源を推定します。光源には、赤と緑の成分より強い青の成分が含まれています。この結果は、青みがかった色調のテスト チャートのイメージと一致します。

illum = measureIlluminant(chart)
illum = 1×3

   69.2527   73.5922   80.5141

線形 RGB 色空間でチャート イメージのホワイト バランスを調整します。

Jlin = chromadapt(Ilin,illum,ColorSpace="linear-rgb");

ホワイト バランス調整済みイメージを sRGB 色空間に変換し、結果を表示します。ホワイト バランス調整済みイメージは、特に中間のグレー パッチやイメージの背景上で青みがかった色調が少なくなります。

J = lin2rgb(Jlin);
imshow(J)
title("White Balanced Test Chart")

推定された光源を使用して、同様のライティング条件下で取得された他のイメージのホワイト バランスを調整できます。

カスタム テスト チャートのイメージを読み取って表示します。この例では、Imatest eSFR テスト チャートをトリミングし、カスタムのテスト チャート イメージをシミュレートします。

I = imread("RGBColorPatches.jpg");
imshow(I)

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

グレーのピクセルから成る領域の周囲に ROI を描画します。

numROIs = 1;
roiPos = zeros(numROIs,4);
for cnt = 1:numROIs
    hrect = drawrectangle;
    roiPos(cnt,:) = hrect.Position;
end  

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.rectangle.

sRGB 色空間でシーンの光源を測定します。

illum = measureIlluminant(I,roiPos)
illum = 1×3

    0.5180    0.5386    0.5827

sRGB 色空間でチャート イメージのホワイト バランスを調整し、結果を表示します。

J = chromadapt(I,illum);
imshow(J)

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

入力引数

すべて折りたたむ

テスト チャート。esfrChart オブジェクトまたは colorChecker オブジェクトとして指定します。

テスト チャート オブジェクトの場合、関数 measureIlluminant は一様な明るさと線形の RGB 値を仮定します。非線形の sRGB イメージまたは Adobe RGB イメージを使用して作業している場合は、関数 rgb2lin でガンマ補正を元に戻してから、テスト チャート オブジェクトを作成します。

R2024a 以降

テスト チャート イメージ。RGB イメージとして指定します。

テスト チャート イメージの場合、関数 measureIlluminant は、引数 inputColorSpace の値に基づく非線形 RGB 色空間のイメージを必要とします。線形 RGB イメージを使用して作業している場合は、関数 lin2rgb でガンマ補正を適用してから、関数 measureIlluminant を呼び出します。

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

R2024a 以降

ROI の位置。n 行 4 列の数値配列として指定します。ここで、n は ROI の数です。各 ROI の形式は [X Y Width Height] です。ここで、XY は ROI の左上隅の座標です。WidthHeight は ROI の幅と高さ (ピクセル単位) です。

R2024a 以降

テスト チャート イメージ im の入力色空間。"srgb""adobe-rgb-1998"、または "prophoto-rgb" として指定します。この名前と値の引数は、テスト チャート イメージ im を使用する場合にのみ設定できます。

入力引数 chart を指定した場合、関数 measureIlluminant は、測定された RGB 値が線形 RGB 色空間内にあると仮定します。

データ型: char | string

出力引数

すべて折りたたむ

シーンの光源。3 要素の行ベクトルとして返されます。

データ型: double

ヒント

  • esfrChart オブジェクトおよび colorChecker オブジェクトの場合、関数 measureIlluminant は、最初に各グレー パッチ ROI の平均強度を計算してから、平均強度の平均を取ることで、光源を計算します。この関数は、各カラー チャネルに対してこの計算を個別に実行します。

  • テスト チャート イメージ im の場合、関数 measureIlluminant は、関数 illumgray を使用して光源を計算します。関数 illumgray の引数 percentage0 として指定すると、この測定値には ROI 内のすべてのピクセルが含まれます。

  • イメージのホワイト バランスを調整するには、関数 chromadapt を使用します。

参照

[2] Calibrite. "ColorChecker Classic". https://calibrite.com/us/product/colorchecker-classic/.

バージョン履歴

R2017b で導入

すべて展開する