Main Content

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

fippi

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

R2020a 以降

    説明

    endmembers = fippi(inputData,numEndmembers) は、Fast Iterative Pixel Purity Index (FIPPI) アルゴリズムを使用してハイパースペクトル データ inputData からエンドメンバー シグネチャを抽出します。numEndmembers は FIPPI アルゴリズムを使用して抽出するエンドメンバー シグネチャの数です。FIPPI 法の詳細については、アルゴリズムを参照してください。

    endmembers = fippi(inputData,numEndmembers,'ReductionMethod',method) はさらに、エンドメンバーの計算前に使用される次元削減方法を選択するためのオプションを指定します。

    メモ

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

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

    すべて折りたたむ

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

    hcube = hypercube('paviaU.hdr');

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

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

    Fast Iterative Pixel Purity Index (FIPPI) 法を使用してエンドメンバーを計算します。既定では、関数 fippi は最大ノイズ フラクション (MNF) 変換を使用して前処理を行います。

    endmembers = fippi(hcube.DataCube,numEndmembers);

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

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

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

    hcube = hypercube('paviaU.hdr');

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

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

    Fast Iterative Pixel Purity Index (FIPPI) 法を使用してエンドメンバーを計算します。次元削減方法として主成分分析 (PCA) を選択して前処理を行います。

    endmembers = fippi(hcube.DataCube,numEndmembers,'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 は入力ハイパースペクトル データ内のスペクトル バンドの数です。関数 countEndmembersHFC を使用して、入力データ内のスペクトルが特徴的なエンドメンバーの数を求めることができます。

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

    次元削減方法。'ReductionMethod' と、'MNF' または 'PCA' のいずれかで構成されるコンマ区切りのペアとして指定します。

    次の値を指定してください。

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

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

    関数は削減されたデータからエンドメンバーを計算します。

    データ型: char | string

    出力引数

    すべて折りたたむ

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

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

    アルゴリズム

    FIPPI は、各反復の後にエンドメンバーにより適した候補を繰り返し選択する反復手法です。Pixel-Purity Index (PPI) 手法とは異なり、FIPPI 法では自動ターゲット生成処理 (ATGP) を使用してスキュアーの初期セットを選択します [1]。その結果、アルゴリズムの収束がより高速になり、エンドメンバーごとに一意のピクセルが生成されます。FIPPI 手法に含まれる手順をまとめると以下のとおりです。

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

    2. ATGP 法を使用してエンドメンバーの初期セットを求めます。エンドメンバーの初期セットは、入力データの投影先スキュアー {skewerj(1)}j=1p のセットを構成します。

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

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

    5. ピクセル スペクトルごとの PPI カウントを求め、エンドメンバーとして最大 PPI カウントを持つサンプル ベクトルのセット {rk} を特定します。

    6. 新しいエンドメンバーのセットとスキュアーの初期セットを組み合わせて、新しいスキュアーのセットを生成します。

      {skewerj(2)}={rk(1)}{skewerj(1)}

    7. 反復 2 では、すべてのサンプル ベクトルを新しいスキュアーのセットに投影し、新しいエンドメンバーのセットを特定します。次に、次の反復用の新しいスキュアーのセット {skewerj(3)} を生成します。

    8. 2 回の連続する反復で生成されたスキュアーのセットが同じになった場合、反復が停止します。このスキュアーの最終セットは入力データのエンドメンバーです。

      {skewerj(n+1)}={skewerj(n)}

    参照

    [1] Chang, C.-I., and A. Plaza. “A Fast Iterative Algorithm for Implementation of Pixel Purity Index.” IEEE Geoscience and Remote Sensing Letters 3, no. 1 (January 2006): 63–67. https://doi.org/10.1109/LGRS.2005.856701.

    バージョン履歴

    R2020a で導入