Main Content

camresponse

カメラ応答関数の推定

説明

crf = camresponse(files) は、files にリストされる、空間的にレジストレーションされたロー ダイナミック レンジ (LDR) イメージのセットからカメラ応答関数を推定します。

crf = camresponse(imds) は、ImageDatastore オブジェクト imds として格納される、空間的にレジストレーションされた LDR イメージのセットからカメラ応答関数を推定します。

crf = camresponse(___,'ExposureTimes',expTimes) は、名前と値のペアを使用して入力セット内の各イメージに対して露光時間を指定します。前のいずれかの構文の入力引数に加えて、この名前と値のペアを指定できます。

crf = camresponse(images,'ExposureTimes',expTimes) は、cell 配列として格納される、空間的にレジストレーションされた LDR イメージのセットからカメラ応答関数を推定します。名前と値のペアを使用して入力セット内の各イメージに対して露光時間を指定します。

すべて折りたたむ

空間的にレジストレーションされた 6 つのロー ダイナミック レンジ (LDR) イメージのセットを指定します。これらの LDR イメージは、絞り値が同じで露光時間が異なります。

files = ["office_1.jpg","office_2.jpg","office_3.jpg",...
         "office_4.jpg","office_5.jpg","office_6.jpg"];

指定されたイメージのセットからカメラ応答関数を推定します。

crf = camresponse(files);

入力イメージの強度レベルの範囲を指定します。

range = 0:length(crf)-1;

推定されたカメラ応答関数を赤、緑、青の色成分ごとにプロットします。このプロットは、対数露光とイメージ強度の関係を示しています。

figure
hold on
plot(crf(:,1),range,'--r','LineWidth',2);
plot(crf(:,2),range,'-.g','LineWidth',2);
plot(crf(:,3),range,'-.b','LineWidth',2);
xlabel('Log-Exposure');
ylabel('Image Intensity');
title('Camera Response Function');
grid on
axis('tight')
legend('R-component','G-component','B-component','Location','southeast')

6 つのロー ダイナミック レンジ (LDR) イメージを含む ImageDatastore オブジェクトを作成します。

setDir = fullfile(toolboxdir('images'),'imdata','office_*');
imds = imageDatastore(setDir);

イメージをモンタージュに表示します。

montage(imds,'Size',[6 1])

ImageDatastore オブジェクト内の各イメージに露光時間を指定します。

expTimes = [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];

露光時間を指定して、データストア内のイメージからカメラ応答関数を推定します。

crf = camresponse(imds,'ExposureTimes',expTimes);

入力イメージの強度値の範囲を指定します。

range = 0:length(crf)-1;

推定されたカメラ応答関数を R、G、B の色成分ごとにプロットします。このプロットは、対数露光とイメージ強度の関係を示しています。

figure
hold on
plot(crf(:,1),range,'--r','LineWidth',2);
plot(crf(:,2),range,'-.g','LineWidth',2);
plot(crf(:,3),range,'-.b','LineWidth',2);
xlabel('Log-Exposure');
ylabel('Image Intensity');
title('Camera Response Function');
grid on
axis('tight')
legend('R-component','G-component','B-component','Location','southeast')

入力引数

すべて折りたたむ

空間的にレジストレーションされた LDR イメージのセット。string 配列または文字ベクトルの cell 配列として指定します。これらのイメージは、任意のビット深度のカラーまたはグレースケールです。ただし、LDR イメージの推奨ビット深度は 8 または 16 です。

データ型: char | string | cell

空間的にレジストレーションされた LDR イメージのセット。ImageDatastore オブジェクトとして指定します。これらのイメージは、任意のビット深度のカラーまたはグレースケールです。ただし、LDR イメージの推奨ビット深度は 8 または 16 です。

空間的にレジストレーションされた LDR イメージのセット。cell 配列として指定します。これらのイメージは、任意のビット深度のカラーまたはグレースケールです。ただし、LDR イメージの推奨ビット深度は 8 または 16 です。

入力イメージの露光時間。正の値の数値ベクトルとして指定します。このベクトルの k 番目の要素は、入力セット内の k 番目の LDR イメージに対応します。expTimes を指定した場合、この関数は EXIF 露光メタデータをオーバーライドします。

例: camresponse(files,'ExposureTimes',[0.1 0.3 0.4]);

データ型: single | double

メモ

入力が LDR イメージの cell 配列の場合、2 番目の入力引数として、名前と値のペア 'ExposureTimes' を使用して露光時間を指定しなければなりません。

出力引数

すべて折りたたむ

カメラ応答関数の推定値。グレースケール イメージの場合は n 行 1 列のベクトルとして、カラー イメージの場合は n 行 3 列の行列として返されます。カメラ応答関数は、入力イメージの対数露光値 (シーンの放射輝度) を強度レベルにマッピングします。n の値は 2bit depth です。たとえば、イメージの入力セットのビット深度が 8 の場合、n は 256 です。

データ型: double

ヒント

  • この関数では、露光時間が異なるイメージが少なくとも 2 つ必要です。イメージ数を多くすると、処理時間はかかりますが crf の良好な推定が得られます。

  • files および imds の入力イメージ ファイルには、EXIF (Exchangeable Image File Format) 露光メタデータが含まれていなければなりません。crf 値を推定するために、この関数は EXIF メタデータ内の露光時間を読み取ります。expTimes を指定した場合、この関数は EXIF メタデータ内の露光時間をオーバーライドします。

参照

[1] Debevec, P.E., and J. Malik. "Recovering High Dynamic Range Radiance Maps from Photographs." In ACM SIGGRAPH 2008 classes, Article No. 31. New York, NY: ACM, 2008.

バージョン履歴

R2019a で導入