高光谱成像光谱角映射SAM是什么?

摘要:在第一篇中我们已经提到:高光谱图像的每一个像素,本质上是一个高维光谱向量。 如果一个像素有 100 个波段,那么它就可以表示为: [mathbf{x} = (I_1, I_2, dots, I_{100}) ]既然每个像素是一个向量
在第一篇中我们已经提到:高光谱图像的每一个像素,本质上是一个高维光谱向量。 如果一个像素有 100 个波段,那么它就可以表示为: \[\mathbf{x} = (I_1, I_2, \dots, I_{100}) \] 既然每个像素是一个向量,我们又知道了高光谱图像的经典应用就是识别物质,那么一个很自然的问题就出现了: 如何判断两个像素是否属于同一种物质? 在 RGB 图像中,我们可能比较颜色是否接近。但在高光谱图像中,我们更关心的是: 两个光谱曲线的“形状”是否相似。 从此出发,就引出了一个非常经典的方法:光谱角映射(Spectral Angle Mapper,SAM)。 1. 什么是 SAM ? SAM 起源于 1993 年的论文 The Spectral Image Processing System (SIPS) — Interactive Visualization and Analysis of Imaging Spectrometer Data ,作为高光谱图像分析中一种经典的光谱相似性度量方法被提出。 它的核心思想非常直观: 不比较光谱的“大小”,而比较光谱的“方向”。 换句话说:我们把每一个光谱向量看作高维空间中的一个点,那么两个像素之间的相似度,就可以用它们之间的“夹角”来表示。 实际上,你可以把它理解为高光谱成像领域的余弦相似度。 其逻辑并不复杂,下面就来具体展开: 2. 光谱角:为什么是角度而不是距离? 假设现在有两个像素: \[\mathbf{x} = (x_1, x_2, \dots, x_n) \] \[\mathbf{y} = (y_1, y_2, \dots, y_n) \] 它们可以看作是 n 维空间中的两个向量。 在几何上,这两个向量的夹角满足: \[\cos(\theta) = \frac{\mathbf{x} \cdot \mathbf{y}}{|\mathbf{x}||\mathbf{y}|} \] 于是我们可以计算反余弦来得到夹角: \[\theta = \arccos\left(\frac{\mathbf{x} \cdot \mathbf{y}}{|\mathbf{x}||\mathbf{y}|}\right) \] 这个角度 \(\theta\) 就叫做:光谱角(Spectral Angle) 角度越小,说明这两个向量在高维空间中越接近,两个光谱曲线就越相似。 到这里,你应该会有这样的问题:比较两个光谱向量,为什么是用“角度”而不是“距离”? 我们知道,在机器学习的部分任务中,向量长度可能受模型缩放影响而大小不一,方向才能代表其语义,因此我们使用余弦相似度来消除长度的影响。 那么在光谱向量的关系中,为什么我们同样要使用余弦相似度而不是直接计算欧式距离呢? 实际上,这和高光谱图像的采集有关:在真实场景中,光谱强度会受到很多因素影响。如光照强度变化、阴影、传感器增益等。 这些因素会影响光谱的“整体幅值”,但往往不会改变光谱曲线的“形状”。 举个简单的例子: 如果我们在阳光下和阴影下拍摄一座山: 同一座山,在阳光下光强整体更高,而阴影下光强整体则会更低。 但是,这座山在光谱曲线的“相对比例关系”基本保持一致。 因此,如果使用欧氏距离进行比较,则会因这类因素而让度量结果产生较大差异,但如果使用 SAM 计算光谱角来进行比较,那么它会认为这两个像素依然非常接近。 这就是 SAM 的核心优势:对光照强度变化具有一定鲁棒性。 到这里还没结束,通过计算光谱角,我们可以量化两个像素的光谱向量间的相似度。 但是在实际任务中,SAM 往往用来进行像素级的图像分类或检测,我们要如何根据光谱角正确识别物质并进行分类,才是关键所在。 这便涉及到 SAM 中的另一个关键概念:参考光谱(Reference Spectrum)。 3. 参考光谱:同一物质的“参考答案” 在实际应用中,SAM 常用于地物分类、材料识别、矿物匹配等分类或检测任务。 而在这些具体任务中,我们使用 SAM 进行识别,并不是让高光谱图像数据的像素间两两计算光谱角,而是让每个像素和每类物质的参考光谱逐一计算光谱角,选择夹角最小的一类作为结果。 道理不难理解,我们知道每种物质都有其固定的属性,比如石头是硬的,草是软的。 而在高光谱成像中,每种物质对不同波长的光的吸收和反射能力自然也只会稳定在某个固定区间内,而不可能产生过大波动。 这就为我们测量物质的参考光谱提供了依据,通过测量和建立参考光谱,我们便能得到分类的“标准答案”。
阅读全文