1. 从光子到像素为什么CMOS成像原理值得反复讲做计算成像这些年我越来越觉得很多项目卡壳不是因为算法不够新而是因为对传感器本身的理解太粗。你拿到的是一张已经量化好的RAW图但那张图背后经历了光电转换、电荷收集、模拟放大、模数转换、数字校正一整套流程每一步都在往数据里注入噪声、非线性和各种“脾气”。你不了解这些调参就是盲人摸象。这一讲我聚焦CMOS图像传感器从最基础的光子入射一路讲到SPAD和事件像素。为什么要把这三者放在一起讲因为它们代表了三种截然不同的“看世界”的方式传统CMOS是积分式成像在一段时间内累积光子输出一幅灰度或彩色图SPAD是单光子级别的盖革模式探测能数到单个光子输出的是时间戳和计数事件像素则是异步差分成像只输出亮度变化的事件流不输出完整帧。这三种模式对应三种数据形态也对应三套完全不同的计算成像算法体系。如果你正在做HDR合成、低光增强、高速运动捕捉、3D深度感知、神经形态视觉这些方向这一讲的内容会直接决定你对数据源头的判断力。我见过太多人拿着事件相机的数据用帧式相机的思路去处理结果怎么调都不对根子就在没搞清楚传感器输出到底代表什么。下面我按“原理—结构—实操—排查”的顺序把这条链路拆开讲透。2. 传统CMOS像素的核心原理与关键结构2.1 光子到电子的第一步光电转换与量子效率CMOS图像传感器的基本单元是像素而像素最核心的物理过程是光电效应。当光子进入硅衬底如果能量大于硅的禁带宽度室温下约1.12 eV就能激发一个电子从价带跃迁到导带产生一个电子-空穴对。这个过程的效率用量子效率QE衡量定义为产生的电子数除以入射光子数。QE不是一个固定值它随波长变化。硅在可见光波段400–700 nmQE可以做到很高峰值通常在500–600 nm附近能到80%以上但到了近红外850–940 nm硅的吸收系数急剧下降QE可能掉到20%甚至更低。这就是为什么近红外增强型传感器要用更厚的衬底或者背面照射BSI结构。这里有个容易被忽略的点QE高不代表最终图像好。因为光子打到像素上产生的电子可能扩散到相邻像素造成串扰crosstalk。像素越小串扰越严重。我实测过一组1.1 μm像素的传感器在强光边缘处相邻像素的串扰能到5%以上做高精度测量时这个误差不能忽略。2.2 电荷到电压浮动扩散与源极跟随器光电子产生后需要被收集并转换成电压。传统CMOS像素以4T结构为例包含光电二极管PD、传输门TX、浮动扩散节点FD、复位晶体管RST、源极跟随器SF和行选择晶体管RS。工作流程是这样的曝光期间PD收集光电子曝光结束TX打开把电荷转移到FDFD的电荷改变其电压SF把这个电压缓冲输出到列线。FD的电容决定了转换增益电容越小同样电荷产生的电压越大但满阱容量也越小。这是一个典型的权衡。我常跟团队说转换增益和满阱容量是一对冤家。高转换增益意味着高灵敏度、低读出噪声但动态范围受限低转换增益能容纳更多电荷动态范围大但弱光下信号容易被噪声淹没。很多HDR方案本质上就是在解决这个矛盾比如双转换增益DCG像素在同一帧内用两种增益各读一次再合成。2.3 读出噪声的构成与量化读出噪声是CMOS传感器最关键的指标之一它决定了暗光下的信噪比下限。读出噪声主要来自几个方面复位噪声kTC噪声复位开关断开时FD节点上的电荷随机分布产生一个与温度相关的噪声。相关双采样CDS可以大幅抑制它。源极跟随器噪声主要是1/f噪声和热噪声与器件尺寸和偏置电流有关。量化噪声ADC的量化步长决定通常为LSB/√12。列固定模式噪声FPN列与列之间的失调差异可以通过列校正消除。一个设计良好的现代CMOS传感器读出噪声可以做到1–2 e-电子高端科学级甚至低于1 e-。但注意这是指输入参考噪声实际图像上看到的噪声还要乘以转换增益的倒数再叠加后级噪声。提示评估传感器噪声时一定要区分“输入参考噪声”和“输出参考噪声”。前者折算到FD节点单位是e-后者是ADC输出端的电压或DN值。两者差一个转换增益。2.4 快门方式卷帘与全局的取舍CMOS传感器有两种主流曝光方式卷帘快门rolling shutter和全局快门global shutter。卷帘快门逐行曝光逐行读出行与行之间存在时间差。拍静止场景没问题但拍高速运动物体时会产生倾斜、果冻效应。全局快门所有像素同时曝光同时结束然后逐行读出运动物体不会畸变但每个像素需要额外的存储节点面积开销大填充因子和QE会受影响。我做过一个高速旋转风扇的拍摄对比卷帘快门拍出来的扇叶是弯的全局快门是直的。如果你的应用涉及运动测量、机器视觉定位全局快门几乎是必须的。但如果你做的是静态摄影或慢速场景卷帘快门能给你更好的画质和更低的成本。3. SPAD与事件像素两种非主流但越来越重要的成像范式3.1 SPAD的工作机制盖革模式与单光子探测SPAD全称单光子雪崩二极管。它和普通光电二极管最大的区别在于偏置电压普通PD工作在反向偏置但低于击穿电压光电流与光强成正比SPAD工作在击穿电压之上即盖革模式。此时单个光子产生的电子-空穴对就能触发雪崩击穿产生一个宏观可测的电流脉冲。这个机制带来两个特点一是单光子灵敏度理论上一个光子就能被探测到二是数字输出输出的是脉冲不是模拟电压。但盖革模式不能持续每次雪崩后必须通过淬灭电路把偏置电压降到击穿电压以下等雪崩熄灭后再恢复到盖革模式这个恢复时间叫死时间dead time通常在几纳秒到几十纳秒。SPAD的输出是离散的光子到达时间。配合时间数字转换器TDC可以记录每个光子相对于激光发射时刻的到达时间这就是直接飞行时间dToF测距的原理。我做过一个dToF模组的调试核心就是TDC的bin宽和SPAD的死时间匹配bin宽太粗测距精度差太细则计数率上不去。3.2 SPAD阵列与SiPM从点到面的扩展单个SPAD只能探测一个点要做成像必须做成阵列。SPAD阵列的每个像素包含一个SPAD和一个淬灭/读出电路。由于每个SPAD需要独立的淬灭和TDC像素面积很难做小目前主流SPAD阵列像素 pitch 在10–50 μm远大于传统CMOS的1–3 μm。另一种思路是SiPM硅光电倍增管它把大量SPAD并联输出是所有SPAD脉冲的叠加。SiPM不能分辨单个光子的位置但能给出光子总数适合做闪烁探测、激光雷达的接收端。我对比过SiPM和PMT在弱光脉冲探测下的表现SiPM的增益一致性稍差但工作电压低、体积小、抗磁场在很多场景已经替代了PMT。SPAD阵列的填充因子是个大问题。因为淬灭电路占面积光子可能打在电路上而不是SPAD上。解决办法有两种一是微透镜聚焦把光集中到SPAD区域二是3D堆叠把电路层和传感层分开传感层可以做到接近100%填充因子。3.3 事件像素异步差分与稀疏输出事件像素event pixel的典型代表是DVS动态视觉传感器。它的每个像素独立工作电路持续监测光电流的对数变化。当亮度变化超过阈值时像素异步输出一个事件包含极性变亮或变暗和时间戳。没有变化就不输出。这意味着事件相机的输出不是帧而是事件流。数据量取决于场景动态静态场景几乎零输出高速运动场景输出密集。时间分辨率可以到微秒级远高于传统相机的帧率。动态范围也很大因为是对数响应能同时看清暗部和亮部细节。但事件像素不输出绝对亮度只输出变化。所以它不能单独用来做图像重建通常需要和帧式相机融合。我做过一个融合项目用帧相机提供低频纹理用事件相机提供高频边缘和运动信息重建出来的图像在高速运动下比纯帧相机清晰得多。事件像素的噪声特性也和传统传感器完全不同。它没有读出噪声的概念但有背景活动噪声BA noise即在没有光变化时随机输出的事件。这个噪声随温度升高而增加做长时间积分时会累积成“噪声墙”。3.4 三种成像范式的对比与选型维度传统CMOSSPAD阵列事件像素输出形式帧图像灰度/彩色光子计数/时间戳异步事件流灵敏度中等受读出噪声限制单光子级高对数响应时间分辨率毫秒级帧率皮秒级TDC微秒级动态范围60–80 dB高计数率范围大120 dB空间分辨率高亚微米像素低数十微米中十微米级数据率固定与帧率成正比高与光子率相关稀疏与动态相关典型应用摄影、机器视觉dToF、荧光寿命高速跟踪、神经形态选型时先问自己三个问题你需要绝对亮度还是变化量你需要单光子灵敏度吗你的场景是高速还是静态答案会直接指向某一种传感器。4. 从像素到系统实操中的关键环节与参数计算4.1 曝光时间与信噪比的计算实例假设你用一款CMOS传感器拍暗光场景参数如下QE60%像素满阱容量10000 e-读出噪声2 e-暗电流1 e-/s曝光时间10 ms入射光功率对应光子率5000 photons/s/pixel。先算信号电子数5000 × 0.6 × 0.01 30 e-。散粒噪声√30≈5.5 e-。暗电流电子数1×0.010.01 e-可忽略。总噪声√(5.5²2²)≈5.85 e-。SNR30/5.85≈5.1约14 dB。这个信噪比下图像能看出轮廓但细节模糊。如果把曝光时间加到100 ms信号300 e-散粒噪声17.3 e-总噪声≈17.4 e-SNR≈17.2约24.7 dB。提升明显。但注意曝光时间不能无限加因为暗电流和背景光会累积而且运动物体会糊。这个计算说明一个事暗光下信噪比主要受散粒噪声限制读出噪声只在信号极弱时才主导。所以提升暗光画质的根本是提高QE和增大曝光时间或光圈而不是一味降读出噪声。4.2 SPAD死时间与计数率的非线性校正SPAD在死时间内无法响应新光子所以当光子率很高时计数率会饱和。理想情况下计数率m与光子率n的关系是m n / (1 n·τ)其中τ是死时间。当n远小于1/τ时m≈n当n接近1/τ时m趋于饱和。假设τ20 ns1/τ50 MHz。如果实际光子率是100 MHz理想计数应该是100M但实际输出m100/(1100×0.02)100/3≈33.3 MHz。误差巨大。所以做SPAD定量测量时必须做死时间校正。校正公式反过来n m / (1 - m·τ)。用上面的m33.3Mτ20ns算得n33.3/(1-0.666)99.7M接近真实值。我在做荧光寿命测量时这个校正必不可少。荧光衰减是纳秒级光子率很高不校正的话寿命拟合会严重偏离。4.3 事件相机的时间戳对齐与帧融合事件相机输出的事件流是异步的每个事件带一个微秒级时间戳。要和帧相机融合第一步是时间同步。硬件上可以用同一触发信号同时启动两个传感器软件上可以用互相关对齐时间戳。融合的基本思路是用帧图像提供绝对亮度基准用事件流提供帧间变化。具体做法有很多种我常用的一种是对每个事件根据其时间戳和极性在上一帧图像上累加一个增量得到当前时刻的估计图像。增量的大小需要根据事件阈值和场景对比度来标定。这里有个坑事件相机的阈值不是精确已知的而且随温度和像素变化。我通常先用一个已知对比度的闪烁光源做标定拟合出每个像素的等效阈值再用于融合。不标定的话重建图像会有明显的亮度不一致。4.4 传感器选型的实操检查清单在确定传感器之前我建议按这个清单逐项确认光谱响应你的应用波段是多少可见光、近红外还是紫外硅基传感器在近红外QE低需要选增强型。灵敏度与噪声最暗场景需要多少光子读出噪声和暗电流是否满足动态范围场景最亮和最暗差多少是否需要HDR模式快门方式有运动物体吗需要全局快门吗帧率与接口需要多高帧率MIPI、LVDS还是USB带宽够吗像素尺寸与分辨率需要多大视场和空间分辨率像素越小衍射极限越明显。功耗与散热SPAD和高速CMOS功耗都不低散热设计要提前考虑。成本与供货科研级和消费级价差巨大交期也要确认。这份清单我每次做新项目都会过一遍能避免很多后期返工。5. 常见问题与排查技巧实录5.1 图像出现固定竖条纹怎么办竖条纹通常是列固定模式噪声FPN或列ADC失调。排查步骤先拍暗场看条纹是否随曝光时间变化。如果不随曝光变化是列失调用列校正每列减暗场均值即可。如果随曝光变化可能是列读出电路的温度漂移或电源耦合检查电源去耦和地平面设计。我遇到过一次竖条纹随帧率变化最后发现是列ADC的参考电压被行驱动信号耦合了在PCB上加了RC滤波就好了。这种问题纯靠算法校正效果有限得从硬件下手。5.2 SPAD暗计数率高怎么降暗计数率DCR是SPAD在没有光时自触发雪崩的概率主要来自热激发和隧穿。降低DCR的方法降低偏置电压但会降低探测效率、降低工作温度每降10°C DCR大约减半、改进工艺减少缺陷。如果系统允许加半导体制冷是最直接的办法。我做过对比从室温降到0°CDCR降了一个数量级。5.3 事件相机噪声墙怎么处理事件相机在低光下背景活动噪声明显长时间积分会形成噪声墙。处理思路一是提高阈值但会丢失弱事件二是做时空滤波利用事件在时空上的相关性滤除孤立噪声三是和帧相机融合时用帧图像的亮度梯度作为先验只保留与梯度一致的事件。我通常用第三种效果最好但计算量大。5.4 卷帘快门果冻效应能否后期校正可以部分校正但需要知道每行的曝光时刻和运动速度。如果运动是全局平移可以用仿射变换逐行校正如果是复杂运动需要光流估计。但校正会引入插值模糊不如直接用全局快门。我的建议是如果果冻效应明显优先换全局快门传感器后期校正只作为补救。5.5 常见问题速查表现象可能原因排查方法解决方向竖条纹列FPN/电源耦合暗场对比、变曝光列校正、电源滤波图像发灰黑电平偏移拍暗场看均值调整黑电平高光溢出满阱饱和看高光区是否削顶缩短曝光、HDRSPAD计数饱和死时间变光强看计数曲线死时间校正事件噪声大BA噪声暗场计数滤波、降温色彩偏差白平衡/滤光片拍灰卡标定白平衡运动模糊曝光过长看运动边缘缩短曝光、全局快门近红外灵敏度低硅吸收系数测QE曲线BSI、增厚衬底这张表是我这些年踩坑总结的基本覆盖了八成以上的现场问题。遇到新问题先查表能省不少时间。5.6 几个容易被忽略的实操心得第一传感器数据手册的指标是在特定条件下测的比如读出噪声通常是在最高增益、最低帧率下测的。实际用的时候帧率一高噪声就上去了。一定要在自己的工作条件下实测。第二SPAD的探测效率PDE和暗计数率是矛盾的。偏置电压高PDE高但DCR也高。选工作点时要根据应用权衡做弱光探测就偏向高PDE做长时间积分就偏向低DCR。第三事件相机的阈值会随温度漂移。我做过一个户外项目早上标定的阈值到中午就偏了重建图像亮度不一致。后来加了温度补偿用片上温度传感器实时调整阈值才稳定下来。第四CMOS传感器的线性度不是绝对的。在接近满阱时响应会压缩在极暗时可能有非线性黑电平。做定量测量前一定要做线性度标定用多级光强拟合响应曲线。第五镜头和传感器的匹配很重要。小像素传感器需要高分辨率镜头否则镜头成了瓶颈大像素传感器用普通镜头就行。另外红外截止滤光片的透过率曲线要和传感器QE曲线匹配不然色彩还原会偏。6. 从原理到算法计算成像中的传感器建模思路6.1 为什么算法需要传感器模型计算成像的核心是用计算弥补硬件的不足但计算的前提是知道硬件做了什么。传感器模型就是把物理过程用数学表达出来让算法能反向推断场景。比如去马赛克需要知道CFA排列HDR合成需要知道响应曲线去噪需要知道噪声模型。我见过很多论文直接假设噪声是高斯白噪声实际CMOS的噪声是信号相关的散粒噪声加固定模式噪声加读出噪声用高斯模型去噪效果会差很多。正确的做法是用异方差噪声模型噪声方差是信号强度的函数。6.2 响应曲线的标定方法响应曲线描述入射光强和输出DN值的关系。标定方法用可调光源如积分球产生一系列已知光强拍多帧取平均拟合出曲线。注意要覆盖从暗到饱和的整个范围并且每个光强下拍多帧以平均掉噪声。对于有HDR模式的传感器要分别标定每档增益的曲线再找拼接点。拼接点选在低增益接近饱和、高增益信噪比还够的位置通常在高增益满阱的70%–80%处。6.3 事件相机与帧相机的时空对齐实操时空对齐分两步时间对齐和空间对齐。时间对齐用硬件触发或软件互相关空间对齐用棋盘格标定。标定时同时拍棋盘格帧相机提取角点事件相机提取角点事件棋盘格黑白交界处会产生大量事件然后求单应矩阵。我做过一次对齐时间偏差控制在100 μs以内空间重投影误差小于0.5像素。这个精度下融合效果很好。如果时间偏差大运动物体会有重影空间偏差大边缘会错位。6.4 SPAD阵列的像素级标定SPAD阵列每个像素的PDE、DCR、死时间、TDC bin宽都可能不同做定量成像前需要逐像素标定。标定PDE用已知光子率的均匀光源标定DCR用暗场标定死时间用变光强计数曲线标定TDC bin宽用已知延迟的脉冲。这个过程很繁琐但如果不做图像会有固定模式噪声定量精度差。我通常写一个自动化脚本让设备自动切换光源和延迟采集数据后批量拟合能省不少人力。7. 一些个人体会和后续可以玩的方向做传感器这一块最大的感受是物理层的东西绕不过去。算法再花哨数据源头不对结果就是不对。我早期做低光增强试了很多网络结构后来发现瓶颈在传感器的读出噪声和暗电流换了低噪声传感器后同样的算法效果提升了一大截。SPAD和事件像素这两个方向我觉得未来几年会有更多落地。SPAD的成本在降阵列在变大dToF在手机和车载上已经铺开事件像素在高速机器视觉、自动驾驶的感知融合里越来越受重视。如果你现在入局建议先把传统CMOS的像素结构和噪声模型吃透再去看SPAD和事件像素会发现很多概念是相通的比如转换增益、填充因子、时间戳精度只是表现形式不同。后续可以玩的方向一是SPAD阵列和事件相机的融合用SPAD提供绝对深度和光子计数用事件提供高速运动两者互补二是把传感器物理模型嵌入神经网络做端到端的可解释计算成像三是用事件相机做神经形态计算直接在传感器端做稀疏处理降低后端算力需求。这些方向我都有关注有机会再展开聊。最后分享一个小技巧如果你手头没有专业标定设备可以用一个稳定的LED光源加几片中性密度滤光片自己搭一个简易光强阶梯虽然精度不如积分球但做相对标定和线性度检查足够了。我早期很多标定就是这么干的成本低效果也能接受。
阅读完成 · 觉得有帮助?