相机成像模型:辐射度学基础、数字相机成像管线、传感器响应函数、RAW格式与Bayer阵列
做多帧融合HDR,你首先得搞清楚一件事:相机到底是怎么看到世界的?
很多人一上来就调算法参数,结果换台相机就崩了。为什么?因为你不懂相机内部的“脾气”。这一章,我们就从物理世界的光,一路走到你电脑里的RAW文件。把这条路走通了,后面做HDR融合才能心里有底。
辐射度学基础:光到底是个什么东西?
先说点基础的。辐射度学,说白了就是研究“光能量”的学问。你想想看,我们做HDR,本质上就是在不同曝光下记录光能量,然后拼起来。所以得先知道光怎么描述。
几个核心概念,我列出来:
- 辐射通量(Radiant Flux):单位时间内通过某个面的光能量。单位是瓦特(W)。你可以理解为“光的流量”。
- 辐射照度(Irradiance):单位面积上接收到的辐射通量。单位是W/m²。传感器上每个像素接收到的,就是照度。
- 辐射亮度(Radiance):单位面积、单位立体角内的辐射通量。单位是W/(m²·sr)。这个最接近“人眼看到的亮度”。
我个人习惯,做HDR时最关注的是辐射照度。因为传感器上的每个感光单元,本质上就是一个照度计。曝光时间越长,积累的能量越多,电压信号就越高。
核心公式(简化版):
传感器输出信号 ∝ 辐射照度 × 曝光时间
这就是HDR多帧融合的物理基础。不同曝光时间,本质上是改变了这个公式里的“曝光时间”因子。
我在项目中遇到过一个问题:用同一台相机拍同一个场景,换了不同光圈,结果HDR融合后亮度不连续。后来发现是没考虑光圈对辐射照度的影响。嗯,这里要注意,光圈每收一档,照度减半。
数字相机成像管线:从光子到数字
光进入镜头后,到底经历了什么?我画了一张图,把整个流程串起来。
你看,从场景辐射到最终RAW数据,中间经过了至少6个环节。每个环节都会引入自己的“脾气”。比如镜头会有渐晕(边缘变暗),传感器有暗电流(无光也有信号),ADC有量化噪声。
做HDR融合时,我建议你至少要知道你的相机在哪个环节最“不老实”。比如有些相机在ISO 800以上,读出噪声会急剧增加。这时候你拍暗部,信噪比就很差。
传感器响应函数:相机到底有多“诚实”?
理想情况下,传感器输出的数字值应该和接收到的光能量成正比。但现实是,几乎所有相机都有点“不诚实”。
这个“不诚实”的程度,就是传感器响应函数(Sensor Response Function, SRF)。它描述了输入光能量和输出数字值之间的映射关系。
我的经验:大多数消费级相机的响应函数在中间区域接近线性,但在暗部和亮部会弯曲。暗部弯曲是因为噪声和阈值,亮部弯曲是因为接近饱和。
做HDR时,如果你假设相机是完全线性的,融合结果在暗部和亮部会出现明显的接缝。我曾经因为这个被测试团队怼了好几次。
怎么得到响应函数?两种方法:
- 查官方文档:有些厂商会提供,但很少。
- 自己标定:拍一组不同曝光时间的灰阶卡,然后拟合曲线。这是最靠谱的方法。
标定响应函数时,有一个坑:别忘了去马赛克。如果你直接在Bayer RAW上做标定,每个像素只对应一个颜色通道,响应函数会混入颜色信息。我建议先做简单的去马赛克,或者对每个颜色通道分别标定。
RAW格式与Bayer阵列:传感器看到的“黑白世界”
很多人以为相机直接拍出彩色照片。其实不是。传感器本身是“色盲”的,它只能感知光的强度,分不清颜色。
那颜色怎么来的?靠的是Bayer阵列——一块贴在传感器前面的彩色滤色片。
典型的Bayer阵列长这样:
每个像素只记录一种颜色。所以RAW文件本质上是一张灰度图,每个像素的值代表该位置滤色片对应的颜色强度。
RAW格式的好处:
- 位深高:通常是12bit或14bit,比8bit的JPEG多几十倍的信息量。
- 未经过白平衡、伽马校正等处理:保留了传感器的原始响应。
- 线性数据:至少在中间区域是线性的,适合做HDR融合。
注意:RAW文件不是“原始”到极致。它已经经过了模拟增益(ISO)和ADC量化。所以不同ISO下的RAW,噪声水平不同。
做HDR多帧融合时,我强烈建议用同一ISO拍摄不同曝光时间。改变ISO会改变增益,相当于改变了响应函数,融合时容易出问题。
说到Bayer阵列,还有一个常见变种:X-Trans(富士)和Quad Bayer(手机)。它们的排列方式不同,但核心思想一样——用滤色片让色盲传感器看到颜色。
我个人习惯,拿到一台新相机,第一件事就是拍一张RAW,然后用工具查看它的Bayer排列。因为不同排列的去马赛克算法不一样,做HDR时如果搞错了排列,颜色会完全乱掉。我曾经因为搞混了RGGB和BGGR,浪费了一整天调试。
小结一下
这一章我们走完了从光子到RAW的完整路径。你知道了光怎么变成电信号,电信号怎么变成数字,数字又怎么排列成RAW文件。
这些知识不是理论空谈。做HDR多帧融合时,你会反复用到:
- 用辐射度学理解曝光时间与信号强度的关系
- 用成像管线定位噪声来源
- 用响应函数做辐射度标定
- 用Bayer阵列知识正确解析RAW数据