叶舟山 發表於 2026-3-6 16:26:00

高光谱成像基础(四)最小噪声分数变换 MNF

<p>在上一篇中,我们介绍了 <strong>PCA</strong> ,其通过寻找方差最大的方向来压缩数据维度,在保留主要信息结构的同时减少计算量。<br>
同时,我们也提到,PCA 是数据分析和机器学习领域中一种通用的高维数据降维方法,高光谱成像只是它的一个典型应用场景。</p>
<p>但正如神经网络从最初的前馈网络逐渐发展出<strong>针对图像数据的卷积网络</strong>以及<strong>针对序列数据的循环网络</strong>一样,在不同的细分领域中,通用方法往往会根据具体问题进行一定程度的“本地化”。</p>
<p>因此,在信号处理与遥感数据分析领域(尤其是高光谱成像任务中),人们更常使用另一种与 PCA 密切相关的方法对数据进行变换与降维,那就是 <strong>最小噪声分数变换(Minimum Noise Fraction Transform,MNF)</strong>。</p>
<hr>
<h1 id="1-什么是-mnf-">1. 什么是 MNF ?</h1>
<p>MNF 的提出要晚于 PCA。1988 年,论文 <strong><em>A transformation for ordering multispectral data in terms of image quality with implications for noise removal</em></strong> 首次提出了一种在降维过程中同时<strong>考虑噪声影响</strong>的线性变换方法,即 <strong>MNF</strong>。</p>
<p>值得一提的是,MNF 在原始论文中被称为 <em>Maximum Noise Fraction</em>,其思想是根据噪声占信号比例对数据进行排序。而后来在高光谱应用中,这种方法通常被解释为最小化信号中的噪声成分,因此在软件实现中常被称为 <em>Minimum Noise Fraction</em>。两种名称在数学上是等价的,只是表述角度不同。</p>
<p>简单了解背景后,我们已经知道了 MNF 能应用于信号处理与遥感数据分析领域的关键词:<strong>控制噪声影响</strong>。<br>
来展开一下:<br>
在我们使用 PCA 处理高光谱图像时,很快会发现一个新的问题:</p>
<blockquote>
<p><strong>并不是所有的方差都来源于有效信号。</strong></p>
</blockquote>
<p>这是什么意思?<br>
假设我们正在记录某个物体的真实温度,但<strong>测量设备存在一定误差</strong>。于是我们得到的观测值实际上是:</p>
<p></p><div class="math display">\[\text{观测值} = \text{真实信号} + \text{噪声}
\]</div><p></p><p>如果测量误差较大,那么数据的波动可能主要来自<strong>噪声扰动</strong>,而不是真实信号的变化。此时,即使某个分量具有较大的方差,也未必代表其中包含更多有用信息。</p>
<p>打个比方:假设在一个完全安静的房间使用麦克风录音。理论上应该只包含人声,但由于麦克风本身存在底噪,录音中仍会出现轻微的“嘶嘶声”。如果设备质量较差,这种底噪甚至可能掩盖人声。</p>
<p>因此,如果直接使用噪声占比较大的数据进行建模或训练,模型往往会学习到噪声结构,从而显著降低泛化能力。</p>
<p>显然,在高光谱图像中,这种情况并不少见。<br>
由于<strong>传感器精度、环境干扰以及大气条件等因素</strong>的影响,一些波段可能包含较强的噪声成分,因此,在存在明显噪声干扰的数据中,仅依赖方差排序可能并不理想。<br>
于是,一个想法自然而然地出现了:</p>
<blockquote>
<p><strong>在我们考虑数据的整体方差前,能不能通过变换消除噪声对方差的影响?</strong></p>
</blockquote>
<p>这正是 MNF 的核心思想。</p>
<h1 id="2-mnf-的具体过程">2. MNF 的具体过程</h1>
<p>简单理解来说,<strong>MNF 就是在消除噪声影响之后再进行 PCA。</strong><br>
下面就来具体展开其过程:</p>
<h2 id="21-噪声白化noise-whitening">2.1 噪声白化(Noise Whitening)</h2>
<p>首先,我们仍然从高光谱数据矩阵出发:</p>
<p></p><div class="math display">\[X =
\begin{bmatrix}
I_{11} &amp; I_{12} &amp; \dots &amp; I_{1n} \\
I_{21} &amp; I_{22} &amp; \dots &amp; I_{2n} \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
I_{m1} &amp; I_{m2} &amp; \dots &amp; I_{mn}
\end{bmatrix}_{m \times n}
\]</div><p></p><p>同样的:<span class="math inline">\(m\)</span> 为像素数量,<span class="math inline">\(n\)</span> 为波段数量。<br>
而在 MNF 中,我们<strong>假设</strong>观测数据由两部分组成:</p>
<p></p><div class="math display">\[X = S + N
\]</div><p></p><p>其中: <span class="math inline">\(S\)</span> 表示真实信号,<span class="math inline">\(N\)</span> 表示噪声。</p>
<h3 id="1构造噪声估计">(1)构造噪声估计</h3>
<p>第一步,我们需要<strong>构造噪声估计</strong>:仅仅是假设出噪声是不够的,我们需要<strong>通过数据矩阵本身的统计特性,估计出噪声矩阵。</strong><br>
最简单也较常见的方法就是使用<strong>空间差分</strong>:</p>
<p></p><div class="math display">\[\hat{N} = X(i,j) - X(i+1,j)
\]</div><p></p><p>逻辑不难理解:<strong>用相邻行像素做差,近似得到噪声。</strong><br>
这种方法是在多种假设前提下使用的:</p>
<ol>
<li>假设真实信号在空间上变化平滑。</li>
<li>假设噪声是随机扰动。</li>
<li>假设相邻像素的信号部分相似。</li>
</ol>
<p>看个实例:<br>
假设我们有一小块数据:</p>
<p></p><div class="math display">\[X =
\begin{bmatrix}
100 &amp; 102 &amp; 101 \\
99 &amp; 101 &amp; 100
\end{bmatrix}
\]</div><p></p><p>代入公式计算,得到差分结果为:</p>
<p></p><div class="math display">\[\hat{N} =
\begin{bmatrix}
1 &amp; 1 &amp; 1
\end{bmatrix}
\]</div><p></p><p>这样,信号部分被抵消后,剩下的就是噪声差异。<br>
此外,有些实现中会加入一个 <span class="math inline">\(\frac{1}{\sqrt{2}}\)</span> 的<strong>缩放因子</strong>,使得差分后的噪声方差与原始噪声方差保持一致。<br>
你可能会觉得这种估计方法有些随意,但在高光谱图像中,同一物体区域往往是连续块状结构,而不是随机分布,因此因在“大多数区域”里,差分主要反映噪声。<strong>而不同类别的边界虽然会有影响,让差分结果可能同时包含信号差异,但在整体统计中占比较小。</strong><br>
总体来说,这种差分估计噪声的方法仍是可行的,而在要求更高精度的实际任务中,也有更精细的噪声估计方法,如残差估计、稳健统计方法以及在特定区域估计噪声等。</p>
<h3 id="2计算噪声协方差矩阵">(2)计算噪声协方差矩阵</h3>
<p>现在,我们已经有了估计得到的噪声矩阵 <span class="math inline">\(\hat{N}\)</span> ,下一步就是计算噪声协方差矩阵:</p>
<p></p><div class="math display">\[C_n = \text{Cov}(\hat{N})
\]</div><p></p><p>在了解完 PCA 后,这节内容就不难理解了,其公式如下:</p>
<p></p><div class="math display">\[\mathbf{C}_n = \frac{1}{m-1} \hat{N}^\top \hat{N}
\]</div><p></p><h3 id="3进行噪声白化变换">(3)进行噪声白化变换</h3>
<p>现在我们已经得到了噪声协方差矩阵 <span class="math inline">\(C_n\)</span></p>
<p>下一步,是构造一个线性变换,使得噪声在新的空间中满足:</p>
<p></p><div class="math display">\[\text{Cov}(N') = I
\]</div><p></p><p>在这里,$N' $ 就是变换后的噪声矩阵,而 <span class="math inline">\(I\)</span> 是单位矩阵。</p>
<p><strong>单位矩阵是对角线原始全是 1,非对角线元素全是 0 的矩阵。</strong> 就像这样:</p>
<p></p><div class="math display">\[I =
\begin{bmatrix}
1 &amp; 0 &amp; \dots &amp; 0 \\
0 &amp; 1 &amp; \dots &amp; 0 \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
0 &amp; 0 &amp; \dots &amp; 1
\end{bmatrix}
\]</div><p></p><p>根据协方差矩阵中的元素语义,现在我们知道:<strong>变换后的噪声各个方向方差相等,噪声之间不再相关。</strong><br>
解释一下这段逻辑:<strong>MNF 并没有设法去消除噪声本身,而是通过变换让数据中任何方向的噪声强度都一样,这样噪声就不会影响数据方差间的相对大小,如果某个方向的方差更大,那就几乎可以认为是信号贡献,这就叫噪声白化</strong>。</p>
<p>了解了白化的结果后,现在再来看看其变换的过程:</p>
<p>因为 <span class="math inline">\(C_n\)</span> 是一个对称正定矩阵,根据线代中的<strong>实对称矩阵的谱定理</strong>,我们有这个式子:</p>
<p></p><div class="math display">\[C_n = U \Lambda U^T
\]</div><p></p><p>其中: <span class="math inline">\(U\)</span> 是特征向量矩阵, <span class="math inline">\(\Lambda\)</span> 是特征值对角矩阵。<br>
解这个方程的过程其实还是上一篇中特征值分解,在PCA 中了解了其逻辑后我们就能直接用结论了。<br>
现在,我们就知道了噪声主要分布在哪些方向上,在每个方向上噪声有多强。<br>
接下来,我们构造一个<strong>变换矩阵</strong>:</p>
<p></p><div class="math display">\[W = \Lambda^{-1/2} U^T
\]</div><p></p><p>其中, <span class="math inline">\(\Lambda^{-1/2}\)</span> 是对角线上每个元素取平方根倒数,<strong>因为方差是平方量,这么算是让所有方向的噪声方差都变成 1。</strong></p>
<p>最后,我们用变换矩阵对噪声进行变换:</p>
<p></p><div class="math display">\[N' = W \hat{N}
\]</div><p></p><p><span class="math inline">\(N'\)</span> 即为白化后的噪声矩阵,可以证明:</p>
<p></p><div class="math display">\[\text{Cov}(N') = I
\]</div><p></p><p>而通过用变换矩阵对原数据进行变换:</p>
<p></p><div class="math display">\[X' = W X
\]</div><p></p><p>我们便能得到最终噪声白化后的数据。<br>
从语义上解释这一过程,<strong>其实是先把原数据矩阵通过 <span class="math inline">\(U^T\)</span> 旋转到噪声协方差矩阵的特征向量坐标系中,使噪声在该坐标系下彼此独立,再按特征值 <span class="math inline">\(\Lambda^{-1/2}\)</span> 缩放,使所有方向上的噪声方差统一为 1。</strong></p>
<p>这部分展开推导过程较为繁琐,实际上还是对<strong>协方差性质、正交矩阵性质</strong>的应用,这里补充一个实例:<br>
假设噪声协方差矩阵为</p>
<p></p><div class="math display">\[C_n =
\begin{bmatrix}
4 &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\]</div><p></p><p>这代表第一个方向噪声方差 = 4,第二个方向噪声方差 = 1 。<br>
因为它已经是对角矩阵,所以:</p>
<p></p><div class="math display">\[U = I
\]</div><p></p><p></p><div class="math display">\[\Lambda =
\begin{bmatrix}
4 &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\]</div><p></p><p>继续,构造变换矩阵:</p>
<p></p><div class="math display">\[W = \Lambda^{-1/2} =
\begin{bmatrix}
\frac{1}{\sqrt{4}} &amp; 0 \\
0 &amp; \frac{1}{\sqrt{1}}
\end{bmatrix}
=
\begin{bmatrix}
\frac{1}{2} &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\]</div><p></p><p>假设噪声向量为:</p>
<p></p><div class="math display">\[\hat{N} =
\begin{bmatrix}
2 \\
1
\end{bmatrix}
\]</div><p></p><p>现在进行白化:</p>
<p></p><div class="math display">\[N'=W \hat{N}=
\begin{bmatrix}
\frac{1}{2} &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
2 \\
1
\end{bmatrix}
=
\begin{bmatrix}
1 \\
1
\end{bmatrix}
\]</div><p></p><p>验证白化后的协方差:</p>
<p></p><div class="math display">\[C_n'=W C_n W^T =
\begin{bmatrix}
\frac{1}{2} &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
4 &amp; 0 \\
0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
\frac{1}{2} &amp; 0 \\
0 &amp; 1
\end{bmatrix}
=
\begin{bmatrix}
1 &amp; 0 \\
0 &amp; 1
\end{bmatrix}
= I
\]</div><p></p><p>至此,我们就完成对高光谱数据的噪声白化。</p>
<h2 id="22-pca">2.2 PCA</h2>
<p>完成了噪声白化后,我们得到了变换后的数据矩阵 <span class="math inline">\(X'\)</span>,这时再对它做 PCA ,噪声已经被标准化,在各个方向上贡献相同,就不再影响方差排序。<br>
而且此时:</p>
<p></p><div class="math display">\[\text{Cov}(X') = \text{Cov}(S') + I
\]</div><p></p><p>因此,特征值可以理解为:</p>
<p></p><div class="math display">\[\lambda = \text{信号能量} + 1
\]</div><p></p><p>所以:</p>
<ul>
<li>特征值越大,信号越强,信噪比越大。</li>
<li>特征值接近 1 ,主要是噪声,信噪比越小。</li>
</ul>
<p>所以也有这样的常见说法:<strong>MNF 是按信噪比排序的降维方法。</strong></p>
<p>在上一篇我们使用的是特征值分解来进行提取主成分,同时我们提到了可以使用另一种方法:奇异值分解,来省去显式计算协方差矩阵,在这部分,我们就来简单展开一下:</p>
<p>奇异值分解的英文全称是 Singular Value Decomposition,缩写为<strong>SVD</strong>.</p>
<p>在实际计算中,我们通常不直接计算协方差矩阵再做特征分解,主要是因为协方差矩阵维度为 <span class="math inline">\(n \times n\)</span>,<strong>当波段数较大时计算成本较高</strong>。<br>
因此可以使用 SVD 直接对数据矩阵进行分解。<br>
PCA 的特征分解可以由 SVD 公式推导出来,这涉及到线代中的<strong>矩阵分解定理</strong>:<br>
对于<strong>任意矩阵</strong> <span class="math inline">\(X' \in \mathbb{R}^{m\times n}\)</span>,都可以分解为:</p>
<p></p><div class="math display">\[X' = U \Sigma V^T
\]</div><p></p><p>其中:</p>
<ul>
<li><span class="math inline">\(U\)</span> 为左奇异向量。</li>
<li><span class="math inline">\(\Sigma\)</span> 为奇异值对角矩阵。</li>
<li><span class="math inline">\(V\)</span> 为右奇异向量。</li>
</ul>
<p>其推导过程较繁琐,就不再展开了,直接摆出结论如下:</p>
<ol>
<li><strong>PCA 的特征向量 = SVD 的右奇异向量 <span class="math inline">\(V\)</span></strong></li>
<li><strong>PCA 的特征值 = <span class="math inline">\(\frac{\Sigma^2}{m-1}\)</span></strong></li>
</ol>
<p>因此,通过 SVD,我们可以直接从高维数据本身得到其各个成分并进行排序。</p>
<p>这样,我们就实现了对存在噪声影响的高维数据的降维,不仅保留了数据结构,同时还消除了噪声对方差排序的影响。</p>
<h1 id="3mnf-的优缺">3.MNF 的优缺</h1>
<p>MNF 是在 PCA 的基础上引入噪声建模得到的一种改进方法,因此它在高噪声数据场景下往往比 PCA 更有效。但与此同时,它也带来了新的假设条件和计算成本。</p>
<h2 id="31-mnf-的优势">3.1 MNF 的优势</h2>
<table>
<thead>
<tr>
<th>优点</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>能考虑噪声影响</td>
<td>MNF 在降维前先对噪声进行白化处理,使噪声在各个方向上的方差一致,从而减少噪声对主成分排序的干扰。</td>
</tr>
<tr>
<td>更适合高光谱数据</td>
<td>高光谱图像通常波段多、噪声大,MNF 能有效分离噪声主导的波段,因此在高光谱处理软件中被广泛使用。</td>
</tr>
<tr>
<td>具有一定降噪效果</td>
<td>在保留前几个 MNF 分量时,可以自动丢弃主要由噪声组成的分量,因此在降维的同时往往具有一定的降噪作用。</td>
</tr>
</tbody>
</table>
<h2 id="32-mnf-的不足">3.2 MNF 的不足</h2>
<table>
<thead>
<tr>
<th>缺点</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>依赖噪声估计</td>
<td>MNF 的效果很大程度依赖噪声协方差矩阵的估计,如果噪声估计不准确,降维效果可能明显下降。</td>
</tr>
<tr>
<td>计算过程更复杂</td>
<td>相比 PCA,MNF 需要额外进行噪声估计与白化变换,通常涉及两次特征分解,计算成本更高。</td>
</tr>
<tr>
<td>仍然是线性方法</td>
<td>MNF 本质上仍然是线性变换,因此对于存在复杂非线性结构的数据,其表达能力依然有限。</td>
</tr>
<tr>
<td>同样解释性较弱</td>
<td>MNF 分量还是多个波段的线性组合,其物理意义往往不如原始波段直观,这和 PCA 仍是相同的问题。</td>
</tr>
</tbody>
</table>
<p>总的来说,MNF 可以看作是在 PCA 基础上引入噪声建模的一种改进降维方法。它通过噪声白化和主成分分析,将数据按照信噪比进行排序,从而更有效地分离真实信号与噪声。<strong>在高光谱图像处理领域,MNF 已成为常用的预处理和降维方法之一。</strong></p><br><br>
来源:https://www.cnblogs.com/Goblinscholar/p/19678889
頁: [1]
查看完整版本: 高光谱成像基础(四)最小噪声分数变换 MNF