メインコンテンツ

dn2radiance

デジタル値の放射輝度への変換

説明

newspcube = dn2radiance(spcube) は、ハイパースペクトル データまたはマルチスペクトル データのピクセル値をデジタル値から放射輝度値に変換します。関数は、新しいスペクトル オブジェクトを返します。なお、データのピクセル値は大気上端 (TOA) の放射輝度です。

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

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

たとえば、dn2radiance(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);

関数 dn2radiance を使用して、放射輝度値を計算します。

newhcube = dn2radiance(hcube);

入力放射輝度データと出力放射輝度データのスペクトル バンド イメージを読み取り、表示します。

inputBand = gather(hcube);
radianceBand = gather(newhcube);
band = 80;
figure
subplot(1,2,1)
imagesc(inputBand(:,:,band))
title("Input Band")
axis off
subplot(1,2,2)
imagesc(radianceBand(:,:,band))
title("Radiance 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 Radiance Band contains an object of type image.

Landsat 8 マルチスペクトル データをダウンロードします。

zipfile = "LC08_L1TP_113082_20211206_20211215_02_T1.zip";
landsat8Data_url = "https://ssd.mathworks.com/supportfiles/image/data/" + zipfile;
hyper.internal.downloadLandsatDataset(landsat8Data_url,zipfile)
filepath = fullfile("LC08_L1TP_113082_20211206_20211215_02_T1","LC08_L1TP_113082_20211206_20211215_02_T1_MTL.txt");

マルチスペクトル イメージをワークスペースに読み込み、均一な解像度に再サンプリングします。

mcube = immulticube(filepath);
mcube = resampleBands(mcube,30);

デジタル値を放射輝度値に変換します。

newmcube = dn2radiance(mcube);

入力および出力のマルチスペクトル データから帯域を可視化します。

inputBand = gather(mcube);
radianceBand = gather(newmcube);
band = 5;
figure
subplot(1,2,1)
imagesc(inputBand(:,:,band))
title("Input Band")
axis off
subplot(1,2,2)
imagesc(radianceBand(:,:,band))
title("Radiance 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 Radiance Band contains an object of type image.

入力引数

すべて折りたたむ

入力スペクトル データ。hypercube オブジェクトまたは multicube オブジェクトとして指定します。デジタル値で示されたピクセル値を放射輝度値に変換するには、hypercube オブジェクトまたは multicube オブジェクトの Metadata プロパティに Gain フィールドおよび Offset フィールドを含めなければなりません。

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

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

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

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

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

出力引数

すべて折りたたむ

出力スペクトル データ。hypercube オブジェクトまたは multicube オブジェクトとして返されます。出力データ キューブのピクセル値は、描画される面からの放射量を指定する放射輝度です。放射輝度値は、次の方程式を使用し、デジタル値から計算します。

Radiance Lλ=(DN×Gain)+Bias

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

バージョン履歴

R2020b で導入

すべて展開する