Main Content

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

anomalyRX

Reed-Xiaoli 検出器を使用した異常の検出

R2020a 以降

    説明

    rxScore = anomalyRX(inputData) は Reed-Xiaoli (RX) 検出器を使用して、ハイパースペクトル データ内の異常ピクセルを検出します。RX 検出器は、ピクセルと背景の間のマハラノビス距離として、各ピクセルのスコアを計算します。スコアが高いほど、異常の可能性が高いことを示します。背景は、データ キューブのスペクトル平均および共分散により特徴付けられます。スコアの計算と異常の検出の詳細については、アルゴリズムを参照してください。

    メモ

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

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

    すべて折りたたむ

    ハイパースペクトル データ キューブ内の各ピクセルの RX スコアを計算して、ハイパースペクトル データ内の異常ピクセルを検出します。次に、RX スコア値の累積確率分布を使用して、真の異常ピクセルを検出するためのしきい値を計算します。

    異常ピクセルを含むハイパースペクトル データをワークスペースに読み取ります。

    hcube = hypercube('indian_pines.dat');

    RX 検出器を使用して、入力ハイパースペクトル データ内の異常ピクセルを見つけます。検出器は均一領域内で強度差が大きいピクセルを検索します。

    rxScore = anomalyRX(hcube);

    範囲 [0, 255] に再スケーリングして、RX スコア値のダイナミック レンジを小さくします。

    rxScore = im2uint8(rescale(rxScore));

    RX スコア マップを表示します。RX スコアの高いピクセルは異常ピクセルの可能性があります。

    figure
    imagesc(rxScore)
    colorbar

    RX スコア値の累積確率分布を計算してプロットします。

    count = imhist(rxScore);
    pdf = count/prod(size(rxScore,[1 2]));
    cdf = cumsum(pdf(:));
    figure
    plot(cdf)
    xlabel('RX Score')
    ylabel('Cumulative Probability Values')

    信頼係数値を 0.998 に設定します。信頼係数よりも大きな累積確率分布値を持つ最初の RX スコアをしきい値として選択します。このしきい値は、RX スコアがこの値を超えるピクセルは 99.8% の信頼度で異常であることを表します。

    confCoefficient = 0.998;
    rxThreshold = find(cdf > confCoefficient,1);

    しきい値処理を適用して、計算されたしきい値を超える RX スコアを持つ異常ピクセルを検出します。結果はバイナリ イメージであり、異常ピクセルには強度値 1、その他のピクセルには 0 が割り当てられます。

    bw = rxScore > rxThreshold;

    関数 colorize を使用して、データ キューブの RGB バージョンを導出します。RGB イメージに異常ピクセルのバイナリ イメージを重ね合わせます。

    rgbImg  = colorize(hcube,'Method','rgb');
    B = imoverlay(rgbImg,bw);

    バイナリ イメージおよび重ね合わせたイメージを両方とも表示します。

    fig = figure('Position',[0 0 800 400]);
    axes1 = axes('Parent',fig,'Position',[0 0.1 0.5 0.8]);
    imagesc(bw,'Parent',axes1);
    title('Detected Anomalous Pixels')
    axis off
    colormap gray
    axes2 = axes('Parent',fig,'Position',[0.5 0.1 0.5 0.8]);
    imagesc(B,'Parent',axes2)
    title('Overlaid Image');
    axis off  

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。3 次元数値配列または hypercube オブジェクトとして指定します。入力がサイズ M x N x C の 3 次元数値配列の場合、関数はそれを M x N ピクセルでスペクトル バンドが C のハイパースペクトル データ キューブとして読み取り、RX スコアを計算します。入力が hypercube オブジェクトの場合、関数は DataCube プロパティに格納されたデータ キューブを読み取り、RX スコアを計算します。ハイパースペクトル データ キューブは実数で非スパースでなければなりません。

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

    出力引数

    すべて折りたたむ

    ハイパースペクトル データ キューブ内の各ピクセルの出力 RX スコア。入力データの空間次元と同じく、サイズ M x N の行列として返されます。

    データ型: double

    アルゴリズム

    各ピクセルの RX スコアは次のように計算されます。

    DRX=(rμC)TΣC1(rμC)

    r はテスト対象のピクセルであり、μC および ΣC はそれぞれ、スペクトル平均および共分散です。異常ピクセルは一般的に高い RX スコアを持ちす。

    RX スコアの累積確率分布からしきい値を推定して、異常ピクセルの検出をさらに調整できます。RX 検出器を使用したハイパースペクトル データ内の異常ピクセルの検出の例を参照してください。

    参照

    [1] Reed, I.S., and X. Yu. “Adaptive Multiple-Band CFAR Detection of an Optical Pattern with Unknown Spectral Distribution.” IEEE Transactions on Acoustics, Speech, and Signal Processing 38, no. 10 (October 1990): 1760–70. https://doi.org/10.1109/29.60107.

    [2] Chein-I Chang and Shao-Shan Chiang. “Anomaly Detection and Classification for Hyperspectral Imagery.” IEEE Transactions on Geoscience and Remote Sensing 40, no. 6 (June 2002): 1314–25. https://doi.org/10.1109/TGRS.2002.800280.

    バージョン履歴

    R2020a で導入