Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ppi

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

    説明

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

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

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

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

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

    メモ

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

    すべて折りたたむ

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

    hcube = hypercube('paviaU.hdr');

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

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

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

    endmembers = ppi(hcube.DataCube,numEndmembers);

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

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

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

    hcube = hypercube('paviaU.hdr');

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

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

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

    endmembers = ppi(hcube.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)]});

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。3 次元数値配列または hypercube オブジェクトとして指定します。入力が hypercube オブジェクトの場合、関数はその DataCube プロパティからハイパースペクトル データ キューブを読み取ります。

    ハイパースペクトル データはサイズが M x N x 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

    名前と値のペアの引数

    オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

    例: ppi(inputData,7,'NumVectors',100,'Method','None')

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

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

    次元削減方法。'ReductionMethod' と、'MNF''PCA'、または 'None' のコンマ区切りのペアとして指定します。

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

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

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

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

    データ型: char | string

    出力引数

    すべて折りたたむ

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

    データ型: 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 で導入