做高光谱的人,基本都绕不开“光谱重建”这个坎。很多初学者第一次听到这个词,以为是什么高深的硬件黑科技,实际上它就是一句话:从有限的信息里,把完整的光谱曲线给“算”回来。我在前面几篇里讲过推扫式、快照式这些硬件怎么采集数据,但从原始信号到能用于分析的光谱立方体,中间这步处理往往才是决定实验成败的关键。这篇就来聊聊光谱重建(Spectral Reconstruction)是什么、主流做法有哪几条路线、实操时有哪些坑,以及我踩过的一些教训。
先说个场景,你可能立刻就有感觉了。
假设你手上只有一张普通RGB相机拍的照片,红绿蓝三个通道。现在有人告诉你,这张照片其实藏着每个像素点从400nm到1000nm连续的光谱信息,你信不信?直觉上这不可能,三个数怎么可能还原出一百多个波段。但光谱重建做的就是这件事,在病态逆问题里找出最合理的那组解。这件事在遥感、医学影像、工业分选、文物保护等领域都有刚性需求,比如你从卫星图上想反演水体成分,或者从内窥镜图像里判断组织血氧含量,总不能每次都背着推扫式成像仪去现场。
这篇文章,我会从问题定义、传统优化路线、深度学习路线,以及实际工程落地这四个层面展开,尽量用大白话讲清楚。无论你是刚入门的学生,还是已经跑过几个模型的工程师,应该都能找到对自己有用的部分。
1. 光谱重建到底在解决什么问题
1.1 从“降质”到“复原”:一个逆问题
光谱重建本质上是一个逆问题。正向过程很简单:当一束光进入相机,经过镜头、滤光片、传感器响应,最后落在像素上,形成的是一个积分结果。每个通道的响应值,等于光谱曲线和传感器光谱响应函数(Spectral Response Function)在波段范围内的乘积积分。用公式表达就是:
g_k = ∫ S(λ) · R_k(λ) dλ
其中S(λ)是入射光的光谱辐亮度,R_k(λ)是第k个通道的响应函数,g_k就是你看到的像素值。RGB相机的k就是3,多光谱相机可能是5、8、16,高光谱相机可能是几百个波段。
重建要做的事情,就是把这个正向过程反过来:已知g_k和R_k(λ),去求解S(λ)。问题是,你看到的测量值(比如3个)远少于你要还原的未知数(比如128个波段),方程个数不够,解不唯一。这就是典型的病态(ill-posed)逆问题。
1.2 高光谱重建的三种典型场景
在实际工程里,光谱重建不只是一个算法问题,它往往绑定了具体的硬件形态和数据获取方式。我梳理了一下,大致分三类场景:
-
从RGB图像重建高光谱:这是最“出圈”的场景,也是NTIRE等国际竞赛推动最多的方向。输入一张普通彩色照片,输出几十上百个波段的数据立方体。听起来神奇,但本质上依赖的是场景中物体光谱和颜色之间的统计相关性。
-
从多光谱图像重建高光谱:输入通道更多(比如8通道、16通道),病态程度降低,重建质量自然好很多。这在卫星遥感里特别常见,比如Sentinel-2的13个波段,就可以通过融合算法重建出更密的光谱采样。
-
从编码快照式系统重建高光谱:这是硬件端在做“压缩”,也就是CASSI(Coded Aperture Snapshot Spectral Imaging)这类系统。单次曝光把三维立方体投影到二维传感器上,后期用算法从二维投影里恢复三维信息。这里的重建,复杂度又高了一
