图像传感器与曝光:CCD与CMOS传感器原理
做图像质量优化,绕不开传感器。说白了,传感器就是相机的「视网膜」。你曝光算法调得再好,传感器底子不行,一切都是白搭。我个人习惯,拿到一款新平台,第一件事就是去翻传感器的datasheet,看它的满阱容量和读出噪声。这两个参数,直接决定了你的动态范围能做多宽。
CCD与CMOS:两种主流传感器架构
先聊聊CCD和CMOS的区别。很多刚入行的朋友觉得这是老掉牙的话题,但我在项目中遇到过好几次,因为选错传感器类型,导致整个ISP pipeline重做的情况。嗯,这里要注意。
| 对比项 | CCD | CMOS |
|---|---|---|
| 读出方式 | 电荷逐行转移,统一输出 | 每个像素独立放大、ADC转换 |
| 噪声水平 | 低(读出噪声约2-5 e⁻) | 较高(读出噪声约5-20 e⁻) |
| 功耗 | 高(需要多路高压时钟) | 低(单电源供电) |
| 速度 | 慢(串行读出) | 快(并行读出,支持高帧率) |
| 成本 | 高(特殊工艺) | 低(标准CMOS工艺) |
| 主流应用 | 科研、天文、高端工业 | 手机、安防、汽车、消费电子 |
你想想看,为什么手机摄像头清一色用CMOS?因为要低功耗、高帧率、还要集成ISP逻辑。CCD虽然画质干净,但那个功耗和速度,手机根本扛不住。我做过一个工业检测项目,客户非要上CCD,结果帧率卡在15fps,产线根本跑不起来。后来换了全局快门CMOS,问题才解决。
核心结论:CMOS是消费电子的主流,CCD在特定高画质、低帧率场景仍有优势。做曝光算法时,CMOS的卷帘快门效应(Rolling Shutter)是必须处理的坑。
传感器动态范围:你能看到多亮和多暗
动态范围(DR)是传感器最重要的指标之一。公式很简单:
DR = 20 * log10(满阱容量 / 读出噪声) 单位:dB
举个例子,一个传感器满阱容量60000 e⁻,读出噪声5 e⁻,那它的动态范围就是:
DR = 20 * log10(60000 / 5) = 20 * log10(12000) ≈ 81.6 dB
81.6 dB什么概念?大约能区分13.6档曝光(每6 dB一档)。我建议你把这个公式刻在脑子里,因为后面讲HDR融合、多帧合成时,全都要用到它。
个人经验:我曾经调试一款安防摄像头,发现暗部噪声特别大。查了半天,发现是传感器驱动配置错了,读出噪声从5 e⁻飙到了15 e⁻,动态范围直接掉了9.5 dB。所以,驱动配置一定要仔细核对。
满阱容量与读出噪声:曝光的天花板和地板
满阱容量(Full Well Capacity)决定了传感器能存多少电子。读出噪声(Read Noise)决定了你能分辨的最小信号。这两个参数,一个管上限,一个管下限。
- 满阱容量大 → 高光不容易饱和,适合拍亮场景
- 读出噪声低 → 暗部细节丰富,适合拍暗场景
- 两者比值 → 决定了单帧的动态范围
我遇到过最头疼的问题,是某款传感器的满阱容量标称70000 e⁻,但实际测下来只有45000 e⁻。为什么?因为像素的pinning层工艺有缺陷,电子还没存满就漏掉了。所以,永远不要完全相信datasheet,拿到实物一定要做标定。
避坑指南:我曾经在量产前发现,某批次传感器的满阱容量一致性很差,同一片wafer上,不同像素的满阱容量能差30%。这直接导致HDR合成时出现亮度跳变。解决方案是在标定阶段做像素级满阱容量校正。
量子效率与灵敏度:光转电的效率
量子效率(QE)就是光子转换成电子的比例。QE 50%意味着每两个光子才能产生一个电子。灵敏度则通常用单位lux下的输出信号来衡量。
| 波长 | 典型QE(背照式CMOS) | 典型QE(前照式CMOS) |
|---|---|---|
| 450 nm(蓝) | 60-70% | 40-50% |
| 550 nm(绿) | 75-85% | 55-65% |
| 650 nm(红) | 65-75% | 45-55% |
背照式(BSI)为什么比前照式(FSI)灵敏?因为光线不用穿过金属布线层,直接打到光电二极管上。我做过对比测试,BSI在暗光下的信噪比能比FSI高3-5 dB。所以现在旗舰手机清一色BSI,就是这个道理。
灵敏度还有一个重要指标:转换增益(Conversion Gain)。它决定了每个电子能产生多少电压。高转换增益有利于低光性能,但会压缩满阱容量。低转换增益则相反。很多现代传感器支持双转换增益(DCG),就是让你在不同光照条件下切换。
实战要点:做曝光算法时,QE和灵敏度决定了你的最小曝光时间。如果QE太低,暗光下必须拉长曝光时间,但手抖和运动模糊就来了。这时候就需要多帧降噪或者闪光灯来补。
知识体系总览
下面这张图,是我自己总结的传感器曝光核心逻辑。你看一遍,应该能对整个体系有个全局印象。
这张图把传感器类型、核心参数、衍生指标和曝光算法串在了一起。你从顶层往下看,就能理解为什么曝光算法不能脱离传感器物理特性来设计。
实战中的参数权衡
做曝光算法,本质上是在这几个参数之间做权衡:
- 满阱容量 vs 灵敏度:像素做大,满阱容量大,但分辨率下降;像素做小,灵敏度高,但满阱容量小。
- 动态范围 vs 信噪比:提高模拟增益可以提升暗部信噪比,但会压缩动态范围。
- 帧率 vs 曝光时间:高帧率下,每帧的曝光时间被压缩,暗光性能下降。
我建议你在做曝光策略时,先搞清楚传感器的这几个关键参数,然后根据场景需求做取舍。比如夜景模式,我倾向于降低帧率、拉长曝光时间、配合多帧合成;而运动场景,我宁愿牺牲一点动态范围,也要保证帧率和短曝光。
一个小技巧:很多传感器支持「行交织HDR」模式,就是在一帧内,不同行用不同的曝光时间。这能有效提升动态范围,但会引入行间亮度差异。我一般会在ISP里做行间校正,把差异抹平。