
干图像传感器这行有年头了从CCD时代一路看到CMOS成为绝对主流每次有人问我“CCD和CMOS到底哪个好”我都想先反问一句你手里拿到的是一颗sensor还是一条完整的信号处理链路因为很多问题的答案根本不在sensor内部而在它后面的那一堆处理电路和算法里。这篇内容写给刚入行的嵌入式工程师、做相机模组的硬件同学、以及所有想搞懂“图像传感器与信号处理”这个组合到底是什么的读者。我会把CCD和CMOS的工作原理、模拟前端、数字ISP链路、选型参数和现场排查经验一次讲清楚。1. 图像传感器到底在解决什么问题1.1 从光子到比特传感器不是一个人干完所有事图像传感器做的事情说白了就两件把光子变成电荷再把电荷变成电压、电流最后通过ADC变成数字码。传感器本身只负责“光电转换读出”至于你看到的这张照片为什么颜色是对的、暗部没有那么多噪点、亮部没有一片死白这些绝大部分是后面信号处理的功劳。整条链路大致是这样的镜头把场景成像到感光面上感光面上的像素光电二极管吸收光子产生电子电子在势阱里积累曝光结束后电荷被转移到读出电路转换成电压电压经过列放大器和相关双采样CDS消掉一部分噪声再经过模数转换变成数字RAW数据RAW数据进入ISP图像信号处理器做黑电平校正、去马赛克、白平衡、色彩校正、降噪、伽马矫正、锐化最后输出你屏幕上看到的图像。很多人有个误区以为sensor一上电就能出好图。我调试过的模组里同样的CMOS芯片ISP调得好不好画质能差出两个档次。尤其在低照度场景下噪声处理的好坏直接决定画面能不能看。所以“图像传感器与信号处理”从来不是两个独立话题而是一条必须一起设计的完整信号链。1.2 为什么CCD和CMOS被放在一起比较先说名字CCD是“电荷耦合器件”CMOS是“互补金属氧化物半导体工艺”。严格说一个叫器件一个叫工艺两者不是同一个维度上的东西。后来大家说“CMOS图像传感器”指的是用标准CMOS工艺做出来、并且把读出电路集成在芯片内部的那种图像传感器。为什么老有人拿它们比因为CCD曾是高质量成像的代名词而CMOS刚出来的时候噪声大、一致性差只能用在低端摄像头和对图像要求不高的场景。后来CMOS工艺不断成熟再加上背照式BSI、堆栈式Stacked结构出现画质和功能全面反超CCD逐步退居到工业、科学、医疗等少数领域。比来比去最核心的差异只有一句话CCD是“电荷在芯片里整体搬运”CMOS是“在每个像素或列级就地读出”。这两种架构决定了噪声、速度、功耗、快门方式也决定了它们在信号处理链路上的处理逻辑完全不同。后面我分开讲。2. CCD与CMOS的工作原理拆解2.1 CCD的本质电荷在硅里“排队上车”CCD工作时像素里的光电二极管把光子变成电子电子存储在像素的势阱中。曝光结束后这些电荷不是就地读出来而是通过一组垂直移位寄存器一行一行地向下传最后进入水平移位寄存器再被送到芯片边缘唯一的一个电荷-电压转换放大器上。这个过程可以理解成一趟“集体上车”的旅程整个感光区域的人电荷按顺序排队从前门上车再从后门下车全车只有一个出口。这样做有一个非常大的好处所有像素的电荷都经过同一个放大器完成转换。放大器本身的增益波动、偏移特性是“全局一致”的所以输出的一致性很好固定图形噪声FPN很低。这也是CCD在低噪声、高均匀性场合依然被用的原因。但代价也很明显。电荷要一级一级串行转移读出速度注定快不了驱动CCD需要多相时钟和较高的电压功耗和外围电路都比CMOS复杂电荷搬运过程中还会碰到“溢出”的问题——强光下某个像素势阱装不下电荷就会往旁边扩散产生竖白条状的高光溢出blooming。另外CCD制造需要特殊工艺没法把ADC、ISP等大逻辑电路做进同一颗芯片里系统集成度低。2.2 CMOS的本质每个像素都有一间“小办公室”CMOS图像传感器的思路完全反过来。每个像素除了光电二极管还集成了几个晶体管传输门、复位管、源极跟随器、行选管典型结构叫“4T像素”。曝光结束后电荷就在像素内部被源极跟随器转换成电压再通过行选管和列总线输出到列放大器最后在列级或片内完成ADC。这相当于每个像素都有一间自己的“小办公室”前台接待、财务核算都是就地完成的不用全公司排队走一个出口。好处显而易见读出速度快可以随机访问某一区域功耗低而且能把时序控制、ADC、甚至一部分ISP逻辑都集成到同一块硅片上。因为用的是标准CMOS工艺制造成本也低集成度极高。CMOS的短板则在“每个像素都有自己的放大器”这句话里——像素之间的放大器参数不可能做到完全一致于是产生了固定图形噪声像素内晶体管的数量多了感光面积占比填充因子相对小早期灵敏度不如CCD像素本身的复位噪声、1/f噪声也更明显。好在这类问题在模拟前端做CDS、数字端做降噪后已经处理得很干净。补充一点CMOS图像传感器里面的大量行选、列选、时序控制逻辑其实就是标准CMOS数字电路。你在课本上画的CMOS反相器、传输门、D触发器在sensor的行解码器、列采样保持电路里都能找到影子。所以做嵌入式CMOS调试时如果你数字电路基础扎实看datasheet里的内部框图会顺很多。2.3 快门机制全局快门和卷帘快门隔着一条“果冻”CCD几乎天然就是全局曝光概念所有像素先同时曝光然后把电荷整体搬运曝光起点和终点在整幅画面上是一致的。CMOS则不然常见做法是逐行曝光、逐行读出每一行的曝光起始时间不同称为卷帘快门Rolling Shutter。卷帘快门在拍静止物体时没问题但拍高速运动的物体就会出“果冻效应”竖的物体变斜了转动的风扇叶片扭曲了。另一个典型场景是拍LED屏或低频灯光画面会出现横向明暗条纹这是曝光行与光源闪烁频率打架造成的。工业检测、运动场景、摄影棚拍摄如果要避免这些就得选全局快门CMOS或干脆上CCD。现在很多CMOS传感器支持全局快门模式比如在像素内增加存储节点先把电荷存住再统一读出。全局快门CMOS在机器视觉里已经很普遍但代价是像素面积变大、填充因子受影响低照性能通常不如同尺寸的卷帘快门设计。所以选型时首先要想清楚拍静物还是拍运动强光还是弱光3. 信号处理链路从RAW到“能看的图”3.1 模拟前端CDS到底消掉了什么噪声电荷变成电压后不等于可以直接做ADC。这个环节里最难处理的是复位噪声也叫KTC噪声。像素在复位后会留下一个不确定的电压残量这个残量随每次复位随机变化如果直接采样图像就会出现随机的水平亮带和雪花噪点。解决办法是相关双采样简写CDS。做法是在曝光后的第一次复位电平时刻采一个样再在电荷转移完成后的信号电平时刻采另一个样两相减。因为复位噪声在两次采样间隔内基本保持不变相减之后就被抵消掉了。这个思想在CCD和CMOS里都有应用只是实现位置不同CCD在输出放大器之后集中做CMOS通常在像素列级做。CDS不是万能的。它能消掉与复位相关的低频固定噪声但对一定频率以上的随机热噪声无能为力。这也是为什么低照度下提高增益时图像还是会看起来“脏脏的”那部分噪声已经不属于可被CDS消除的范畴只能靠数字降噪。3.2 ADC与列并行读取模拟量转数字量的位置和速度直接影响传感器能做到多高帧率。CCD时代通常只有一两个高速ADC整个画面串行转换所以帧率上不去。CMOS则流行“列并行ADC”每列或每几列配一个ADC整行像素同时转换转换速度大幅提升这也是CMOS能做到高帧率的重要原因。ADC位数也很关键。常见的有10bit、12bit、14bit专业领域还有16bit。位数越多动态范围描述越细腻但数据量和功耗也更大。实际调试时要注意一个容易被忽略的点传感器输出的“bit数”不一定是“有效bit数”。有些sensor标12bit ADC但噪声基底很高后8位全是跳码实际有效位数ENOB可能不到10bit。看sensor技术文档时要特别留意read noise和dynamic range别被标称位数忽悠。3.3 数字信号处理去马赛克、白平衡、降噪、伽马RAW数据到了ISP之后才是“信号处理”真正发力的地方。第一步是黑电平校正。传感器在无光情况下输出电压并不为零要把这个偏置减掉。第二步是去马赛克。大部分CMOS用的是Bayer滤色阵列像素按RGGB或类似方式排列每一个像素只采集红、绿、蓝中的一个通道另一个缺失的两个通道要靠周围像素插值算出来。这个插值算法做不好就会出现彩色锯齿、伪色边缘发虚。第三步是白平衡。场景色温不同红色、蓝色通道的增益要分别调整否则白纸会拍成黄纸或蓝纸。高品质方案是先估算场景色温再计算出R、G、B通道增益保证中性色不发偏。第四步是色彩校正矩阵CCM。因为传感器滤色片的光谱响应和人眼不一样必须在RGB通道之间做一次线性变换把颜色拉回人眼感知的范围。第五步是降噪。常见做法是空域降噪时域降噪静态场景时把多帧平均运动区域则用边缘保留滤波。降噪力度过大会涂抹细节过小会留下明显颗粒感这个平衡点非常考验调校经验。最后一步是伽马校正。sensor的光电响应是近似线性的暗部信号很弱、亮部信号很强直接显示会暗部死黑、亮部刺眼。伽马校正把信号做非线性映射让暗部的相对变化更可见这是整个链路里“改变观感”最明显的一步。3.4 别忘了时序VSYNC、HSYNC、PCLK和曝光搞硬件的同学肯定对这组信号不陌生VSYNC帧同步、HSYNC行同步、PCLK像素时钟。sensor输出图像数据不是“一次给一张图”而是一行行地给帧、行、像素靠这组同步信号对齐。嵌入式调试里最常出的问题之一就是采集端的时序没对好。比如PCLK极性设反了图像会整体左右偏移或出现斜纹VSYNC有效电平搞错图像会上下跳HSYNC延迟设置不对每一行图像会错位。这些都不是sensor坏了而是主控端camera接口的时序配置和sensor datasheet不一致。曝光时间也不是随便设的。常见sensor通过I2C或者SPI寄存器设置曝光行数实际曝光时间曝光行数×行时间。如果你发现画面亮度按倍数跳变而不是线性变化大概率是寄存器位宽没看对或者曝光单位不是线而是行。调试时养成先抓时序、再调曝光、最后动增益的习惯会省去大量返工。4. 参数解读与选型实操4.1 那些标称参数怎么读选型看datasheet最容易看晕的就是一堆参数。我的习惯是优先看这几个像素尺寸Pixel Size比分辨率重要得多。像素越大单个像素能收集的光子越多信噪比越好。同样200万像素一颗1/1.7英寸靶面的sensor和一颗1/2.7英寸靶面的sensor低照度画质差得非常明显。满阱电荷Full Well Capacity决定单像素最多能存多少电子直接影响高光不过曝的能力。满阱越大动态范围上限越高。读出噪声Read Noise通常以电子数e-为单位。它是画质下限的核心参数同样暗光下读出噪声越低能看到的暗细节越多。动态范围一般用满阱电荷除以读出噪声来估算常用dB表示。举个例子满阱50000e-、读出噪声2e-的动态范围是20×log(50000/2)约88dB。高端sensor的HDR方案会用多次曝光合成或分段增益扩展这个数字会更高。暗电流Dark Current是温度敏感型参数温度每升高六七摄氏度暗电流大约翻一倍。长时间曝光的天文、工业检测场景必须考虑制冷或暗场校正否则画面泛灰暗部全是伪色。4.2 选型思路先定场景再挑sensor很多新手选型是先定分辨率再找同分辨率里便宜的sensor这是典型的本末倒置。正确顺序应该是先定拍摄对象。产品是拍照手机、安防IPC还是机器视觉检测拍照偏静态、高画质选卷帘快门大像素的CMOS机器视觉运动工件往往要全局快门避免运动畸变天文/科研要极低暗电流和极高动态范围CCD依然有战场。再定光学格式。sensor靶面要和镜头匹配1/3英寸的sensor配1/1.8英寸的镜头没问题但反过来会浪费很多光线和视场。很多“画面暗、边缘糊”的问题其实是靶面搭配错了。然后定接口和功耗。手机SoC平台通常接MIPI CSI接口工业相机常用LVDS或GigE嵌入式低功耗项目可能只用DVP并行接口。接口选错后面主控压根没得聊。最后再比较同档位sensor的动态范围、噪声、HDR能力和sensor技术文档的完善程度。文档写得好的sensor调试周期能短一半。4.3 我踩过的坑只看分辨率不看像素尺寸说个真实经历。有次做一个低照度摄像头项目我一开始选了颗800万像素的小靶面sensor想着像素数高开启来很专业。结果实测暗光环境全是噪点画面拉增益后色彩也崩了。后来换成一颗300万像素、1/2.5英寸靶面的卷帘快门sensor像素尺寸大了不少低照度表现立刻正常噪点少了色彩也稳了。同分辨率下不同sensor的画质差异主要来自像素尺寸和量子效率同像素尺寸下动态范围和噪声又决定最终效果。选型表上那个“130dB HDR”未必适合所有场景HDR模式往往降低动态细节或带来运动鬼影必须实测场景验证。另一个容易忽略的是发热。CMOS sensor功耗虽然低但长时间跑高帧率、多路输出时芯片温度能比环境高十几度暗电流暴涨。我就是这样遇到过一次“晚上开机前十分钟画面还正常半小时后暗部发红发花”的怪问题后来给模组加了一片散热铜箔问题直接消失。5. 常见问题与排查技巧实录5.1 现象到根因“偏色、条纹、噪点”先查哪个画面偏绿或偏红优先怀疑白平衡增益和黑电平校正。黑电平没校准好暗部的偏色最明显白平衡估计不对整个画面色温都会跑。用灰卡或白纸做一次手动白平衡如果偏色立刻消失根因就在3A算法或增益寄存器配置。画面有横条纹优先查电源纹波和时钟。sensor的模拟电源和数字电源如果混在一起或用同一个LDO带多个IC输出图像会出现周期性条纹。还有PCLK的占空比和抖动用示波器看很多“图像怪纹”就是时钟信号不干净造成的。画面噪点很多先看曝光时间、模拟增益和数字增益的分配。数字增益推高会把ADC噪声一起放大等效信噪比非常差。正确做法是先用模拟增益让信号在进入ADC前就已经被放大到足够的幅度数字增益只做微调。画面有大片死白或死黑区域查曝光时间和镜头光圈。也常见于sensor的HDR/多帧合成没配好运动物体边缘出现鬼影和色散。5.2 问题速查表现象优先排查项常见根因图像全黑曝光寄存器、VSYNC/HSYNC方向曝光时间设为0或时序极性不对图像全白过曝ADC参考电压、增益寄存器模拟增益过大或抗溢出设置失效画面偏红/偏蓝白平衡增益、黑电平AWB估计错误、OB校正参数不对横向明暗条纹曝光行数、供电、PCLK抖动卷帘曝光与光源闪烁打架、电源干扰运动物体扭曲快门模式Rolling Shutter没开全局快门暗角严重镜头靶面匹配、LSC参数镜头CRA不符或Lens Shading Correction没开高光拖白线电荷溢出、抗溢出偏置CCD高光溢出或CMOS防Blooming没调好5.3 嵌入式调试的几条经验调试sensor模块我的固定流程是先读sensor ID确认I2C通再点亮内部测试图案排除数据通路问题然后调时钟和时序用示波器对PCLK、VSYNC、HSYNC逐项确认最后才打开真实输出一步步调曝光、增益、黑电平和色彩。千万别一上来就调ISP算法参数。我见过太多同学在RAW数据本身就是错位、错行、偏色的情况下花大量时间调降噪和色彩矩阵最后发现全在做无用功。先把采集端打通拿到一张“RAW能看”的图再谈后面的信号处理优化。调试时养成记寄存器列表的习惯也很有用。每一个改动对应什么现象都记下来。很多sensor的寄存器之间存在耦合例如动了曝光时间HDR合成参数不回写画面就会忽亮忽暗。有记录才能快速定位这类“改A坏B”的问题。6. 一点题外话传感器之外的信号处理还能怎么玩回到开头那句话CCD和CMOS哪个好真的得看场景和整条链路。CCD在需要极致低噪声、高均匀性的科学成像里依然有价值CMOS则在速度、集成度、智能化上已经走得太远了手机上的多摄、HDR、计算摄影全是建立在CMOS的高灵活读出的基础上。我在实际项目里还有个习惯拿到任何新sensor第一件事不调参数先去抓一段RAW数据然后用脚本统计一下暗场噪声、亮场响应曲线。这一步能快速判断sensor本身健不健康也能给后续ISP调校提供基准。很多“玄学画质问题”一统计就现原形。图像传感器和信号处理这条链路现在还在继续演进。事件传感器Event-based Sensor不按帧输出而是像素级异步产生脉冲和脉冲神经网络天然契合多光谱、ToF、偏振成像这些新技术也都建立在“传感器信号处理”这两块地基上。把CCD和CMOS的基本原理吃透后面所有新玩法都不难理解。