改进的快速迭代纯像素指数提取端元特征
FIPPI算法简介
改进的快速迭代纯像素指数(FIPPI)算法是一种从高光谱遥感数据中提取端元谱签的有效方法。它是基于纯像素指数(PPI)算法的迭代改进版本,旨在通过合理的终止条件和精心设计的迭代规则,提高计算效率并获得更好的端元估计结果。
算法数学原理
降维
在FIPPI算法中,首先对原始高维数据立方体进行降维,以降低计算复杂度。常用的降维方法有:
- 主成分分析(PCA):将高维数据投影到主成分空间,保留主要信息。
- 最大噪声分数变换(MNF):根据图像质量对分量进行排序,保留高质量分量。
对于原始数据矩阵 \(\boldsymbol{X} \in \mathbb{R}^{m \times n}\),经过降维后得到 \(\boldsymbol{X}^{*} \in \mathbb{R}^{m \times p}\),其中 \(p < n\)。
自动目标生成过程(ATGP)
ATGP算法用于根据正交子空间投影估计初始端元集合。给定降维后的数据 \(\boldsymbol{X}^{*}\),包含 \(p\) 个特征向量,ATGP算法如下:
- 找到第一个端元向量索引 \(i_1\),使 \(\sum_{j=1}^{p} (\boldsymbol{x}_j^*)^2\) 最大,即 \(\boldsymbol{u}_1 = \boldsymbol{x}_{i_1}^*\)。
- 对于第 \(k(k \geq 2)\) 个端元向量,求解: \[\boldsymbol{u}_k = \arg\max_{\boldsymbol{x}_j^*} \left\|\left(\boldsymbol{I}_p - \boldsymbol{U}_{k-1}\boldsymbol{U}_{k-1}^+\right)\boldsymbol{x}_j^*\right\|^2\] 其中 \(\boldsymbol{U}_{k-1} = \begin{bmatrix}\boldsymbol{u}_1 & \boldsymbol{u}_2 & \cdots & \boldsymbol{u}_{k-1}\end{bmatrix}\), \(\boldsymbol{U}_{k-1}^+\) 为 \(\boldsymbol{U}_{k-1}\) 的伪逆。
算法重复上述过程直至获得 \(p\) 个初始端元向量。
FIPPI迭代规则
使用ATGP算法获得初始端元集合 \(\boldsymbol{U} \in \mathbb{R}^{p \times p}\) 后,FIPPI算法按照如下迭代规则进行优化:
- 将降维数据投影到当前端元空间: \(\boldsymbol{Y} = \boldsymbol{U}^T\boldsymbol{X}^*\)
- 对每个样本,找到其在投影空间中的最大绝对投影值及其对应的样本索引 \(i_j\): \[i_j = \arg\max_{1 \leq i \leq m} \left|\boldsymbol{y}_i\right|\]
- 构建极值集合 \(\boldsymbol{X}^{ext} = \left\{\boldsymbol{x}_{i_j}^*\right\}_{j=1}^q\),其中 \(q\) 为极值数量。
- 检查终止条件: 如果 \(\boldsymbol{X}^{ext} \subseteq \boldsymbol{U}\),则终止迭代;否则将 \(\boldsymbol{X}^{ext}\) 中不在 \(\boldsymbol{U}\) 的向量添加到 \(\boldsymbol{U}\),并返回步骤1继续迭代。
经过多次迭代,算法最终输出 \(\boldsymbol{U}\) 作为估计的端元集合。
MATLAB 实现
以下是FIPPI算法在MATLAB中的实现,详细说明请参考代码注释:
1 |
|
使用示例:
1 |
|
总结
FIPPI算法通过合理的数学模型和精心设计的迭代规则,有效地从高光谱遥感数据中提取端元谱签。它克服了传统PPI算法的一些缺陷,提高了计算效率和端元估计精度,是遥感端元提取的有力工具。
改进的快速迭代纯像素指数提取端元特征
http://jingmengzhiyue.top/2024/03/25/FIPPI/