Main Content

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

植生スペクトルと非植生スペクトルの特定

この例では、以下を行う方法を説明します。

  • ハイパースペクトル関数用の超立方体として 2 次元スペクトル データを使用する。

  • 関数 ndvi を使用して植生スペクトルと非植生スペクトルを区別する。

この例では、Image Processing Toolbox™ Hyperspectral Imaging Library が必要となります。Image Processing Toolbox Hyperspectral Imaging Library はアドオン エクスプローラーからインストールできます。アドオンのインストールの詳細については、アドオンの取得と管理を参照してください。Image Processing Toolbox Hyperspectral Imaging Library は MATLAB® Online™ および MATLAB® Mobile™ ではサポートされないため、デスクトップの MATLAB® が必要となります。

2 次元スペクトル データの読み込み

インディアン パイン データセットの 20 個のエンドメンバーを含む 2 次元スペクトル データをワークスペースに読み込みます。

load("indian_pines_endmembers_20.mat")

インディアン パイン データセットの各バンドの波長値をワークスペースに読み込みます。

load("indian_pines_wavelength.mat")

ハイパースペクトル関数に使用するテスト データの準備

関数 reshape を使用して 2 次元スペクトル データを 3 次元ボリューム データに形状変更します。

[numSpectra,spectralDim] = size(endmembers);
dataCube = reshape(endmembers,[numSpectra 1 spectralDim]);

3 次元ボリューム データ dataCube および波長情報 wavelength を関数 hypercube に指定して、大きさが 1 の次元で 3 次元 hypercube オブジェクトを作成します。

hCube = hypercube(dataCube,wavelength);

NDVI の計算による植生スペクトルと非植生スペクトルの区別

hypercube オブジェクト内のスペクトルごとに NDVI 値を計算します。

ndviVal = ndvi(hCube);

植生スペクトルは一般的に 0 より大きい NDVI 値をもち、非植生スペクトルは一般的に 0 より小さい NDVI 値をもちます。しきい値処理を実行して植生スペクトルと非植生スペクトルを分離します。

index = ndviVal > 0;

植生エンドメンバーと非植生エンドメンバーをプロットします。

subplot(2,1,1)
plot(endmembers(index,:)')
title("Vegetation endmembers")
xlabel("Bands")
ylabel("Reflectance Values")
axis tight
subplot(2,1,2)
plot(endmembers(~index,:)')
title("Non-Vegetation endmembers")
xlabel("Bands")
ylabel("Reflectance Values")
axis tight

Figure contains 2 axes objects. Axes object 1 with title Vegetation endmembers, xlabel Bands, ylabel Reflectance Values contains 17 objects of type line. Axes object 2 with title Non-Vegetation endmembers, xlabel Bands, ylabel Reflectance Values contains 3 objects of type line.

参考

| |

関連するトピック