ハイ ダイナミック レンジ イメージの使用
ダイナミック レンジとは、暗から明への明度レベルの範囲を指します。現実世界のシーンのダイナミック レンジは非常に高い場合もあります。ハイ ダイナミック レンジ (HDR) イメージは、32 ビットの浮動小数点値を使用して各カラー チャネルを保存し、現実世界のシーンの全階調範囲 ("シーン参照" と呼ばれる) のキャプチャを試みます。HDR イメージには、人の視覚の範囲に近い高度な詳細が含まれます。ツールボックスには、HDR イメージの読み取り、作成、書き込みのための関数が含まれています。また、HDR イメージからロー ダイナミック レンジ (LDR) イメージを作成して処理および表示するためのトーンマップ演算子も含まれています。
HDR イメージの読み取り
HDR イメージを MATLAB® ワークスペースに読み取るには、関数 hdrread
を使用します。
hdr_image = hdrread("office.hdr");
出力イメージ hdr_image
はデータ型 single
の m x n x 3 イメージです。
whos
Name Size Bytes Class Attributes hdr_image 665x1000x3 7980000 single
データの範囲は、LDR データに期待される範囲 [0, 1] を超えています。
hdr_range = [min(hdr_image(:)) max(hdr_image(:))]
hdr_range = 1×2 single row vector 0 3.2813
HDR イメージの表示および処理
ツールボックスの多くの関数では、データ型 single
および double
のイメージは、範囲 [0,1] のデータを持つ LDR イメージであると想定しています。HDR データは範囲 [0, 1] に縛られることなく Inf
値を含むことができるため、HDR データを使用する場合は各関数の動作を注意して確認しなければなりません。
一部の関数には、データの処理を続ける前に、想定される範囲外にある値をクリップするものがあります。クリップを行うと情報が欠落するため、このような関数からは予期しない結果が返されることがあります。
一部の関数には、範囲 [0, 1] のデータを要求しても、処理の前にそのデータを調整しないものがあります。このような関数からは正しくない結果が返されることがあります。
一部の関数には、実数データを要求するものがあります。HDR イメージに
Inf
の値が含まれている場合、これらの関数からは予期しない結果が返されることがあります。一部の関数には、入力データの範囲に制限がないものがあります。これらの関数は HDR データを正しく受け取って処理します。
LDR データを要求する関数を使用する場合は、"トーン マッピング" と呼ばれる処理を用いてイメージのダイナミック レンジを小さくします。トーン マッピングでは、元のイメージの外観を維持しながら、HDR データを範囲 [0, 1] に縮小します。トーン マッピングの関数には tonemap
、tonemapfarbman
、localtonemap
などがありますが、関数 rescale
によって実施されるような単純な線形再スケーリングよりも正確な結果が得られます。ただし、情報や細部がわずかに損失することに注意してください。
HDR イメージを表示するには、トーン マッピングを実行しなければなりません。例については、ハイ ダイナミック レンジ イメージの表示を参照してください。
ハイ ダイナミック レンジ イメージの作成
ロー ダイナミック レンジ イメージのグループから HDR イメージを作成するには、関数 makehdr
を使用します。ロー ダイナミック レンジ イメージは、空間的に登録されていなければならず、イメージ ファイルには EXIF メタデータが含まれていなければなりません。ロー ダイナミック レンジ イメージは cell 配列で指定します。
hdr_image = makehdr(files);
ハイ ダイナミック レンジ イメージのファイルへの書き込み
HDR イメージをワークスペースからファイルに書き込むには、関数 hdrwrite
を使用します。
hdrwrite(hdr,"filename");
参考
hdrread
| makehdr
| hdrwrite
| tonemap
| tonemapfarbman
| localtonemap