メインコンテンツ

anomalyRX

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

    説明

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

    メモ

    この関数には、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 が必要です。

    すべて折りたたむ

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

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

    hcube = imhypercube("indian_pines.dat");

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

    rxScore = anomalyRX(hcube);

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

    rxScore = im2uint8(rescale(rxScore));

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

    figure
    imagesc(rxScore)
    colorbar

    Figure contains an axes object. The axes object contains an object of type image.

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

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

    Figure contains an axes object. The axes object with xlabel RX Score, ylabel Cumulative Probability Values contains an object of type line.

    信頼係数値を 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  

    Figure contains 2 axes objects. Hidden axes object 1 with title Detected Anomalous Pixels contains an object of type image. Hidden axes object 2 with title Overlaid Image contains an object of type image.

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。3 次元数値配列または hypercube オブジェクトとして指定します。入力がサイズ M x N x C の 3 次元数値配列の場合、関数はそれを M x N ピクセルでスペクトル バンドが C のハイパースペクトル データ キューブとして読み取り、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 で導入