Main Content

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

ns3

正規化スペクトル類似度スコアの評価

    説明

    score = ns3(inputData,refSpectrum) は正規化スペクトル類似度スコア (NS3) 法を使用して、ハイパースペクトル データ inputData 内の各ピクセルのスペクトルと、指定した基準スペクトル refSpectrum の間のスペクトルの類似度を評価します。この構文を使用して、ハイパースペクトル データ キューブ内で異なる領域または物質を特定します。NS3 法の詳細については、詳細を参照してください。

    score = ns3(testSpectrum,refSpectrum) は NS3 法を使用して、指定したテスト スペクトル testSpectrum と基準スペクトル refSpectrum の間のスペクトルの類似度を評価します。この構文を使用して、未知の物質のスペクトル シグネチャを基準スペクトルと比較したり、2 つのスペクトル シグネチャ間のスペクトルのばらつきを計算したりします。

    メモ

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

    すべて折りたたむ

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

    hcube = hypercube('jasperRidge2_R198.hdr');

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

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

    N-FINDR アルゴリズムを使用してデータ キューブからエンドメンバーのスペクトル シグネチャを抽出します。

    endmembers = nfindr(hcube,numEndmembers);

    抽出したエンドメンバーのスペクトル シグネチャをプロットします。

    figure
    plot(endmembers)
    xlabel('Bands')
    ylabel('Reflectance')
    legend('Location','Bestoutside')

    各エンドメンバーとデータ キューブ内の各ピクセルのスペクトルの間で NS3 距離を計算します。

    score = zeros(size(hcube.DataCube,1),size(hcube.DataCube,2),numEndmembers);
    for i = 1:numEndmembers
        score(:,:,i) = ns3(hcube,endmembers(:,i));
    end

    すべてのエンドメンバーについて、ピクセル スペクトルごとに取得した距離スコアから最小スコア値を計算します。それぞれの最小スコアのインデックスは、ピクセル スペクトルが最大の類似度を示すエンドメンバー スペクトルを識別します。スコア行列内の空間位置 (x, y) におけるインデックス値 n は、データ キューブ内の空間位置 (x, y) におけるピクセルのスペクトル シグネチャが、n 番目のエンドメンバーのスペクトル シグネチャに最適に一致することを示しています。

    [~,matchingIdx] = min(score,[],3);

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

    rgbImg = colorize(hcube,'Method','rgb','ContrastStretching',true);

    RGB イメージおよび一致したインデックス値の行列の両方を表示します。

    figure('Position',[0 0 800 400])
    subplot('Position',[0 0.1 0.4 0.8])
    imagesc(rgbImg)
    axis off
    title('RGB Image of Hyperspectral Data')
    subplot('Position',[0.45 0.1 0.45 0.8])
    imagesc(matchingIdx)
    axis off
    title('Indices of Matching Endmembers')
    colorbar

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

    hcube = hypercube('jasperRidge2_R198.hdr');

    ハイパースペクトル データの最初の 10 個のエンドメンバーを求めます。

    numEndmembers = 10;
    endmembers = nfindr(hcube,numEndmembers);

    最初のエンドメンバーを基準スペクトル、残りのエンドメンバーをテスト スペクトルと見なします。

    refSpectrum = endmembers(:,1);
    testSpectra = endmembers(:,2:end);

    基準スペクトルおよびその他のエンドメンバー スペクトルをプロットします。

    figure
    plot(refSpectrum,'LineWidth',2)
    hold on
    plot(testSpectra)
    hold off
    label = cell(1,numEndmembers-1);
    label{1} = 'Reference';
    for itr = 1:numEndmembers-1
        label{itr+1} = ['endmember-' num2str(itr)];
    end
    xlabel('Bands')
    ylabel('Reflectances')
    legend(label,'Location','Bestoutside')

    基準スペクトルと テスト スペクトル間の NS3 スコアを計算します。

    score = zeros(1,numEndmembers-1);
    for itr = 1:numEndmembers-1
        score(itr) = ns3(testSpectra(:,itr),refSpectrum);
    end

    基準スペクトルに対して類似度が最大 (距離が最小) となるテスト スペクトルを求めます。次に、基準スペクトルに対して類似度が最小 (距離が最大) となるテスト スペクトルを求めます。

    [minval,minidx] = min(score);
    maxMatch = testSpectra(:,minidx);
    [maxval,maxidx] = max(score);
    minMatch = testSpectra(:,maxidx);

    基準スペクトル、類似度が最大のテスト スペクトル、および最小のテスト スペクトルをプロットします。最小スコア値を持つテスト スペクトルは、基準エンドメンバーに対して最大の類似度を示します。一方、最大スコア値を持つテスト スペクトルはスペクトルのばらつきが最も大きくなります。

    figure
    plot(refSpectrum,'LineWidth',2)
    hold on
    plot(maxMatch,'k')
    plot(minMatch,'r')
    xlabel('Band Number')
    ylabel('Data Values')
    legend('Reference spectrum','Maximum match test spectrum','Minimum match test spectrum',...
           'Location','Southoutside')
    title('Similarity Between Spectra')
    text(40,500,['Max score: ' num2str(maxval)],'Color','r')
    text(120,1900,['Min score: ' num2str(minval)],'Color','k')

    入力引数

    すべて折りたたむ

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

    テスト スペクトル。C 要素ベクトルとして指定します。テスト スペクトルは未知の領域または物質のスペクトル シグネチャです。

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

    基準スペクトル。C 要素ベクトルとして指定します。基準スペクトルは既知の領域または物質のスペクトル シグネチャです。この関数はテスト スペクトルとこれらの値を照合します。

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

    出力引数

    すべて折りたたむ

    NS3 スコア。スカラーまたは行列として返されます。出力は以下のようになります。

    • スカラー — 入力引数 testSpectrum を指定した場合。関数はテスト スペクトル シグネチャと基準スペクトル シグネチャを照合し、スカラー値を返します。テスト スペクトルと基準スペクトルはともに同じ長さのベクトルでなければなりません。

    • 行列 — 入力引数 inputData を指定した場合。関数はデータ キューブ内の各ピクセルのスペクトル シグネチャと基準スペクトル シグネチャを照合し、行列を返します。データ キューブのサイズが M × N × C で、基準スペクトルが長さ C のベクトルである場合、出力行列のサイズは M 行 N 列です。

    NS3 スコアが小さくなるほど、テスト シグネチャと基準シグネチャが強く一致することを示します。

    データ型: single | double

    詳細

    すべて折りたたむ

    正規化スペクトル類似度スコア (Normalized Spectral Similarity Score、NS3)

    NS3 法では、2 つのスペクトル間のユークリッド距離と SAM 距離に基づいてスペクトルの類似度を計算します。r および t をそれぞれ基準スペクトルとテスト スペクトルとします。2 つのスペクトル間のユークリッド距離を計算します。

    AEuclidean=1Ci=1C(tiri)2

    次に、SAM 値 α を計算します。

    α=cos1(i=1Ctirii=1Cti2i=1Cri2).

    最後に、NS3 スコアを計算します。

    NS3=AEuclidean2+(1cos(α))2

    参照

    [1] Nidamanuri, Rama Rao, and Bernd Zbell. “Normalized Spectral Similarity Score (NS3) as an Efficient Spectral Library Searching Method for Hyperspectral Image Classification.” IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing 4, no. 1 (March 2011): 226–40. https://doi.org/10.1109/JSTARS.2010.2086435.

    バージョン履歴

    R2020b で導入