做高光谱的朋友应该都有过这种经历:手里只有一张普通RGB照片,或者某个设备只输出几个宽波段,但要分析的目标物偏偏需要连续光谱信息。还有更常见的场景——高光谱采集设备要么贵,要么慢,一个几十上百波段的数据立方体拍下来,可能需要几秒甚至几分钟,根本没法应对流水线上的动态检测。光谱重建(Spectral Reconstruction)要解决的,就是这种“从有限观测反推完整光谱”的问题,也是高光谱成像基础系列里相当核心的一环。
这篇是系列的第十二篇,我会把光谱重建这件事讲透:它到底重建的是什么、数学模型长什么样、为什么无脑反算不行、目前主流的字典和深度学习方法各自靠谱在哪,最后给一个能在笔记本上直接跑通的小实验,以及我在实际项目里踩过的坑。适合刚接触高光谱数据处理的工程师,也适合准备做RGB到高光谱重建、压缩快照成像重建的朋友参考。
1. 光谱重建到底是什么:三种常见的任务形态
1.1 高光谱数据立方体与降维观测
先理一下概念。高光谱成像获取的是一个三维数据立方体(x,y,λ),前两个维度是空间坐标,第三个维度是波长。普通相机的成像,本质上是把光谱维度积压成了几个通道值——比如sRGB相机就是三个通道,每个通道是光谱与滤光片光谱响应函数的积分结果。高光谱相机则完全不同,它把光谱分成几十上百个窄波段分别记录。
问题是,高光谱数据获取成本高、速度慢、存储占用大。很多场景下我们并不需要“先完整采集合成数据再做分析”,而是希望直接从低维观测里把高维光谱信息“补回来”。光谱重建就是指这样一个逆过程:给定系统已知的观测(RGB、多光谱、压缩测量等)和成像模型先验,恢复出完整连续的光谱反射率或辐亮度曲线。
这就像你用一张打了马赛克的图去复原高清原图,只不过这里马赛克不是空间上的,而是光谱方向的“像素合并”。RGB里的3个通道,要对齐到31个或者更多波段,信息缺口非常大,所以这个逆向问题天生就不是老实人能干的活——它需要很强的先验来补全丢失的信息。
1.2 三种典型任务形态与影响范围
光谱重建在高光谱成像相关领域里,实际包含三种差别很大的任务形态,搞清楚自己属于哪种,才能选对方法。
第一种是RGB或多光谱到高光谱的重建。这是目前学术圈最热的方向,典型的公开数据集是ICVL(以色列理工采集的室内高光谱图像)、CAVE、NUS等。NTIRE挑战赛专门设有Spectral Reconstruction赛道,输入就是一张sRGB图像,输出是31个波段的反射率立方体。这种任务在颜色科学、电商无损色差评估、医学影像、文物保护等领域影响很大,因为普通消费级相机就能作为“光谱采集前端”,把设备成本降一到两个数量级。
第二种是压缩快照光谱成像(CASSI)中的重建。这类系统在探测器前面加一块编码孔径掩膜和色散元件,只拍一张二维投影图,就把三维数据立方体全部编码在里面,再通过算法重建。因为单帧曝光就能采集完整光谱,很适合瞬态事件和动态目标观测。这里重建的不只是光谱维,还牵扯到空间混叠的解纠缠,难度比第一种要高不少。
第三种是遥感领域的光谱模拟与重建。比如利用Sentinel-2这种多光谱卫星的13个波段,重建出接近连续光谱的反射率数据,用于植被、水体、矿物定量反演;或者利用地面光谱库与影像反射率之间的关系,模拟其他传感器的波段响应。这种场景里,观测波段数比RGB多一些,但依然远少于高光谱,重建的目标精度要求也更严格。
这三种形态的共性是:都要建立系统成像模型,都要靠先验来约束解空间。下面就把这个模型展开来看。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 成像模型与病态问题:为什么不能直接反算
2.1 离散化成像模型
成像过程本身是一个连续光谱的积分。对于第k个通道,探测器响应可以写成:
[ y_k = \int l(\lambda) r(\lambda) s_k(\lambda) d\lambda + n_k ]
其中 l(λ) 是照明光源的相对光谱功率分布,r(λ) 是目标物的光谱反射率(也就是我们要重建的对象),s_k(λ) 是第k个通道的光谱灵敏度,包含了滤光片、传感器量子效率等,n_k 是噪声。
实际计算时必须离散化。把波长范围按间隔 Δλ 划分成L个波段,那么一个像素的成像方程就变成:
[ y_k = \sum_{i=1}^{L} l_i r_i s_{k,i} \Delta\
