Main Content

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

estimateAbundanceLS

存在量マップの推定

R2020a 以降

    説明

    abundanceMap = estimateAbundanceLS(inputData,endmembers) は、最小二乗法を使用してハイパースペクトル データ キューブ内のエンドメンバーの存在量マップを推定します。

    ハイパースペクトル データ キューブにはピュア ピクセルとミクセルのどちらも格納できます。ピュア ピクセルは 1 つのクラスのスペクトル特性を表し、ミクセルは複数クラスのスペクトル特性を表します。ピュア ピクセルのスペクトル シグネチャは、ハイパースペクトル データ キューブ内に存在する一意のクラスを識別するエンドメンバーを構成します。ミクセルのスペクトル シグネチャは 2 つ以上のエンドメンバー スペクトルの線形結合とすることができます。存在量マップは、各ピクセルのスペクトルに存在する各エンドメンバーの比率を識別します。P 個のエンドメンバーを含む空間次元 M 行 N 列のハイパースペクトル データ キューブの場合、P 個の存在量マップが存在し、それぞれのサイズは M 行 N 列です。

    存在量マップの推定処理は "スペクトル アンミキシング" と呼ばれ、各ピクセルのスペクトルが任意のエンドメンバー スペクトルのセットに分解されます。

    abundanceMap = estimateAbundanceLS(___,'Method',estMethod) は存在量マップの推定に使用する最小二乗法を指定します。

    メモ

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

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

    すべて折りたたむ

    ハイパースペクトル データ キューブとエンドメンバー シグネチャを含む MAT ファイルをワークスペースに読み込みます。データ キューブとエンドメンバー シグネチャを抽出します。

    data = load('indian_pines.mat');
    dataCube = data.indian_pines;
    endmembers = data.signatures;

    エンドメンバー スペクトルをプロットします。

    plot(endmembers)
    numEndMem = num2str(size(endmembers,2));
    title(['Number of Endmembers:' numEndMem])    

    エンドメンバー スペクトルの存在量マップを推定します。

    abundanceMap = estimateAbundanceLS(dataCube,endmembers);

    エンドメンバー スペクトルごとの存在量マップを表示します。存在量マップの順序は endmembers 入力のエンドメンバーの順序と同じです。

    montage(abundanceMap,'Size',[4 4],'BorderSize',[10 10]);
    colormap default
    title('Abundance Maps for Endmembers');

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

    hcube = hypercube('jasperRidge2_R198.hdr');

    ハイパースペクトル データから、6 個のエンドメンバーを抽出します。

    endmembers = nfindr(hcube,6);

    完全制約付き最小二乗法を使用してエンドメンバーごとの存在量マップを推定します。

    abundanceMap = estimateAbundanceLS(hcube.DataCube,endmembers,'Method','fcls');

    関数 colorize を使用してデータ キューブの RGB イメージを推定します。

    rgbImg = colorize(hcube,'Method','RGB');

    RGB イメージを表示します。

    figure
    imagesc(rgbImg)
    title('RGB Image of Data Cube')

    エンドメンバー スペクトルの存在量マップを表示します。存在量マップの順序は入力引数 endmembers のエンドメンバーの順序と同じです。

    figure
    montage(abundanceMap(:,:,1:3),'Size',[1 3],'BorderSize',[20 20])
    colormap default
    colorbar
    title('Abundance Map for Endmember 1 | Abundance Map for Endmember 2 | Abundance Map for Endmember 3','FontSize',14)

    figure
    montage(abundanceMap(:,:,4:6),'Size',[1 3],'BorderSize',[20 20])
    colormap default
    colorbar
    title('Abundance Map for Endmember 4 | Abundance Map for Endmember 5 | Abundance Map for Endmember 6','FontSize',14)

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。サイズが M x N x C のハイパースペクトル データ キューブを表す 3 次元数値配列または hypercube オブジェクトとして指定します。入力が hypercube オブジェクトの場合、関数はそのオブジェクトの DataCube プロパティに格納されたデータ キューブを読み取ります。ハイパースペクトル データ キューブは実数で非スパースでなければなりません。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    エンドメンバー シグネチャ。サイズが C 行 P 列の行列として返されます。ここで、C は入力ハイパースペクトル データ内のスペクトル バンドの数、P はエンドメンバー スペクトル シグネチャの数です。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    存在量マップの推定法。次のいずれかの値を指定します。

    • 'ucls' — 制約なし最小二乗法。

    • 'fcls' — 完全制約付き最小二乗法。

    • 'ncls' — 非負の制約付き最小二乗法。

    例: estimateAbundanceLS(inputData,endmembers,'Method','ncls')

    データ型: char | string

    出力引数

    すべて折りたたむ

    存在量マップ。サイズが M x N x P の 3 次元数値配列として返されます。

    データ型: double

    参照

    [1] Keshava, N., and J.F. Mustard. “Spectral Unmixing.” IEEE Signal Processing Magazine 19, no. 1 (January 2002): 44–57. https://doi.org/10.1109/79.974727.

    [2] Kay, Steven M. Fundamentals of Statistical Signal Processing. Prentice Hall Signal Processing Series. Englewood Cliffs, N.J: Prentice-Hall PTR, 1993.

    バージョン履歴

    R2020a で導入