3. 传感器与镜头:成像系统的两只眼睛
做图像质量调优,说白了就是在跟两个硬件打交道:镜头和传感器。一个负责「看」,一个负责「记」。我见过不少团队,算法调得天花乱坠,结果换颗镜头全白费。嗯,今天我们就把这俩东西彻底讲透。
3.1 CMOS 传感器工作原理
CMOS 传感器现在基本一统天下了。它的核心原理其实不复杂:每个像素点就是一个光电二极管,光子打上去产生电子,电子数量转化成电压,再通过 ADC 变成数字值。
但这里有个关键——读出方式。CMOS 是每个像素自带放大器,逐行扫描读出。这跟 CCD 的全局传输完全不同。
核心流程:
- 光电转换:光子 → 电子(量子效率 QE 决定转换比例)
- 电荷积累:电子存储在像素的浮置扩散区(FD)
- 电压转换:FD 电容将电荷转为电压(转换增益 CG)
- 模拟读出:行选通 → 列采样 → PGA 放大
- 数字化:ADC 将模拟电压转为数字码值
我在一个手机项目里遇到过怪事:暗光下画面偏绿,怎么调白平衡都没用。后来查出来是传感器在低照度下,绿色通道的转换增益曲线跟红蓝通道不一致。嗯,这就是传感器级别的非线性,算法层根本补不回来。
3.2 镜头光学特性
镜头这东西,看着就是几片玻璃,但它的光学特性直接决定了图像的天花板。我习惯从三个维度去评估:MTF、畸变、色差。
3.2.1 MTF(调制传递函数)
MTF 是衡量镜头解析力的核心指标。说白了就是:镜头能把黑白条纹的对比度保留多少。
MTF 曲线通常横轴是空间频率(lp/mm),纵轴是对比度保留率。100% 是完美,0% 是完全糊掉。
| 空间频率 | 典型 MTF 值(好镜头) | 典型 MTF 值(普通镜头) | 说明 |
|---|---|---|---|
| 10 lp/mm | ≥ 0.9 | ≥ 0.7 | 低频,决定整体对比度 |
| 30 lp/mm | ≥ 0.6 | ≥ 0.4 | 中频,决定细节清晰度 |
| 50 lp/mm | ≥ 0.3 | ≥ 0.15 | 高频,决定极限分辨率 |
我的经验:调 ISP 的锐化参数时,一定要先看镜头的 MTF 曲线。如果镜头在 30 lp/mm 已经掉到 0.3 以下,锐化开再大也没用,反而会出振铃。我曾经在一个安防项目里,硬是把锐化强度降了 40%,画面反而更自然了。
3.2.2 畸变
畸变就是直线拍出来变弯了。分两种:桶形畸变(画面中间鼓出来)和枕形畸变(画面四角拉出去)。
广角镜头桶形畸变尤其严重。我做过一个车载环视项目,四颗广角镜头拼全景图,畸变校正算法写得再好,镜头本身的畸变一致性不行,拼接处就是会有错位。
注意:畸变校正会损失边缘分辨率。因为校正时需要对图像做重采样,边缘像素会被拉伸。校正量越大,边缘越糊。所以镜头设计时畸变控制在 2% 以内是比较理想的。
3.2.3 色差
色差就是不同颜色的光经过镜头后,聚焦点不在同一个平面上。表现出来就是物体边缘有紫边或绿边。
色差分两种:
- 轴向色差:不同颜色光在光轴方向聚焦位置不同
- 横向色差:不同颜色光在像平面上的放大率不同
横向色差更难校正,因为它跟视场角有关——画面边缘的色差比中间严重得多。我记得有一次做医疗内窥镜项目,镜头的横向色差到了 3 个像素,算法怎么去紫边都去不干净,最后只能换镜头模组。
3.3 传感器噪声模型
噪声是图像质量的死敌。做图像调优,不懂噪声模型,就像医生不懂病理。我习惯把传感器噪声分成三类:
3.3.1 散粒噪声(Shot Noise)
这是物理极限,躲不掉的。光子到达是泊松过程,光子数越多,噪声的值越大,但信噪比反而越高。这就是为什么暗光下噪点特别明显——信号弱,噪声占比大。
散粒噪声的方差等于信号强度。用公式表示:
σ_shot² = μ
SNR_shot = μ / √μ = √μ
所以提高信噪比最直接的办法就是——增加进光量。大像素、大光圈、长曝光,都是这个道理。
3.3.2 读出噪声(Read Noise)
读出噪声是传感器读出电路引入的,跟信号强度无关。包括:
- 像素源跟随器的热噪声
- 列 ADC 的量化噪声
- 行选通开关的 KT/C 噪声
读出噪声在暗光下是主要限制因素。我调过一颗传感器,读出噪声标称 2e⁻,但实际测出来有 3.5e⁻。查了半天,发现是电源纹波耦合进了模拟读出链路。嗯,硬件设计的问题,算法再强也救不了。
3.3.3 固定模式噪声(FPN)
FPN 是空间上的固定噪声,每颗传感器都有自己的「指纹」。分两种:
- DSNU(暗信号非均匀性):无光照时各像素的暗电流差异
- PRNU(光响应非均匀性):均匀光照下各像素的增益差异
FPN 可以通过标定来校正。我做过一个工业检测项目,要求 12bit 精度,FPN 必须校到 1 LSB 以内。做法是拍一张暗场、一张均匀亮场,然后逐像素做两点校正。
噪声模型总结:
| 噪声类型 | 来源 | 与信号关系 | 典型值 | 校正方法 |
|---|---|---|---|---|
| 散粒噪声 | 光子随机性 | √信号 | 10-100 e⁻ | 增加曝光/多帧降噪 |
| 读出噪声 | 读出电路 | 常数 | 1-5 e⁻ | 降低温度/优化电源 |
| FPN | 像素工艺差异 | 常数或线性 | 0.1-1% | 标定校正 |
3.4 传感器与镜头的协同设计
镜头和传感器不是各自为战的。我见过最典型的坑是:选了一颗高分辨率传感器(比如 48MP),配了一颗廉价镜头。结果传感器的像素尺寸只有 0.8μm,镜头的 MTF 在奈奎斯特频率附近已经掉到 0.1 以下。拍出来的照片,放大看全是糊的,48MP 还不如人家 12MP 清楚。
这里有个匹配原则:镜头的极限分辨率要高于传感器的奈奎斯特频率。传感器的奈奎斯特频率是像素尺寸的倒数的一半:
f_nyquist = 1 / (2 × pixel_pitch)
比如像素尺寸 1.4μm,奈奎斯特频率就是 357 lp/mm。镜头的 MTF 在 357 lp/mm 处至少要大于 0.2,才能保证传感器不浪费。
我的建议:做系统选型时,先定传感器,再根据传感器的像素尺寸和靶面大小,反推镜头需要的 MTF 指标。别只看分辨率数字,要看「系统 MTF」——镜头 MTF × 传感器 MTF × 算法 MTF。
这张图把整个成像链路串起来了。你会发现,每个环节都在给图像质量「做减法」——镜头损失对比度,传感器注入噪声,ISP 算法只能尽量补救,但补不回已经丢失的信息。
所以做图像质量调优,第一步不是调算法,而是把镜头和传感器的底牌摸清楚。MTF 曲线、噪声模型、畸变数据,这些是调优的「先验知识」。没有这些,调参就是瞎蒙。