图像传感器基础:CMOS vs CCD、像素与分辨率、帧率与曝光控制、Bayer阵列原理
图像传感器,说白了就是相机的「视网膜」。光信号进来,它负责转成电信号。我入行那会儿,CCD还是主流,CMOS被嫌弃噪声大。现在嘛,风水轮流转,CMOS几乎一统天下。但两种技术的内核,你都得吃透。
CMOS vs CCD:两种架构的博弈
先看一张对比表,把核心差异说清楚:
| 对比维度 | CCD(电荷耦合器件) | CMOS(互补金属氧化物半导体) |
|---|---|---|
| 读出方式 | 逐行转移,统一输出 | 每个像素独立寻址读出 |
| 功耗 | 较高(需要多路高压时钟) | 低(单电源,静态功耗几乎为零) |
| 噪声 | 低(读出路径单一,一致性高) | 较高(像素级放大器失配导致固定模式噪声) |
| 速度 | 慢(串行读出,帧率受限) | 快(并行读出,轻松上百帧) |
| 集成度 | 低(需要外部驱动芯片) | 高(ADC、DSP、接口可集成在同一晶圆) |
| 成本 | 高(特殊工艺,良率低) | 低(标准CMOS工艺,量大管饱) |
我个人习惯,选型时先看应用场景。工业检测、天文摄影这些对噪声极度敏感的场景,老款CCD仍有优势。但消费电子、安防监控、车载视觉,CMOS是唯一选择。为什么?因为CMOS能跑高帧率,能集成ISP,能省电。我做过一个无人机项目,用CCD的话,电池撑不过10分钟,换成CMOS直接翻倍。
像素与分辨率:不是越大越好
分辨率 = 水平像素数 × 垂直像素数。比如1920×1080,约200万像素。但像素数量只是故事的一半。
真正决定图像质量的是像素尺寸。单个像素越大,感光面积越大,信噪比越高。我见过不少新手,一味追求高像素,结果暗光下全是噪点。
举个例子:
- 索尼IMX586:4800万像素,单像素0.8μm。白天细节丰富,晚上……嗯,需要像素合并。
- 豪威OV64B:6400万像素,单像素0.7μm。更小,但支持4合1输出1600万像素,等效1.4μm。
这里有个关键概念——像素合并(Binning)。把相邻2×2的像素当成一个用,分辨率降为1/4,但感光面积增大4倍,信噪比提升约6dB。我调试车载摄像头时,夜间模式就靠这个。
帧率与曝光控制:时间维度的博弈
帧率(FPS)和曝光时间(Shutter Speed)是一对冤家。帧率决定时间分辨率,曝光时间决定亮度。两者乘积不能超过1——这是硬约束。
公式很简单:
最大帧率 ≤ 1 / (曝光时间 + 读出时间 + 消隐时间)
举个例子:你要拍60fps的视频,每帧可用时间约16.67ms。如果曝光时间设为10ms,剩下6.67ms给读出和消隐。如果传感器读出速度不够,帧率就上不去。
曝光控制有两种模式:
- 卷帘快门(Rolling Shutter):逐行曝光,逐行读出。成本低,但拍快速运动物体会出现「果冻效应」。我调试过一台高速贴片机视觉系统,用卷帘快门拍芯片,图像歪得像面条——后来果断换了全局快门。
- 全局快门(Global Shutter):所有像素同时曝光,同时读出。没有果冻效应,但像素内需要额外存储单元,填充率降低,暗光性能略差。
Bayer阵列原理:彩色世界的起点
单像素只能感知亮度,分不清颜色。怎么办?在像素表面覆盖彩色滤光片,让每个像素只响应一种颜色。最常见的模式就是Bayer阵列——RGGB。
为什么是RGGB,不是RGBG?因为人眼对绿色最敏感,所以绿色像素数量是红蓝的两倍。这样能更好地模拟人眼视觉特性。
看一张Bayer阵列的结构图:
Bayer原始数据是灰度的——每个像素只有一个颜色通道的值。要得到全彩图像,必须做去马赛克(Demosaicing),也叫插值。最简单的办法是双线性插值:缺失的绿色值用周围四个绿色像素平均,红蓝值用对角邻居平均。
但实际工程中没人用这么糙的方法。我常用的算法是:
- 边缘导向插值:先检测边缘方向,沿边缘方向插值,避免锯齿。
- 自适应插值:根据局部梯度调整插值权重,保留更多细节。
- 基于机器学习的插值:训练一个轻量CNN,直接从Bayer数据恢复全彩。效果最好,但算力要求高。
从传感器到图像:完整的数据流
把上面几个知识点串起来,看看一张照片从传感器到内存的完整路径:
嗯,到这里,图像传感器的基础知识就铺完了。CMOS和CCD的选型、像素与分辨率的权衡、帧率与曝光的博弈、Bayer阵列的原理——这些是后续所有图像处理算法的地基。地基不稳,上层建筑再漂亮也是空中楼阁。