メインコンテンツ

estimateAbundanceLS

存在量マップの推定

    説明

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

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

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

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

    メモ

    この関数には、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 が必要です。

    すべて折りたたむ

    ハイパースペクトル データ キューブとエンドメンバー シグネチャを含む 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)    

    Figure contains an axes object. The axes object with title Number of Endmembers: 16 contains 16 objects of type line.

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

    abundanceMap = estimateAbundanceLS(dataCube,endmembers);

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

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

    Figure contains an axes object. The hidden axes object with title Abundance Maps for Endmembers contains an object of type image.

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

    hcube = imhypercube("jasperRidge2_R198.hdr");

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

    endmembers = nfindr(hcube,6);

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

    datacube = gather(hcube);
    abundanceMap = estimateAbundanceLS(datacube,endmembers,Method="fcls");

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

    rgbImg = colorize(hcube,Method="rgb");

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

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

    Figure contains an axes object. The axes object with title RGB Image of Data Cube contains an object of type image.

    エンドメンバー スペクトルの存在量マップを表示します。存在量マップの順序は入力引数 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 contains an axes object. The hidden axes object with title Abundance Map for Endmember 1 | Abundance Map for Endmember 2 | Abundance Map for Endmember 3 contains an object of type image.

    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)

    Figure contains an axes object. The hidden axes object with title Abundance Map for Endmember 4 | Abundance Map for Endmember 5 | Abundance Map for Endmember 6 contains an object of type image.

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。サイズが M x N x C のハイパースペクトル データ キューブを表す 3 次元数値配列または hypercube オブジェクトとして指定します。ハイパースペクトル データ キューブは実数で非スパースでなければなりません。

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

    エンドメンバー シグネチャ。サイズが CP 列の行列として返されます。ここで、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 で導入