2、成像基础:CMOS传感器工作原理、曝光时间与ISO对图像质量的影响、暗电流与热噪声

做低光照增强,绕不开成像的源头——传感器。你想想看,如果连传感器怎么工作的都不清楚,后面做算法优化就像蒙着眼睛修车。这一节,我带你从CMOS传感器的工作原理讲起,再聊聊曝光时间、ISO这些直接影响图像质量的参数,最后说说暗电流和热噪声这两个“暗处捣乱的家伙”。

2.1 CMOS传感器工作原理

CMOS传感器,说白了就是一个像素阵列。每个像素就是一个光电二极管,外加一个放大器。光打到二极管上,产生电子,电子数量跟光强成正比。然后放大器把电荷转成电压,再通过模数转换器(ADC)变成数字信号。

我个人习惯把CMOS的工作流程拆成三步:

  1. 光电转换:光子撞击硅基,产生电子-空穴对。
  2. 电荷积累:电子在像素的势阱里累积,曝光时间越长,积累越多。
  3. 读出与放大:逐行扫描读出,每个像素的电压被放大并量化。

我在项目中遇到过一个问题:同一款传感器,不同批次拍出来的暗部细节差异很大。后来发现是像素放大器的增益一致性出了问题。嗯,这里要注意——CMOS的每个像素都有自己的放大器,一致性天生不如CCD。这也是为什么低光照下CMOS容易出现“固定模式噪声”。

关键点:CMOS的读出方式是逐行滚动快门(Rolling Shutter),不是全局快门(Global Shutter)。这意味着同一帧里,不同行的曝光起始时间不同。如果你在拍快速运动的物体,比如飞驰的汽车,画面会出现“果冻效应”——物体变形了。低光照下,曝光时间拉长,这个效应会更明显。

下面这张图展示了CMOS传感器的核心工作流程:

CMOS传感器工作流程 CMOS传感器工作流程 入射光 光电二极管 电荷积累 像素放大器 模数转换(ADC) 数字输出 说明: 每个像素都有独立的放大器,这是CMOS与CCD的核心区别。 读出方式为逐行滚动快门,曝光起始时间逐行偏移。 低光照下,放大器增益提高,固定模式噪声(FPN)会变得明显。

2.2 曝光时间与ISO对图像质量的影响

曝光时间和ISO,是低光照拍摄时最常调的两个参数。但很多人只知其然,不知其所以然。我刚开始做图像处理时,也踩过坑——为了拍暗处细节,把ISO拉到很高,结果画面全是噪点,还不如不拍。

2.2.1 曝光时间

曝光时间,就是传感器收集光子的时间窗口。时间越长,收集的光子越多,信号越强。但代价也很明显:

  • 运动模糊:手持拍摄时,手抖会让画面变糊。我建议曝光时间不要超过1/30秒,除非你用了三脚架。
  • 果冻效应加剧:滚动快门下,长曝光会让运动物体变形更严重。
  • 暗电流积累:曝光时间越长,暗电流产生的噪声越多(后面会细讲)。

实战技巧:在低光照场景下,我一般先固定曝光时间(比如1/30秒),然后调整光圈和ISO。如果光圈已经最大了,再考虑拉长曝光时间。记住——曝光时间每翻一倍,信号量翻倍,但运动模糊的风险也翻倍。

2.2.2 ISO(增益)

ISO本质上不是“感光度”,而是模拟增益。传感器本身对光的敏感度是固定的,ISO只是把信号放大。放大信号的同时,噪声也被放大了。

我曾经做过一个实验:用同一台相机,在相同光照下,分别用ISO 100和ISO 3200拍一张灰卡。结果ISO 3200的图像信噪比(SNR)低了将近15 dB。说白了,ISO就是一把双刃剑——它让你在暗处看到东西,但代价是画质下降。

ISO值 增益倍数 信号强度 噪声强度 信噪比(SNR) 适用场景
100 1x 高 低 高 充足光照
400 4x 中 中 中 室内/黄昏
1600 16x 低 高 低 暗光手持
6400 64x 极低 极高 极低 极限暗光

为什么会这样?因为噪声是跟增益一起放大的。传感器读出噪声、暗电流噪声、热噪声,这些在低ISO时可能不明显,但ISO一高,它们全冒出来了。我建议:能用曝光时间解决的问题,别用ISO。

2.3 暗电流与热噪声

这两个是低光照成像的“天敌”。你想想看,在暗光下,信号本身就很弱,如果传感器自己还在“发热”产生额外的电子,那画面里就会出现不该有的亮点和条纹。

2.3.1 暗电流

暗电流,就是没有光照时,传感器像素里自发产生的电子。它来源于硅材料的热激发——温度越高,电子越容易从价带跃迁到导带。暗电流的大小跟温度呈指数关系。

我记得有一次做安防摄像头的低光照测试,把相机放在室外零下10度的环境里,暗电流几乎可以忽略。但夏天室内30度时,暗电流直接翻了好几倍。这就是为什么高端相机有制冷模块——把传感器温度降到零下几十度,暗电流就几乎为零了。

注意:暗电流不是均匀分布的。每个像素的暗电流大小不同,这会导致“固定模式噪声”(FPN)。在长曝光(比如几秒甚至几十秒)的低光照拍摄中,暗电流会积累成明显的亮斑或条纹。我曾经用一台手机拍30秒的星空,结果画面里全是暗电流造成的“热像素”,星星反而看不清了。

2.3.2 热噪声

热噪声,也叫约翰逊-奈奎斯特噪声(Johnson-Nyquist noise),是电子在导体中随机热运动产生的。它跟温度有关,跟频率无关——也就是说,所有频率上都有,属于白噪声的一种。

热噪声在CMOS传感器里主要影响读出电路。放大器、ADC这些模拟电路都会产生热噪声。温度每升高10度,热噪声功率大约增加3 dB。

我个人的经验是:在低光照增强算法里,热噪声是最难处理的。因为它随机性太强,时域滤波(比如多帧平均)效果不错,但会引入运动伪影。空域滤波(比如双边滤波)能保留边缘,但容易把细节磨平。

2.3.3 暗电流与热噪声的对比

特性 暗电流 热噪声
来源 硅材料热激发 电子随机热运动
与温度关系 指数关系 线性关系(功率)
与曝光时间关系 线性积累 不积累(每帧独立)
空间分布 固定模式(FPN) 随机分布
频率特性 低频为主 白噪声(全频)
抑制方法 暗帧减除、制冷 时域/空域滤波

核心结论:低光照增强的第一步,不是增强信号,而是抑制噪声。暗电流可以通过“暗帧减除”来校正——拍一张完全遮光的帧,记录每个像素的暗电流值,然后从正常帧里减去。热噪声则需要更复杂的滤波算法。我在项目中经常把这两种噪声分开处理:先做暗帧减除去掉FPN,再做时域滤波去掉热噪声。