Administrator
发布于 2026-09-09 / 0 阅读
0
0

反问题项目报告:高光谱图像处理

Q1:矩阵 \boldsymbol{A}\boldsymbol{X} 的尺寸

高光谱图像数据由一个三维矩阵 \boldsymbol{A} 编码,其维度为:

\boldsymbol{A} \in \mathbb{R}^{h \times w \times n_\lambda}

其中:

  • h 是图像的高度(像素数)
  • w 是图像的宽度(像素数)
  • n_\lambda 是波长数量(光谱通道数)

高光谱数据的结构是三维立方体 f(x, y, \lambda),其中 (x, y) 是空间坐标,\lambda 是波长(光谱维度)。沿空间维度切片得到单波长图像,沿光谱维度切片得到单像素的光谱曲线。这种数据结构使得我们既可以分析特定波长下的空间分布,也可以分析特定位置的光谱特征。

将三维矩阵展开为二维矩阵 \boldsymbol{X} 时,每个像素的光谱作为一行排列:

\boldsymbol{X} \in \mathbb{R}^{n_{pix} \times n_\lambda}

其中 n_{pix} = h \times w 是总像素数。

矩阵 \boldsymbol{X} 可以从两个角度理解:

  • 从信号处理角度看,每一行是一个像素的光谱信号,共 n_{pix} 个信号,每个信号有 n_\lambda 个采样点
  • 从几何角度看,每一行 x_i \in \mathbb{R}^{n_\lambda} 是高维空间中的一个点,n_{pix} 行对应 n_{pix} 个点构成的点云。

在实验代码中,我们对数据文件 Reslice_Stack_NAU2-60X-1.tif 进行加载,获得了矩阵的完整尺寸为: h = 249w = 696n_\lambda = 457

综上,对于本实验数据:

\boldsymbol{A} \in \mathbb{R}^{249 \times 696 \times 457}, \quad \boldsymbol{X} \in \mathbb{R}^{173304 \times 457}

从几何角度看,\boldsymbol{X} 可以理解为457维空间中173304个点构成的点云。

Q2:PCA降维及误差计算

主成分分析(PCA)通过奇异值分解(SVD)实现降维。对中心化后的数据矩阵 \boldsymbol{Z} 进行SVD分解:

\boldsymbol{Z} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T

其中 \boldsymbol{U}\boldsymbol{V} 满足正交性质

\boldsymbol{U}^T \boldsymbol{U} = \boldsymbol{I} \ \ \ \ \ \ \ \ \ \ \ \ \ \boldsymbol{V}^T \boldsymbol{V} = \boldsymbol{I}
  • 矩阵 \boldsymbol{V} 的列向量 v_1, v_2, \ldots 就是主成分方向
  • v_1:第一主方向(解释最大方差的方向)
  • v_2:第二主方向(与 v_1 正交,解释次大方差)

投影计算

对于第 i 个数据点 x_i(即 \boldsymbol{Z} 的第 i 行),投影到 v_1 上的坐标为

c_1(x_i) = x_i \cdot v_1 = \langle x_i, v_1 \rangle

c_1 就是 x_i 在第一主轴上的坐标。

降维表示

保留前 p 个主成分的降维数据表示为:

\boldsymbol{Z}_p = \boldsymbol{U}_p \boldsymbol{\Sigma}_p \boldsymbol{V}_p^T

其中 \boldsymbol{U}_p\boldsymbol{\Sigma}_p\boldsymbol{V}_p 分别是前 p 列/行的截断矩阵。PCA的目标是在高维空间 \mathbb{R}^{457} 中寻找一个低维子空间,使得所有数据点投影到该子空间后,投影误差最小。

确定保留多少个主成分的常用方法是分析奇异值的累积能量,即计算累积和占总和的比例。

重构误差(Frobenius范数):

E_p = \|\boldsymbol{Z} - \boldsymbol{Z}_p\|_F^2 = \sum_{i=p+1}^{r} \sigma_i^2

相对误差:

\varepsilon_p = \frac{E_p}{\|\boldsymbol{Z}\|_F^2} = \frac{\|\boldsymbol{Z} - \boldsymbol{Z}_p\|_F^2}{\|\boldsymbol{Z}\|_F^2} = \frac{\sum_{i=p+1}^{r} \sigma_i^2}{\sum_{i=1}^{r} \sigma_i^2} = 1 - \frac{\sum_{i=1}^{p} \sigma_i^2}{\sum_{i=1}^{r} \sigma_i^2}

这个比值表示丢失的信息比例

逐点误差:

对于点 x_i,设它与投影方向的夹角为 \theta_i

\cos^2 \theta_i = \frac{\|x_i^{proj}\|^2}{\|x_i\|^2}
  • \cos^2 \theta_i = 1:点完全在投影轴/平面上,无误差
  • \cos^2 \theta_i = 0:点与投影方向正交,完全丢失

图1:累积能量曲线

F10

前10个主成分的累积能量具体数据如下:

主成分数 p 累积能量比例
1 96.63%
2 99.37%
3 99.74%
4 99.84%
5 99.88%

p = 2, 3, 4 时的降维矩阵及误差结果如下:

p 降维矩阵 \boldsymbol{Z}_p 尺寸 累积能量 相对误差
2 728 \times 457 99.37% 0.63%
3 728 \times 457 99.74% 0.26%
4 728 \times 457 99.84% 0.16%

该图展示了PCA分析中前10个主成分的累积能量比例,可见,第一个主成分已经捕获了约96.6%的数据方差,绝大部分信息集中在前几个主成分中,这表明数据可以用少数几个主成分很好地近似原始数据。对于后续的NMF分解中我们选择 p = 3

图3:C_1 vs C_2 vs C_3 三维投影散点图

F12

该图将数据点投影到前三个主成分张成的三维空间中。三维视图清晰地展示了点云沿着一个主方向延伸,右上角的密集区域对应背景像素,而沿对角线向外延伸的稀疏点对应不同强度的荧光信号。三维投影保留了99.7%的数据方差,几乎完整地表征了原始457维数据的结构特征。

图4:\cos^2 矩阵可视化(k=4

通过计算 \cos^2 矩阵(投影坐标平方后按行归一化),可以分析各主成分对每个观测的贡献程度,辅助判断有效维度。

F13

图中每个像素位置的灰度值表示该像素的光谱向量投影到前4个主成分子空间后保留的能量比例:白色(值接近1)表示该像素被很好地表示,黑色(值接近0)表示表示质量较差。从图中可以看出,大部分区域呈现浅灰色或白色,说明前4个主成分已经能够很好地表示绝大多数像素的光谱信息。

Q3:\boldsymbol{H}\boldsymbol{S} 的尺寸

非负矩阵分解(NMF)将数据矩阵分解为:

\boldsymbol{X} = \boldsymbol{H} \boldsymbol{S}

其中:

  • \boldsymbol{X} \in \mathbb{R}^{n_{pix} \times n_\lambda}:观测数据矩阵
  • \boldsymbol{H} \in \mathbb{R}^{n_{pix} \times p}:丰度矩阵(混合系数矩阵)
  • \boldsymbol{S} \in \mathbb{R}^{p \times n_\lambda}:源矩阵(端元光谱矩阵)
  • p:源的数量

从高光谱解混合的角度理解,每个像素位置的光谱是一个混合信号。一个像素可能同时包含多种荧光标记物,观测到的光谱是各标记物光谱的加权叠加,权重反映各标记物在该像素的浓度。解混合的目标是从这些混合光谱中分离出源信号及其空间丰度图(混合系数)。

结合本实验ROI数据(n_{pix} = 728n_\lambda = 457):

p = 3 时:

\boldsymbol{H} \in \mathbb{R}^{728 \times 3}, \quad \boldsymbol{S} \in \mathbb{R}^{3 \times 457}

p = 4 时:

\boldsymbol{H} \in \mathbb{R}^{728 \times 4}, \quad \boldsymbol{S} \in \mathbb{R}^{4 \times 457}
  • \boldsymbol{S} 的每一行是一个纯净的源光谱,长度为457个波长点
  • \boldsymbol{H} 的每一行是对应像素中各源的丰度
  • \boldsymbol{H} 的每一列重塑为 26 \times 28 图像即为该源的丰度图像

Q4:证明ALS是下降算法

ALS(交替最小二乘法)的目标是最小化目标函数:

J(\boldsymbol{H}, \boldsymbol{S}) = \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2
  • \boldsymbol{H} \geq 0\boldsymbol{S} \geq 0

算法交替进行两步优化:

**步骤1:**固定 \boldsymbol{S}^{(k)},优化 \boldsymbol{H}

\boldsymbol{H}^{(k+1)} = \arg\min_{\boldsymbol{H} \geq 0} \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}^{(k)}\|_F^2

由于这是关于 \boldsymbol{H} 的凸优化问题(二次目标函数 + 凸约束),存在全局最优解。因为 \boldsymbol{H}^{(k+1)} 是最优解,而 \boldsymbol{H}^{(k)} 是可行解,所以:

J(\boldsymbol{H}^{(k+1)}, \boldsymbol{S}^{(k)}) \leq J(\boldsymbol{H}^{(k)}, \boldsymbol{S}^{(k)})

**步骤2:**固定 \boldsymbol{H}^{(k+1)},优化 \boldsymbol{S}

\boldsymbol{S}^{(k+1)} = \arg\min_{\boldsymbol{S} \geq 0} \|\boldsymbol{X} - \boldsymbol{H}^{(k+1)}\boldsymbol{S}\|_F^2

同理,这也是凸优化问题,因此:

J(\boldsymbol{H}^{(k+1)}, \boldsymbol{S}^{(k+1)}) \leq J(\boldsymbol{H}^{(k+1)}, \boldsymbol{S}^{(k)})

综合两步可得:

J(\boldsymbol{H}^{(k+1)}, \boldsymbol{S}^{(k+1)}) \leq J(\boldsymbol{H}^{(k+1)}, \boldsymbol{S}^{(k)}) \leq J(\boldsymbol{H}^{(k)}, \boldsymbol{S}^{(k)})

因此目标函数值在每次完整迭代后单调递减(或保持不变)。又因为 J \geq 0 有下界,根据单调有界定理,序列 \{J^{(k)}\} 必收敛。由此证明ALS是下降算法。

Q5:算法伪代码与停止条件

image-20251229124239859

Q6:推导 \boldsymbol{S} 的乘法更新公式

已知 \boldsymbol{H} 的乘法更新规则为:

\boldsymbol{H} \leftarrow \boldsymbol{H} \odot \frac{\boldsymbol{X}\boldsymbol{S}^T}{\boldsymbol{H}\boldsymbol{S}\boldsymbol{S}^T}

其中 \odot 表示逐元素乘法,除法也是逐元素运算。

利用Frobenius范数对转置不变的性质:

\|\boldsymbol{Z}\|_F = \|\boldsymbol{Z}^T\|_F

对目标函数取转置:

J = \|(\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S})^T\|_F^2 = \|\boldsymbol{X}^T - \boldsymbol{S}^T\boldsymbol{H}^T\|_F^2

令:

  • \tilde{\boldsymbol{X}} = \boldsymbol{X}^T
  • \tilde{\boldsymbol{H}} = \boldsymbol{S}^T
  • \tilde{\boldsymbol{S}} = \boldsymbol{H}^T

则目标函数变为:

J = \|\tilde{\boldsymbol{X}} - \tilde{\boldsymbol{H}}\tilde{\boldsymbol{S}}\|_F^2

则问题变为:

\min_{\tilde{\boldsymbol{H}} \geq 0} \|\tilde{\boldsymbol{X}} - \tilde{\boldsymbol{H}}\tilde{\boldsymbol{S}}\|_F^2

这与原来关于 \boldsymbol{H} 的优化问题形式完全相同,因此对 \tilde{\boldsymbol{H}} 应用乘法更新规则:

\tilde{\boldsymbol{H}} \leftarrow \tilde{\boldsymbol{H}} \odot \frac{\tilde{\boldsymbol{X}}\tilde{\boldsymbol{S}}^T}{\tilde{\boldsymbol{H}}\tilde{\boldsymbol{S}}\tilde{\boldsymbol{S}}^T}

代入变换关系:

\boldsymbol{S}^T \leftarrow \boldsymbol{S}^T \odot \frac{\boldsymbol{X}^T (\boldsymbol{H}^T)^T}{\boldsymbol{S}^T \boldsymbol{H}^T (\boldsymbol{H}^T)^T} = \boldsymbol{S}^T \odot \frac{\boldsymbol{X}^T \boldsymbol{H}}{\boldsymbol{S}^T \boldsymbol{H}^T \boldsymbol{H}}

取转置得到 \boldsymbol{S} 的乘法更新公式

\boxed{\boldsymbol{S} \leftarrow \boldsymbol{S} \odot \frac{\boldsymbol{H}^T \boldsymbol{X}}{\boldsymbol{H}^T \boldsymbol{H} \boldsymbol{S}}}

其中 \odot 表示逐元素乘法,除法也是逐元素的。

Q7:实现乘法更新规则的NMF算法

本节实现基于乘法更新规则的NMF算法,将数据矩阵分解为 \boldsymbol{X} = \boldsymbol{H}\boldsymbol{S} 的形式,其中 \boldsymbol{H}\boldsymbol{S} 的系数均为非负(避免除零错误)。输入数据为预处理后的ROI数据 \boldsymbol{X},尺寸为 728 \times 457n_{pix} \times n_\lambda)。源数量设为 p = 3 ,停止条件参数设为相对误差变化阈值 \varepsilon = 0.0001,最大迭代次数 K_{max} = 1000。最后设置随机种子 rng(42) 保证结果可重复。

优化目标

最小化重建误差:

\min_{\boldsymbol{H} \geq 0, \boldsymbol{S} \geq 0} J(\boldsymbol{H}, \boldsymbol{S}) = \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2
交替最小化策略

由于同时优化 \boldsymbol{H}\boldsymbol{S} 很困难,采用交替最小化的策略:

  1. 固定 \boldsymbol{S},关于 \boldsymbol{H} 最小化

    \min_{\boldsymbol{H} \geq 0} \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}^{(k)}\|_F^2 \quad \Rightarrow \quad \boldsymbol{H}^{(k+1)}
  2. 固定 \boldsymbol{H},关于 \boldsymbol{S} 最小化

    \min_{\boldsymbol{S} \geq 0} \|\boldsymbol{X} - \boldsymbol{H}^{(k+1)}\boldsymbol{S}\|_F^2 \quad \Rightarrow \quad \boldsymbol{S}^{(k+1)}
  3. 交替进行,直到误差收敛

算法伪代码

image-20251229140841742

实验结果

图5:NMF乘法更新规则收敛曲线

F3

该图展示了乘法更新规则NMF算法的收敛过程,横轴为迭代次数 k,纵轴为重建误差 \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2。从曲线可以看出,误差在前几次迭代中急剧下降,随后误差趋于收敛值。具体来说,算法在第415次迭代时满足收敛条件,最终重建误差稳定在 8.04 \times 10^8。曲线的单调下降特性验证了Q4结论:乘法更新规则是一个下降算法,目标函数在每次迭代后单调递减。

图6:NMF乘法更新规则结果(源光谱与丰度图像)

F6

该图展示了乘法更新规则分解得到的3个源光谱(左列)及其对应的丰度图像(右列)。源光谱再不同位置有不同的峰值特征,丰度图像显示了每个源在空间上的分布,颜色越红(值越大)表示该源在该像素位置的含量越高,从中可以看出三种成分在ROI区域内呈现不同的空间分布模式

图7:原始光谱与重建光谱对比

F7

然后我们选取了5个代表性像素来对比原始光谱(蓝色实线)与NMF重建光谱(红色虚线)。可以看出,重建光谱与原始光谱曲线完美重合,且原始光谱中的高频噪声在重建光谱中被平滑掉,这是因为NMF将数据分解为3个源的线性组合,起到了去噪效果。不同像素具有不同的光谱形态和强度,但NMF都能够准确重建,说明选择 p=3 个源足以描述数据中的主要光谱变化。相对重建误差仅为0.1249%,验证了分解的准确性。

Q8:实现投影梯度ALS算法及性能比较

NMF问题关于 (\boldsymbol{H}, \boldsymbol{S}) 联合优化是非凸的,但当固定其中一个变量时,关于另一个变量的子问题是凸的。交替最小二乘(ALS)算法利用这一性质,交替进行两步优化:固定 \boldsymbol{S} 优化 \boldsymbol{H},固定 \boldsymbol{H} 优化 \boldsymbol{S}。每一步都是凸问题,可以高效求解。

已知 \boldsymbol{H} 的更新公式:

\boldsymbol{H} \leftarrow \left[\boldsymbol{X}\boldsymbol{S}^T(\boldsymbol{S}\boldsymbol{S}^T)^{-1}\right]_+

其中算子 [z]_+ = \max(z, 0) 表示投影到非负象限。

标量投影

对于标量 z,投影到非负实数的定义为:

[z]_+ = \max(z, 0) = \begin{cases} z & \text{if } z \geq 0 \\ 0 & \text{if } z < 0 \end{cases}
矩阵投影

对于矩阵 \boldsymbol{Z},投影操作是逐元素进行的:

[\boldsymbol{Z}]_+ = \max(\boldsymbol{Z}, 0)

即对矩阵的每个元素分别应用 [\cdot]_+ 操作。

\boldsymbol{H} 的更新公式(已知)

我们先固定 \boldsymbol{S},然后目标是最小化 \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2。无约束最小二乘解为:

\boldsymbol{H}^* = \boldsymbol{X}\boldsymbol{S}^T(\boldsymbol{S}\boldsymbol{S}^T)^{-1}

加上非负约束后,投影到非负象限:

\boldsymbol{H} \leftarrow \left[\boldsymbol{X}\boldsymbol{S}^T(\boldsymbol{S}\boldsymbol{S}^T)^{-1}\right]_+
\boldsymbol{S} 的更新公式(需要推导)

原问题:固定 \boldsymbol{H},最小化

\min_{\boldsymbol{S} \geq 0} \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2

无约束最小二乘解

对目标函数关于 \boldsymbol{S} 求导并令其为零:

\frac{\partial}{\partial \boldsymbol{S}} \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2 = -2\boldsymbol{H}^T(\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}) = 0

整理得正规方程:

\boldsymbol{H}^T\boldsymbol{H}\boldsymbol{S} = \boldsymbol{H}^T\boldsymbol{X}

求解:

\boldsymbol{S}^* = (\boldsymbol{H}^T\boldsymbol{H})^{-1}\boldsymbol{H}^T\boldsymbol{X}

加上非负约束

\boldsymbol{S} \leftarrow \left[(\boldsymbol{H}^T\boldsymbol{H})^{-1}\boldsymbol{H}^T\boldsymbol{X}\right]_+

综上所述,两个变量的投影梯度ALS更新公式如下:

\boldsymbol{H} \leftarrow \left[\boldsymbol{X}\boldsymbol{S}^T(\boldsymbol{S}\boldsymbol{S}^T)^{-1}\right]_+
\boldsymbol{S} \leftarrow \left[(\boldsymbol{H}^T\boldsymbol{H})^{-1}\boldsymbol{H}^T\boldsymbol{X}\right]_+
算法框架
image-20251229142310839
实验结果

图8:NMF投影梯度ALS收敛曲线

F9

该图展示了投影梯度ALS算法的收敛过程,横轴为迭代次数 k,纵轴为重建误差 \|\boldsymbol{X} - \boldsymbol{H}\boldsymbol{S}\|_F^2。与乘法更新规则相比,ALS算法呈现出截然不同的收敛特性:误差在前5次迭代内快速下降然后趋于收敛值。算法仅需61次迭代即满足收敛条件,最终重建误差为 7.84 \times 10^8,优于乘法更新规则的结果。

图9:NMF投影梯度ALS结果(源光谱与丰度图像)

F14

ALS算法具体数值结果如下:

指标 数值
相对重建误差 0.1217%
H最小值 0.000000(\geq 0
S最小值 0.000000(\geq 0
H尺寸 728 \times 3
S尺寸 3 \times 457

H和S的最小值均为0,满足非负约束条件。

两种算法性能比较

图10:两种算法收敛曲线对比(对数尺度与前50次迭代)

F15

该图通过两个子图对比了乘法更新规则(蓝色实线)和投影梯度ALS(红色虚线)的收敛行为,可见ALS的收敛速度远快于乘法更新规则,ALS仅需61次迭代即可收敛,而乘法更新规则需要415次迭代。

图11:源光谱对比(归一化后)

F16

该图将两种算法得到的源光谱归一化后进行对比,消除了尺度差异的影响。对于源1,乘法更新(蓝色)在450-700nm范围内呈现平坦的宽峰,而ALS(红色虚线)则呈现双峰结构。对于源2和3,两种方法都得到单峰光谱,但峰值位置略有差异。这些差异表明NMF问题存在多个局部最优解,不同算法会收敛到不同的解,但这些解都能以较小的误差重建原始数据。

图12:丰度图像对比(乘法更新 vs ALS)

F17对比两种算法得到的丰度分布,上排为乘法更新结果,下排为ALS结果。尽管两种方法得到的源光谱有所不同,但丰度图像展示的空间分布都很相似,都成功识别出了ROI区域内的三种荧光成分及其空间位置。

数据汇总如下:

指标 乘法更新规则 投影梯度ALS
迭代次数 415 61
最终误差 8.04 \times 10^8 7.84 \times 10^8
相对重建误差 0.1249% 0.1217%

从实验结果可以看出,投影梯度ALS算法仅需61次迭代即可收敛,而乘法更新规则需要415次迭代。在最终重建质量方面,ALS的相对重建误差(0.1217%)略优于乘法更新规则(0.1249%),最终误差也更小,这是因为投影梯度ALS每步更新更接近最优解,因此收敛更快且最终结果更优。

由于整体问题非凸,两种算法都是局部最小化算法,最终结果依赖于初始解的选择。这也解释了为什么两种算法收敛到不同的源光谱:NMF问题存在多个局部最优解,不同算法可能收敛到不同的解。


评论