2、可见光成像基础
做图像融合这些年,我越来越觉得一个道理:不懂可见光成像,就别谈融合。你想想看,热成像和可见光就像是人的两只眼睛,一只看温度,一只看细节。如果连可见光那只眼睛的工作原理都没搞明白,融合出来的东西肯定别扭。
这一节,咱们就聊聊可见光成像的那些基础。我会结合自己踩过的坑来讲,希望能帮你少走弯路。
2.1 可见光光谱范围
先说个常识:人眼能看见的光,波长范围大概是 380nm 到 780nm。从紫色到红色,就这么一段。
但有意思的是,不同波长的光在成像时表现完全不一样。我做过一个项目,需要在雾天做融合。当时发现,近红外波段(700nm-900nm)穿透雾的能力比可见光强很多。可惜普通CMOS传感器对近红外也敏感,所以很多相机前面会加一块红外截止滤镜。做融合时,有时候反而要把这块滤镜去掉,让近红外信息也参与进来。
2.2 CMOS/CCD传感器原理
传感器这东西,说白了就是把光信号转成电信号。目前主流就两种:CCD 和 CMOS。
CCD 是电荷耦合器件,成像质量好,但功耗高、速度慢。CMOS 是互补金属氧化物半导体,功耗低、速度快,现在手机、相机里基本都是它。
我个人习惯用CMOS做融合项目,原因很简单:帧率高,便于和热成像同步。热成像一般也就30fps到60fps,CMOS轻松跑到上百fps,同步起来不费劲。
但有个坑我得提醒你:CMOS的卷帘快门(Rolling Shutter)。我曾经在做一个运动目标融合时,发现可见光图像里目标变形了,而热成像好好的。查了半天,原来是卷帘快门导致的果冻效应。后来换成全局快门的CMOS,问题才解决。
2.3 色彩空间(RGB、HSV、YUV)
色彩空间,说白了就是描述颜色的数学方法。做融合时,选对色彩空间比选对算法还重要。
RGB
最直观,红绿蓝三通道。但我不建议在RGB空间做融合,因为三个通道相关性太强。你调整一个通道,其他两个也跟着变,很难控制。
HSV
色调、饱和度、明度。这个空间我特别喜欢,因为色调和明度是分开的。做融合时,我可以把热成像信息注入到明度通道,保留原来的色调。效果很自然。
YUV
亮度、色度。YUV 在视频压缩里用得最多。Y通道代表亮度,U和V代表颜色。做融合时,只替换Y通道,保留UV,就能得到不错的伪彩色效果。
| 色彩空间 | 通道含义 | 融合适用性 |
|---|---|---|
| RGB | 红、绿、蓝 | 低(通道耦合强) |
| HSV | 色调、饱和度、明度 | 高(色调与亮度分离) |
| YUV | 亮度、蓝色差、红色差 | 高(亮度与色度分离) |
2.4 图像噪声模型
说到噪声,我真是又爱又恨。爱的是它给了我们研究空间,恨的是它总在关键时刻捣乱。
常见的噪声有几种:
- 高斯噪声:传感器热噪声,每个像素独立,服从高斯分布。低光照下尤其明显。
- 泊松噪声(散粒噪声):光子到达的随机性造成的。光照越弱,噪声越明显。
- 固定模式噪声(FPN):每个像素的暗电流不同,导致图像有固定的条纹或斑点。
- 量化噪声:模数转换时产生的,位数越低越明显。
我记得有一次做夜间融合,可见光图像噪点特别多。一开始我以为是传感器坏了,后来发现是增益开太高。低光照下,CMOS会自动提高增益,但噪声也会被放大。后来我改用多帧降噪,效果好了很多。
嗯,这里要注意:不同波段的噪声模型不一样。可见光的噪声主要是高斯+泊松,热成像的噪声主要是1/f噪声和固定模式噪声。融合时,不能用一个滤波器处理两种噪声,得分开处理。
// 一个简单的噪声估计代码(伪代码)
function estimateNoise(image):
// 提取平坦区域
flat_region = extractFlatRegion(image)
// 计算标准差
noise_std = std(flat_region)
// 判断噪声类型
if noise_std > threshold:
print("噪声较大,建议先降噪")
else:
print("噪声可接受,直接融合")
最后说一句:噪声不是敌人,是信息。有时候,噪声的分布能反映传感器的状态,甚至能用来做超分辨率。当然,那是另一个话题了。
公众号:蓝海资料掘金营,微信deep3321