高光谱异常检测算法系列
RX算法
介绍:RX算法作为HSI异常检测的基准算法,常被用于作为标准去衡量所提算法的检测精度;根据作用范围不同,其主要分为Global RX和Local RX两个版本。
RX主要表达式如下所示:
R
R
X
(
x
i
)
=
(
x
i
−
μ
)
T
C
−
1
(
x
i
−
μ
)
R_{RX}(x_i)=(x_i-μ)^TC^{-1}(x_i-μ)
RRX(xi)=(xi−μ)TC−1(xi−μ)
其中,μ和C分别代表着HSI的均值向量和协方差矩阵。
Matlab 代码部分
GRX code
function d_GRX_show = GRXfunc(data,groundtruth)
%% 数据大小信息赋值
[rows,cols,bands]=size(data);
X=reshape(data,rows*cols,bands);
%% RX算法部分
X_mean = mean(X);%计算每个波段的均值;
X = X - repmat(X_mean,rows*cols,1);
X=X';
M=rows*cols;
Sigma = (X * X')/(M);%计算矩阵的协方差
Sigma_inv = inv(Sigma);
for m = 1:M
D(m) = X(:, m)' * Sigma_inv * X(:, m); %RX表达式计算式
end
d_GRX_show=reshape(D,rows,cols);%得到异常图
%% 结果数据收集部分
d_GRX_show = (d_GRX_show-min(d_GRX_show(:)))/(max(d_GRX_show(:))-min(d_GRX_show(:)));%归一化处理
%% 显示结果
figure;
imshow(d_GRX_show);
colormap(jet);
[TPR,FPR,~] = roc(reshape(groundtruth,M,1)',reshape(d_GRX_show,M,1)');%计算ROC;
AUC = polyarea([0;sort(FPR','ascend');1;1],[0;sort(TPR','ascend');1;0]);%计算AUC;
figure;
plot(FPR,TPR,'-','LineWidth',1.5);
ylim([0,1]);
xlim([0,0.1]);
ylabel("Probability of detection");
xlabel("False alarm rate");
%%注意:计算ROC需要使用Matlab中的Deep Learning Toolbox插件
%%安装过程:主页——附加功能——搜索Deep Learning Toolbox——安装