メインコンテンツ

dn2reflectance

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

説明

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

newspcube = dn2reflectance(spcube,BlockSize=blocksize) は、スペクトル データのブロック処理用のブロック サイズを指定します。 (R2021a 以降)

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

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

メモ

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

Hyperspectral Imaging Library for Image Processing Toolbox は、MATLAB® Online™ および MATLAB Mobile™ によってサポートされないため、デスクトップの MATLAB が必要です。

すべて折りたたむ

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

hcube = imhypercube("EO1H0440342002212110PY_cropped.hdr");

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

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

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

hcube = removeBands(hcube,BandNumber=bandNumber);

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

newhcube = dn2reflectance(hcube);

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

inputBand = gather(hcube);
reflectanceBand = gather(newhcube);
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  

Figure contains 2 axes objects. Hidden axes object 1 with title Input Band contains an object of type image. Hidden axes object 2 with title Reflectance Band contains an object of type image.

入力引数

すべて折りたたむ

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

spcubemulticube オブジェクトである場合、そのすべてのスペクトル バンドのデータ解像度は同じでなければなりません。multicube オブジェクトのスペクトル バンドの解像度がすべて同じではない場合、resampleBands 関数を使用して帯域を再サンプリングするか、selectBands 関数を使用して均一な解像度の帯域を選択します。

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

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

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

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

出力引数

すべて折りたたむ

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

詳細

すべて折りたたむ

バージョン履歴

R2020b で導入

すべて展開する