Main Content

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

makehdr

ハイ ダイナミック レンジ イメージの作成

説明

HDR = makehdr(files) は、files 内にある、空間的にレジストレーションされたロー ダイナミック レンジ (LDR) イメージのセットから単精度のハイ ダイナミック レンジ (HDR) イメージ HDR を作成します。

HDR = makehdr(imds) は、ImageDatastore オブジェクト imds として格納されている、空間的にレジストレーションされた LDR イメージのセットから単精度のハイ ダイナミック レンジ イメージ HDR を作成します。

HDR = makehdr(___,Name,Value) は、前のいずれかの構文の入力引数に加えて、イメージ作成のさまざまな特性を制御する名前と値のペアを使用します。

メモ

入力イメージ ファイルには EXIF (Exchangeable Image File Format) 露光メタデータを含めなければなりません。makehdr は、最も明るいイメージと最も暗いイメージの中間の露光値を、HDR の計算の基本露光として使用します。この値は、特定のファイルにある必要はありません。この中間の露光値の計算方法の詳細については、アルゴリズムを参照してください。

HDR = makehdr(images,Name,Value) は、cell 配列 images に格納されている、空間的にレジストレーションされた LDR イメージのセットから単精度の HDR イメージ HDR を作成します。名前と値のペア 'ExposureValues' または 'RelativeExposure' を使用して、入力 cell 配列内のイメージに対して露光値を指定します。

メモ

入力が LDR イメージの cell 配列の場合、2 番目の入力引数として、露光値か相対露光値のいずれかを指定しなければなりません。露光値を指定するには、名前と値のペア 'ExposureValues' を使用します。相対露光値を指定するには、名前と値のペア 'RelativeExposure' を使用します。

すべて折りたたむ

同じ絞り値を共有し、異なる露光時間を持つロー ダイナミック レンジ (LDR) イメージのセットからハイ ダイナミック レンジ (HDR) イメージを作成します。

6 つのロー ダイナミック レンジ イメージをワークスペースに読み込みます。各露光時間のベクトルを作成します。イメージをモンタージュとして表示します。

files = {'office_1.jpg','office_2.jpg','office_3.jpg',...
         'office_4.jpg','office_5.jpg','office_6.jpg'};
expTimes = [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];
montage(files)

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

LDR イメージを組み合わせて HDR イメージにします。

hdr = makehdr(files,'RelativeExposure',expTimes./expTimes(1));

HDR イメージを表示します。

rgb = tonemap(hdr);
imshow(rgb)

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

同じ絞り値を共有し、異なる露光時間を持つ 6 つのロー ダイナミック レンジ (LDR) イメージのセットからハイ ダイナミック レンジ (HDR) イメージを作成します。推定されたカメラ応答関数の値は、これらの LDR イメージから計算され、HDR イメージを生成するために使用されます。

空間的にレジストレーションされた 6 つの LDR イメージのセットをワークスペースに読み取ります。これらのイメージを含む imageDatastore オブジェクトを作成します。イメージをモンタージュとして表示します。

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

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

データストア内のイメージからカメラ応答関数を推定します。

crf = camresponse(imds);

推定されたカメラ応答関数の値を使用することによって、LDR イメージを組み合わせて HDR イメージにします。

hdr = makehdr(imds,'CameraResponse',crf);

HDR イメージを表示します。

rgb = tonemap(hdr);
imshow(rgb)

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

同じ絞り値を共有し、異なる露光時間を持つロー ダイナミック レンジ (LDR) イメージの cell 配列からハイ ダイナミック レンジ (HDR) イメージを作成します。

6 つのロー ダイナミック レンジ イメージをワークスペースに読み取ります。

image1 = imread('office_1.jpg');
image2 = imread('office_2.jpg');
image3 = imread('office_3.jpg');
image4 = imread('office_4.jpg');
image5 = imread('office_5.jpg');
image6 = imread('office_6.jpg');

cell 構成演算子 { } を使用して、ワークスペース内で LDR イメージの cell 配列を作成します。

images = {image1,image2,image3,image4,image5,image6};

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

montage(images)

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

入力 cell 配列内の各 LDR イメージに露光値を指定します。

exposure = [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];

入力 cell 配列内の 1 番目の LDR イメージの露光値に対する相対露光値を計算します。

relExposure = exposure./exposure(1);

LDR イメージを組み合わせて HDR イメージにします。cell 配列内の各イメージに相対露光値を指定します。

hdr = makehdr(images,'RelativeExposure',relExposure);

HDR イメージを表示します。

rgb = tonemap(hdr);
imshow(rgb)

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

入力引数

すべて折りたたむ

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

データ型: char | string | cell

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

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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: makehdr(files,'RelativeExposure',[0.1 0.3 0.4]);

基本露光として使用するファイルの名前。string スカラーまたは文字ベクトルとして指定します。

データ型: char | string

メモ

  • 名前と値のペア 'BaseFile''ExposureValues'、および 'RelativeExposure' は、一度に 1 つだけ使用できます。

  • 入力が空間的にレジストレーションされた LDR イメージの cell 配列の場合、名前と値のペア 'BaseFile' を指定してはいけません。

入力セット内の各イメージの露光値。正の値の数値ベクトルとして指定します。このベクトルの k 番目の要素は、入力セット内の k 番目の LDR イメージに対応します。露光値 (EV) が 1 増加するのは、2 倍の露光に相当します。EV が 1 減少するのは 2 分の 1 の露光に相当します。このパラメーターを指定した場合、この関数は EXIF 露光メタデータをオーバーライドします。

データ型: single | double

入力セット内の各イメージの相対露光値。正の値の数値ベクトルとして指定します。このベクトルの k 番目の要素は、入力セット内の k 番目の LDR イメージに対応します。

たとえば、相対露光 (RE) 値が 0.5 のイメージには、RE 値が 1 のイメージの半分の露光があります。同様に、RE 値が 3 のイメージには、RE 値が 1 のイメージの 3 倍の露光があります。このパラメーターを指定した場合、この関数は EXIF 露光メタデータをオーバーライドします。

データ型: single | double

最小適正露光値。正の整数として指定します。各 LDR イメージで、この最小値より小さい値を持つピクセルは露光不足と見なされ、最終的な HDR イメージに寄与しません。既定では、この最小値は、イメージのデータ型で許容される最大強度の 2% に設定されます。

データ型: single | double

最大適正露光値。正の整数として指定します。各 LDR イメージで、この最大値より大きい値を持つピクセルは露光過多と見なされ、最終的な HDR イメージに寄与しません。既定では、この最大値は、イメージのデータ型で許容される最大強度の 98% に設定されます。

データ型: single | double

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

メモ

名前と値のペア 'MaximumLimit''MinimumLimit' は、'CameraResponse' が指定された場合、無視されます。

データ型: single | double

出力引数

すべて折りたたむ

ハイ ダイナミック レンジ イメージ。m x n x 3 の数値配列として返されます。

データ型: single

アルゴリズム

関数 makehdr は、入力イメージの露光値 (EV) を使用して中間の露光値を計算します。各イメージの露光値は、絞りとシャッター速度に基づいて計算されます。絞りとシャッター速度の値は、その入力ファイルの EXIF メタデータに格納されるか、名前と値のペア 'ExposureValues' を使用して指定されます。中間の EV は、最大の EV と最小の EV の平均値として計算され、基本露光として使用されます。

参照

[1] Reinhard et al. High Dynamic Range Imaging 2006. Ch. 4.

[2] 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.

バージョン履歴

R2008a で導入