2、传感器物理:从光子到电子,噪声是怎么产生的?——读出噪声、散粒噪声、热噪声
做暗光HDR去噪,绕不开一个根本问题:噪声到底从哪来的?
很多人调了一堆降噪参数,效果还是不行。为什么?因为你没搞懂噪声的物理根源。我刚开始接触传感器时也踩过这个坑——拿着示波器对着模拟前端一顿猛调,结果发现噪声根本没降多少。后来才明白,噪声不是电路设计的问题,而是物理定律的锅。
这一章,我们就从光子到电子的全过程,把三种核心噪声讲清楚。
2.1 从光子到电子的旅程
先看一张整体流程图,帮你建立全局认知:
这张图展示了信号从光子到数字值的完整路径。每个环节都会引入噪声,而且这些噪声是相互独立的。总噪声是它们的平方和开根号——也就是所谓的均方根叠加。
2.2 散粒噪声:光子的量子本性
散粒噪声,也叫光子散粒噪声。它来自光的量子特性。
你想想看,光是由一个个光子组成的。到达传感器的光子数量,不是一个固定值,而是服从泊松分布的随机变量。也就是说,即使场景亮度完全不变,每个像素接收到的光子数也会上下波动。
关键公式:
散粒噪声的标准差 = √(信号电子数)
信噪比(SNR) = 信号电子数 / √(信号电子数) = √(信号电子数)
这意味着什么?信号越强,散粒噪声的值越大,但信噪比反而越高。暗光下信号弱,散粒噪声就成了主要限制因素。
我在项目中遇到过一个问题:用同一颗传感器拍暗光场景,降噪算法在亮区效果很好,暗区却全是颗粒感。后来一分析,暗区信号只有几十个电子,散粒噪声的信噪比只有7~8dB,再怎么滤波也救不回来。这就是物理极限。
实战经验:
暗光下散粒噪声占主导时,不要指望单帧降噪能完美恢复细节。这时候多帧融合才是正道——通过多帧平均,把散粒噪声的方差降下来。
2.3 热噪声:温度带来的麻烦
热噪声,也叫暗电流噪声或约翰逊-奈奎斯特噪声。它来自半导体内部的热运动。
说白了,温度会让半导体中的电子获得能量,即使没有光照,也会产生电子-空穴对。这些“凭空产生”的电子,会被势阱收集,形成暗电流。
| 温度 | 暗电流典型值 | 对暗光的影响 |
|---|---|---|
| 25°C(室温) | 10~50 e⁻/s | 长曝光时明显 |
| 40°C(手机内部) | 50~200 e⁻/s | 1秒以上曝光就不可忽略 |
| 60°C(极限工况) | 500~2000 e⁻/s | 严重,必须主动散热 |
热噪声有两个特点:
- 与曝光时间成正比——曝光越长,暗电流积累越多
- 与温度呈指数关系——温度每升高6~8°C,暗电流翻倍
我记得有一次做安防摄像头的HDR项目,客户反馈夜间长曝光画面全是“雪花”。排查了半天,发现是传感器温度到了55°C。后来加了散热片,温度降到35°C,暗电流降了将近一个数量级,画面干净多了。
避坑指南:
我曾经在算法上花了两周调参数,试图用滤波去掉热噪声,效果始终不理想。后来才意识到,热噪声在长曝光下是空间非均匀的——不同像素的暗电流不一样。单纯的空域滤波会留下固定图案噪声(FPN)。正确的做法是先做暗场校正,再做时域滤波。
2.4 读出噪声:电路的不完美
读出噪声,是电荷从势阱转移到读出电路、再转换成电压、最后被ADC量化的过程中引入的噪声。
它和信号强度无关,是一个固定底噪。无论你拍的是亮场景还是暗场景,读出噪声都一样大。
读出噪声的主要来源:
- 复位噪声(KTC噪声)——复位晶体管关断时,电容上的热噪声被冻结
- 源跟随器噪声——像素内放大器的1/f噪声和热噪声
- ADC量化噪声——模数转换的量化误差
- 列放大器噪声——列并行读出的放大器噪声
典型数值:
消费级CMOS传感器:读出噪声 2~5 e⁻ rms
工业级/科学级传感器:读出噪声 1~2 e⁻ rms
高端sCMOS:读出噪声 < 1 e⁻ rms
读出噪声在暗光下特别致命。为什么?因为暗光信号可能只有10~20个电子,读出噪声就有3个电子,信噪比直接掉到10dB以下。这时候你看到的不是图像,是噪点。
2.5 三种噪声的对比与实战取舍
| 噪声类型 | 来源 | 与信号的关系 | 与温度的关系 | 与曝光时间的关系 | 暗光下的影响 |
|---|---|---|---|---|---|
| 散粒噪声 | 光子的量子随机性 | √(信号) | 无关 | √(时间) | 主要限制 |
| 热噪声 | 半导体热运动 | 无关 | 指数上升 | 线性增加 | 长曝光时严重 |
| 读出噪声 | 电路不完美 | 无关(固定底噪) | 轻度相关 | 无关 | 极暗时占主导 |
实战中怎么判断哪种噪声占主导?我有个简单方法:
- 拍一张全黑帧(盖上镜头盖),看读出噪声的底噪水平
- 拍一张均匀灰卡,改变曝光时间,看噪声随曝光的变化曲线
- 如果噪声随曝光时间线性增长,热噪声占主导
- 如果噪声随曝光时间平方根增长,散粒噪声占主导
- 如果噪声不随曝光变化,读出噪声占主导
我的个人习惯:
做HDR去噪算法时,我会先做噪声标定,把三种噪声的系数拟合出来。这样在算法里就可以针对不同亮度区间采用不同的去噪策略——亮区用轻滤波,暗区用重滤波,中间区做自适应过渡。效果比一刀切的降噪好得多。
2.6 小结:噪声是物理定律,不是bug
三种噪声,各有各的脾气。散粒噪声是量子力学决定的,你改不了;热噪声是热力学决定的,你可以降温;读出噪声是电路设计决定的,你可以选更好的传感器。
做HDR去噪,第一步不是调算法参数,而是搞清楚你的噪声从哪来、长什么样、有多大。只有摸清了噪声的底细,才能对症下药。