Main Content

dn2reflectance

デジタル値の反射率への変換

R2020b 以降

説明

newhcube = dn2reflectance(hcube) は、ハイパースペクトル データ キューブのピクセル値をデジタル値 (DN) から反射率値に変換します。この関数は、新しい hypercube オブジェクトを返します。なお、データ キューブのピクセル値は大気上端 (TOA) の反射率値です。TOA の反射率値の詳細については、DN からの TOA の反射率値の計算を参照してください。

newhcube = dn2reflectance(hcube,'BlockSize',blocksize) は、名前と値のペアの引数 'BlockSize' を使用して、ハイパースペクトル データ キューブのブロック処理用のブロック サイズを指定します。

この関数は、入力イメージを個別ブロックに分割して各ブロックを処理し、各ブロックの処理結果を連結して出力行列を形成します。ハイパースペクトル イメージは、大きすぎてそのままではシステム メモリに収まらない場合のある多次元データ セットです。そのため、関数 dn2reflectance の実行中にシステムでメモリ不足が発生する場合があります。このような問題に直面した場合は、次の構文を使用してブロック処理を実行します。

たとえば、dn2reflectance(hcube,'BlockSize',[50 50]) は、入力イメージをオーバーラップのない 50 行 50 列のブロックに分割し、各ブロックのピクセルの反射率値を計算します。

メモ

名前と値のペアの引数 'BlockSize' を指定してブロック処理を実行するには、MATLAB® R2021a 以降のリリースが必要です。

メモ

この関数には Image Processing Toolbox™ Hyperspectral Imaging Library が必要です。Image Processing Toolbox Hyperspectral Imaging Library はアドオン エクスプローラーからインストールできます。アドオンのインストールの詳細については、アドオンの入手と管理を参照してください。

Image Processing Toolbox Hyperspectral Imaging LibraryMATLAB Online™ または MATLAB Mobile™ ではサポートされないため、デスクトップの MATLAB が必要となります。

すべて折りたたむ

ハイパースペクトル データをワークスペースに読み取ります。

hcube = hypercube('EO1H0440342002212110PY_cropped.hdr');

メタデータの BadBands パラメーターを使用し、正しくないスペクトル バンド番号を確認します。

bandNumber = find(~hcube.Metadata.BadBands);

正しくないスペクトル バンドをデータ キューブから削除します。

hcube = removeBands(hcube,'BandNumber',bandNumber);

デジタル値を大気上端 (TOA) の反射率に変換します。出力データ キューブのピクセル値が TOA の反射率となります。

newhcube = dn2reflectance(hcube);

入力反射率データ キューブと出力反射率データ キューブの 80 番目のスペクトル バンド イメージを読み取り、表示します。

inputBand = hcube.DataCube;
reflectanceBand = newhcube.DataCube;
band = 80;
figure
subplot(1,2,1)
imagesc(inputBand(:,:,band))
title('Input Band')
axis off
subplot(1,2,2)
imagesc(reflectanceBand(:,:,band))
title('Reflectance Band')
axis off
colormap gray   

入力引数

すべて折りたたむ

入力ハイパースペクトル データ。hypercube オブジェクトとして指定します。hypercube オブジェクトの DataCube プロパティにはハイパースペクトル データ キューブが格納されます。hypercube オブジェクトの MetaData プロパティには反射率のゲイン値が含まれていなければなりません。

データ ブロックのサイズ。正の整数の 2 要素ベクトルとして指定します。ベクトルの各要素は、それぞれ各ブロックの行数と列数に対応します。データ ブロックのサイズは入力イメージのサイズより小さくなければなりません。ハイパースペクトル イメージを小さなブロックに分割すれば、大きなデータ セットを処理してもメモリ不足に陥ることはありません。

  • blocksize の値が小さすぎると、関数によるメモリの使用量は減りますが、その分実行時間が長くなります。

  • blocksize の値が大きいか、入力イメージのサイズと等しいと、実行時間は短くなりますが、その分メモリの使用量は高くなります。

例: 'BlockSize',[20 20] は、各データ ブロックのサイズを 20 行 20 列で指定します。

出力引数

すべて折りたたむ

出力ハイパースペクトル データ。hypercube オブジェクトとして返されます。出力で返されるデータ キューブのピクセル値は、大気上端 (TOA) の反射率値を指定します。

詳細

すべて折りたたむ

DN からの TOA の反射率値の計算

デジタル値 (DN) が与えられている場合、TOA の反射率は、データ キューブの各スペクトル バンドの反射率のゲイン (RGain) と反射率のオフセット (ROffset) を使用して計算されます。

Reflectance ρλ=(DN×RGain)+ROffset

各スペクトル バンドの反射率のゲイン値と反射率のオフセット値はヘッダー ファイルに格納されています。

あるいは、次の 2 つのステップを踏むことで、デジタル値 (DN) から TOA の反射率値を推定できます。

  1. デジタル値 (DN) から放射輝度値を計算します。

    Radiance Lλ=(DN×Gain)+Bias

    Gainλ および Biasλ はそれぞれ、各スペクトル バンド (λ) のゲイン値とオフセット値です。hypercube オブジェクトの Metadata プロパティには、ゲイン値とオフセット値が含まれます。

  2. 放射輝度値から TOA の反射率値を計算します。

    Reflectance ρλ=πd2LλESUNλθE

    d は地球と太陽の距離を天文単位で表したもので、ESUNλ は各スペクトル バンドの平均太陽放射輝度であり、θE は太陽高度角です。

バージョン履歴

R2020b で導入