高光谱成像(十一)异常检测算法 RX 与 KRX

上一篇中,我们简单了解了提取端元光谱的基础方法,从而可以应用在我们前面介绍过的 MFACE 等经典高光谱目标检测方法中。这类方法的共同特点在于:需要预先给定目标光谱 \(\mathbf{s}\) ,再通过不同的判别准则衡量像素与目标之间的匹配程度,从而实现目标检测,我们称之为目标检测算法

但在实际应用中,我们往往会遇到这样一种情况:

目标的光谱特征是未知的,甚至我们并不清楚"目标"具体是什么、用哪个端元?

例如,在复杂场景下进行伪装目标检测、植被异常识别或工业缺陷检测时,目标往往缺乏明确的先验信息。

此时之前那些基于已知光谱匹配的检测方法将难以发挥作用。

于是,在这种背景下,另一类算法思想被提出:

不再试图去匹配某个已知目标,而是直接从数据中寻找"异常"的像素。

这种检测算法通常基于数据分布的无监督分析 ,来找到"某个与众不同的地方"。这就是异常检测算法

这类方法的经典代表就是 RX(Reed--Xiaoli Detector)

1. RX 是什么?

RX 起始于 1990 年,在论文 Adaptive multiple-band CFAR detection of an optical pattern with unknown spectral distribution 中,首次从统计建模角度出发,提出了一种基于背景分布偏离程度的检测方法。

值得一提的是,这个方法最初是以"亚像素目标检测"为研究背景提出的。

但其通过衡量样本偏离背景统计分布的程度来进行判别 的核心思想却构成了后续高光谱异常检测方法的基础。

这一方法后来被统一称为 RX,是异常检测领域的经典模型之一。

2. 马氏距离:RX 的理论基础

RX 的两个核心理论基础一个是常见的假定背景服从高斯分布,另一个就是马氏距离。

马氏距离不同于欧式距离,它衡量的是:

一个样本点离一个分布中心的距离,同时考虑各维度之间的相关性。

我们简单说明如下:

RX 在本质上,其实就是马氏距离在高光谱领域的应用。

3. RX 的算法过程

RX 不依赖任何已知目标光谱,他假设背景像素服从多元高斯分布,如果某个像素如果偏离背景分布较远,就可能是异常。

了解了马氏距离本身后,RX 的算法过程基本没有理解难度。

我们设高光谱图像每个像素的光谱向量为:

\[\mathbf{x} = [x_1, x_2, \dots, x_L]^T \]

假设背景像素服从多元高斯分布:

\[\mathbf{x}_b \sim \mathcal{N}(\boldsymbol{\mu}, \mathbf{\Sigma}) \]

  • \(\boldsymbol{\mu}\):背景均值向量。
  • \(\mathbf{\Sigma}\):背景协方差矩阵。

这里的背景可以是整幅图像,也可以是人工选择的局部窗口。

RX 检测器计算像素 \(\mathbf{x}\) 偏离背景的程度的公式如下:

\[\text{RX}(\mathbf{x}) = (\mathbf{x} - \boldsymbol{\mu})^T \mathbf{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu}) \]

显然,就是去除了开方的马氏距离,因为仅用于异常排序不必再增加计算量。

最终,用 RX 检测器扫描整幅图像:

  • 大的 RX 值代表像素偏离背景,更可能是异常。
  • 小的 RX 值代表像素与背景相似,更可能非异常。

这便是最基本的 RX 异常检测逻辑。

4. KRX(Kernel RX)

4.1 高斯分布和真实分布

在上面的介绍中,我们可以看到,RX 本质上是基于马氏距离 + 高斯分布假设 的一种异常检测方法。

这里存在一个关键前提:背景数据在原始空间中近似服从多元高斯分布(就是上面图中的椭球分布)。

但在实际高光谱数据中,这一假设往往并不成立。例如不同地物混合等噪声或复杂背景,数据分布往往不是简单椭球。

显然,这时的数据均值就不能再代表真实结构 ,在这些复杂结构中,有些点虽然离中心很远,但其实是正常分布,基础 RX 就会把其视作异常点。
最终,我们用一个椭球去拟合复杂分布,就会导致异常判断失真。

4.2 核方法

现在的问题是:数据的真实分布不符合我们的假设的高斯分布前提,也就无法合理应用基于高斯分布推导出的结论。

这时,一种直观的思路是:针对真实数据的分布特性进行建模,再据此推导新的检测方法。

但是,这种做法的扩展性极差,难道我们需要针对每一种可能的数据分布,都设计一套专门的检测算法吗?

显然,这并不是一种理想的解决方法。

于是,另一种思路被提出,即不去改变方法本身,而是改变数据的表达方式 。这正是核方法的核心思想:

通过非线性映射将原始数据映射到高维特征空间,使其在该空间中更接近高斯分布,从而可以继续应用基于高斯假设的检测方法。

这种"让山来找我"的数据处理方法,是统计学习中处理非线性与非高斯问题的一种经典策略。

在展开核方法前,需要强调的一点是:核方法并不能保证数据在映射后严格服从高斯分布,其作用在于通过非线性映射改变数据的几何结构,使其在特征空间中更易于被简单统计模型刻画,从而提升 RX 检测的有效性。

我们举个例子来说明:

以这个例子来看,核方法的关键就在于图中所说的"某种映射"。

那么先顺着这个思路来,我们设一个映射函数:

\[\phi(\mathbf{x}) \]

将原始数据映射到高维空间,则 RX 可以写作:

\[\text{RX}(\mathbf{x}) = (\phi(\mathbf{x}) - \boldsymbol{\mu}\phi)^T \mathbf{\Sigma}\phi^{-1} (\phi(\mathbf{x}) - \boldsymbol{\mu}_\phi) \]

但是这样就有了新的问题;升到多少维才合适?相应的计算量呢?

为了解决这个问题,核方法并不是去显式地设计高维映射,而是定义一个核函数,直接计算映射后的内积结果

\[K(\mathbf{x}, \mathbf{y}) = \langle \phi(\mathbf{x}), \phi(\mathbf{y}) \rangle \]

再举个例子来说明这段逻辑:

\[\phi(x) = \begin{bmatrix} x^2 \\ \sqrt{2}x \\ 1 \end{bmatrix} \]

显然,这是一个从 1 维到 3 维 的映射。

继续假设两个输入:

\[x_i, x_j \]

它们在高维空间的内积是:

\[\phi(x_i)^T \phi(x_j) = x_i^2 x_j^2 + 2 x_i x_j + 1 \]

这个结果其实是可以直接拿来用的

\[x_i^2 x_j^2 + 2 x_i x_j + 1=(x_i x_j + 1)^2 \]

所以我们直接定义:

\[K(x_i, x_j) = (x_i x_j + 1)^2 \]

因此,核函数不是在"近似映射",而是在"直接给出映射后的计算结果"。

我们通过核函数来避免了高维甚至是无限维的映射函数设计和相应的计算量。

有了核函数之后,我们就可以把 RX 的计算迁移到核空间中,而无需显式构造\(\phi(\mathbf{x})\)。

4.3 KRX

具体应用到 RX 中,我们使用的是 RBF 核函数

\[K(\mathbf{x}, \mathbf{y}) = \exp\left(-\frac{|\mathbf{x}-\mathbf{y}|^2}{2\sigma^2}\right) \]

这里的 \(\sigma\) 是一个我们手动设置的超参数 ,常用所有样本间欧式距离的中位数,\(2\sigma^2\) 直接来自高斯分布指数的分母。

从语义上来进行理解,其逻辑是这样的:

  • \(\sigma\) 越大,样本间距离差异被缩小,远距离点之间的相似度仍然较高。
  • \(\sigma\) 越小,样本间距离差异被放大,只有非常近的点才会被认为相似。

总的来说,RBF 核函数把样本"映射到一个无限维、局部敏感的特征空间",既能保持相似样本关系,又能让异常点自然突出,因此在 KRX 和很多核方法中被广泛使用。

最终,我们以此来构建 KRX 算法过程:

首先,对背景像素 \({\mathbf{x}_1, \dots, \mathbf{x}_N}\) 构造核矩阵

\[\mathbf{K}_{ij} = K(\mathbf{x}_i, \mathbf{x}_j) \]

这一步其实是在对所有训练样本两两计算其在高维空间里的内积,它表示背景结构,是高维协方差矩阵。

然后,对单个像素 \(\mathbf{x}\) 构造核向量

\[\mathbf{k}_x = \begin{bmatrix} K(\mathbf{x}, \mathbf{x}_1) \\ \vdots \\ K(\mathbf{x}, \mathbf{x}_N) \end{bmatrix} \]

你会发现,核向量中的每一个元素都代表这个待测像素和某个背景像素在高维特征空间中的内积,是待测样本在背景结构上的投影。

最终,KRX 的统计量可以写为:

\[\text{KRX}(\mathbf{x}) = \mathbf{k}_x^T \mathbf{K}^{-1} \mathbf{k}_x \]

这部分的逻辑其实就和基础 RX 比较相似了。
\(\mathbf{K}^{-1}\) 相当于高维协方差的逆 ,同样的道理,它现在是一个标准化背景结构。
于是,最终的计算结果就可以表示待测像素在标准背景下的"偏离程度"。

KRX 的算法逻辑到这里就基本结束,相比 RX 你可能觉得它少了个步骤:中心化

没错。理论上应对核矩阵 \(\mathbf{K}\) 和核向量 \(\mathbf{k}_x\) 进行中心化,以实现高维空间中数据的均值对齐:

\[\mathbf{K}_c = \mathbf{K} - \mathbf{1}\mathbf{K} - \mathbf{K}\mathbf{1} + \mathbf{1}\mathbf{K}\mathbf{1},\quad \mathbf{k}_x^c = \mathbf{k}_x - \frac{1}{N}\mathbf{K1} - \frac{1}{N}\mathbf{1}^T \mathbf{k}_x + \frac{1}{N^2}\mathbf{1}^T \mathbf{K1} \]

但在实际应用中,这一步常常被省略,主要原因是 RBF 核本身已经通过欧氏距离计算了差异,在一定程度上强调了样本间相似性,使得偏离度的区分性得以保留。

因此,即便不显式中心化,KRX 的核心异常检测效果仍然保留,实用性和判别能力通常不受明显影响。

不过,不受明显影响不是完全没有影响,仍然建议加入中心化步骤。

5. 高光谱异常检测的现代技术

高光谱异常检测从最基础的 RX 算法发展到现在,已经出现了多种技术路线,可按以下维度划分:

思路方向 主要特点 代表技术
基于统计的经典方法 假设背景服从多元高斯分布 RX、ACM、变体 MF
核方法 / 非线性方法 将数据映射到高维空间,捕捉非线性关系 KRX、核 PCA、核 ACE
稀疏表示 / 重建误差方法 利用稀疏编码或字典学习重建背景 Lasso RX、Sparse Representation AD
机器学习 / 深度学习方法 数据驱动,自动学习特征 自编码器(AE)、变分自编码器(VAE)、卷积神经网络(CNN)、图神经网络(GNN)
基于邻域 / 距离方法 利用局部像素或光谱相似性度量异常 LOF、KNN-based AD、Local RX
统计 + 几何 / 端元结合方法 结合端元抽取和统计建模 N-FINDR + RX、VCA + RX

总结来说,高光谱异常检测方法是高光谱分析中的关键工具,用于识别像素中偏离背景统计结构的异常光谱,广泛应用于地表监测、目标检测、环境监控和智能遥感分析等领域。

相关推荐
wáng bēn2 小时前
2025 AI 打卡 Day5:Seaborn 数据可视化基础(Matplotlib 升级版 + Titanic 真实业务全案例 + 完整参数调优)
人工智能·机器学习·信息可视化·matplotlib·seaborn
纤纡.3 小时前
Python 实战:基于朴素贝叶斯的苏宁易购评价情感分析
开发语言·python·机器学习
Alsian3 小时前
Day45 神经网络调参
深度学习·神经网络·机器学习
Yeats_Liao4 小时前
OpenClaw(二):配置教程
大数据·网络·人工智能·深度学习·机器学习
ComputerInBook5 小时前
几何学基本概念——超平面(hyperplane)
算法·机器学习·平面·几何学
郑同学zxc6 小时前
机器学习18-tensorflow4.1
人工智能·机器学习
databook6 小时前
从直觉到算法:贝叶斯思维的技术底层与工程实现
人工智能·python·机器学习
阿钱真强道6 小时前
13 回归分析-认识一元线性回归
机器学习·数据挖掘·回归分析·线性回归·sklearn·入门·python实战
油泼辣子多加7 小时前
【PY】数据处理函数
python·深度学习·机器学习·数据分析