メインコンテンツ

ppi

Pixel Purity Index を使用したエンドメンバー シグネチャの抽出

    説明

    endmembers = ppi(inputData,numEndmembers) は、Pixel Purity Index (PPI) アルゴリズムを使用してハイパースペクトル データ inputData からエンドメンバー シグネチャを抽出します。numEndmembers は PPI アルゴリズムを使用して抽出するエンドメンバー シグネチャの数です。

    この関数は、ランダムに生成された単位ベクトルのセットにハイパースペクトル データを投影します。単位ベクトルの方向に極端な値を持つピクセルはピュア ピクセルと見なされ、それらのピクセルがエンドメンバーを構成します。入力データのスペクトル バンド全体にまたがるエンドメンバーの値がエンドメンバー シグネチャを構成します。詳細については、アルゴリズムを参照してください。

    endmembers = ppi(inputData,numEndmembers,Name=Value) は、前の構文の入力引数に加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。この構文を使用して次のオプションを設定します。

    • 投影に使用する、ランダムに生成された単位ベクトルの数

    • 削減されたハイパースペクトル データから抽出するエンドメンバー シグネチャ

    メモ

    この関数には、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("paviaU.hdr");

    関数 countEndmembersHFC を使用して、ハイパースペクトル データ キューブ内に存在する、スペクトル的に異なるエンドメンバーの数を求めます。

    numEndmembers = countEndmembersHFC(hcube,PFA=10^-7);

    Pixel Purity Index (PPI) 法を使用してエンドメンバーを計算します。既定では、関数 ppi は最大ノイズ フラクション (MNF) 変換を使用して前処理を行います。投影に使用する既定のスキュアーの数は 104ten raised to power of four です。

    datacube = gather(hcube);
    endmembers = ppi(datacube,numEndmembers);

    ハイパースペクトル データのエンドメンバーをプロットします。

    figure
    plot(endmembers)
    xlabel("Band Number")
    ylabel("Pixel Values")
    title({"Endmembers Spectra","Number of Endmembers = "+num2str(numEndmembers)});
    ylim([0 9000])

    Figure contains an axes object. The axes object with title Endmembers Spectra Number of Endmembers = 8, xlabel Band Number, ylabel Pixel Values contains 8 objects of type line.

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

    hcube = imhypercube("paviaU.hdr");

    関数 countEndmembersHFC を使用して、ハイパースペクトル データ キューブ内に存在する、スペクトル的に異なるエンドメンバーの数を求めます。

    numEndmembers = countEndmembersHFC(hcube,PFA=10^-7);

    Pixel Purity Index (PPI) 法を使用してエンドメンバーを計算します。投影に使用する単位ベクトルの数を 100 に指定します。また、次元削減に主成分分析 (PCA) 法を選択します。

    datacube = gather(hcube);
    endmembers = ppi(datacube,numEndmembers,NumVectors=100,ReductionMethod="PCA");

    ハイパースペクトル データのエンドメンバーをプロットします。

    figure
    plot(endmembers)
    xlabel("Band Number")
    ylabel("Pixel Values")
    ylim([0 9000])
    title({"Endmembers Spectra","Number of Endmembers = "+num2str(numEndmembers)});

    Figure contains an axes object. The axes object with title Endmembers Spectra Number of Endmembers = 8, xlabel Band Number, ylabel Pixel Values contains 8 objects of type line.

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。3 次元数値配列または hypercube オブジェクトとして指定します。

    ハイパースペクトル データ キューブはサイズが M×N×C の数値配列です。M および N はそれぞれハイパースペクトル データ内の行と列の数です。C はハイパースペクトル データ内のスペクトル バンドの数です。

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

    エンドメンバー数。正のスカラー整数として指定します。この値は [1 C] の範囲になければなりません。C は入力ハイパースペクトル データ内のスペクトル バンドの数です。

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

    名前と値の引数

    すべて折りたたむ

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

    例: ppi(inputData,7,NumVectors=100,ReductionMethod="None")

    ランダムな単位ベクトルの数。正のスカラー整数として指定します。抽出したエンドメンバーの精度は、投影に使用するベクトルの数とともに向上します。ただし、ベクトルの数が増えると計算量も増大します。

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

    次元削減方法。"MNF""PCA"、または "None" として指定します。

    値を "MNF" または "PCA" として指定すると、関数はまず指定された方法を使用して入力データのスペクトル次元を削減します。その後、削減されたデータからエンドメンバー シグネチャを計算します。

    • "MNF" — 最大ノイズ フラクション (MNF) 法を使用して次元削減を実行します。

    • "PCA" — 主成分分析 (PCA) 法を使用して次元削減を実行します。

    値を "None" に指定すると、関数は次元削減を実行しません。エンドメンバー シグネチャは入力データから直接抽出されます。

    データ型: char | string

    出力引数

    すべて折りたたむ

    エンドメンバー シグネチャ。サイズが CP 列で入力ハイパースペクトル データと同じデータ型の行列として返されます。

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

    アルゴリズム

    Pixel Purity Index (PPI) 法では、"スキュアー" と呼ばれる、ランダムに生成された単位ベクトルのセットに対してハイパースペクトル データ値の直交投影を計算します。その後、各データ値の PPI カウントを計算します。PPI カウントは、データ値がこれらのスキュアーに投影された場合に極値点としての結果が得られる回数です。想定より多い PPI カウント数のデータ値は、ハイパースペクトル データのエンドメンバーを構成します。PPI は非反復法であり、含まれる手順をまとめると以下のとおりです。

    1. 主成分バンドを計算し、MNF または PCA を使用して入力データの次元を削減します。抽出する主成分バンドの数は、抽出するエンドメンバーの数と等しく設定されます。

    2. 入力データと同じ長さの k 個のスキュアーを生成します。

    3. r をピクセル スペクトルを表すサンプル ベクトルとします。次に、このサンプル ベクトルを各スキュアーに直交投影して極値を求めます。

    4. 各極値の場所を格納してその発生数をカウントします。この発生数を PPI カウントと呼びます。

    5. 入力データ キューブ内のピクセル スペクトルごとに PPI カウントを求めます。

    6. PPI カウントの降順でピクセル スペクトルを配置し、並べ替えたセット内にある最初の n 個のピクセル スペクトルをエンドメンバーとして特定します。選択するエンドメンバーの数は入力引数 numEndmembers で指定します。

    参照

    [1] J.W Boardman, F.A. Kruse and R.O. Green, "Mapping target signatures via partial unmixing of AVIRIS data.", Technical Report, California, USA, 1995.

    バージョン履歴

    R2020a で導入