005、Rolling Shutter vs Global Shutter:卷帘快门畸变与全局快门在高速场景下的选型 005、Rolling Shutter vs Global Shutter卷帘快门畸变与全局快门在高速场景下的选型一、一个让我半夜被电话叫醒的bug2018年我在某款旗舰手机项目上负责Camera调试。客户反馈用手机拍快速旋转的风扇扇叶竟然变成了“弯的”像面条一样扭曲。更诡异的是拍LED灯牌时画面出现了一截一截的明暗条纹像斑马线。当时我第一反应这TM是sensor坏了后来查了三天发现是Rolling Shutter卷帘快门在高速场景下的典型畸变——果冻效应Jello Effect。那晚我盯着示波器上的逐行曝光时序图突然意识到很多工程师对快门类型的理解还停留在“一个快门按钮按下去”的层面。二、两种快门到底在“快”什么先说个容易混淆的点很多人以为“快门速度”就是曝光时间。错。快门速度是sensor逐行/全局读取像素电荷的时间窗口。Rolling Shutter和Global Shutter的核心区别在于“像素电荷的读出方式”——是排队一个一个读还是一起读。Rolling Shutter像扫描仪一样“扫”过去Rolling Shutter的sensor比如SONY IMX586、IMX766内部像素阵列是按行逐次曝光的。假设sensor有1000行像素曝光时间设定为1/100秒那么第1行在t0时刻开始曝光t1/100秒结束第2行在t1/1000秒开始曝光因为行间有微小延迟t1/1001/1000秒结束。以此类推最后一行比第一行晚了约1/1000秒才开始曝光。这里踩过坑如果你用Rolling Shutter拍高速运动的物体比如时速300km/h的赛车物体在sensor逐行扫描的几毫秒内已经移动了数厘米。结果就是物体顶部和底部被记录在不同时间点画面出现倾斜、扭曲——这就是果冻效应。更坑的是如果用LED灯50Hz/60Hz交流电驱动灯光在sensor逐行扫描期间会周期性闪烁导致画面出现明暗条纹Flicker这就是斑马纹的根源。Global Shutter所有像素“同时开枪”Global Shutter的sensor比如SONY IMX250、安森美PYTHON系列在曝光开始时所有像素同时清零并开始积累电荷曝光结束时所有像素同时停止积累然后逐行读出。注意读出过程虽然也是逐行的但读出的电荷是“同时曝光”的所以不存在时间差。别这样写“Global Shutter就是快”——不准确。Global Shutter的“全局”指的是曝光起始时间一致而不是读出速度快。实际上Global Shutter的读出速度往往比Rolling Shutter慢因为需要额外的存储电容来暂存电荷每个像素内嵌一个模拟存储单元这会导致像素面积增大、填充因子下降、暗电流增加。三、高速场景下的“生死抉择”场景1工业视觉——拍高速运动的零件我在调试安防摄像头时遇到过用Rolling Shutter拍流水线上以10m/s速度移动的芯片图像中芯片的引脚变成了“波浪形”无法进行AOI检测。换成Global Shutter后问题解决。关键参数运动速度v、sensor行扫描时间t_row、物体在图像中的高度h。畸变量Δ v × t_row × h。如果Δ超过1个像素Rolling Shutter就不可用。比如v10m/st_row10μs常见1080p sensorh1000行Δ10×10e-6×10000.1m100mm——芯片才几毫米直接畸变到姥姥家。场景2手机摄影——拍快速挥动的手手机用户不会关心sensor类型他们只关心“为什么我拍娃跑步时腿是弯的”。Rolling Shutter在手机上是“原罪”但为什么手机厂商还在用因为Global Shutter的像素尺寸大通常≥3μm做不了高像素手机需要48MP、64MP而且暗电流大导致低光噪点爆炸。个人血泪经验手机项目上如果非要拍高速物体可以开启“运动模式”——通过缩短曝光时间比如1/1000秒来减少行间时间差的影响但代价是进光量下降需要提高ISO噪点飙升。或者用多帧合成算法但算法复杂度高容易翻车。场景3车载摄像头——拍快速接近的障碍物车载领域是Rolling Shutter的“重灾区”。我用Rolling Shutter的ADAS摄像头拍过一辆以80km/h速度迎面驶来的卡车结果卡车在图像中“倾斜”了约5度导致目标检测框偏移可能引发误判。别这样写“车载一定要用Global Shutter”——太绝对。实际上很多车载摄像头比如环视、后视仍然用Rolling Shutter因为成本低、像素高。但前视ADAS摄像头尤其是用于自动紧急制动的必须用Global Shutter因为需要精确的时空一致性。另外LED交通信号灯的Flicker问题在车载中也很致命——Rolling Shutter拍LED灯牌时灯牌可能“熄灭”在某一帧导致系统误判为绿灯变红灯。四、选型决策的“潜规则”1. 看运动速度与曝光时间的比值一个简单判据如果物体在sensor逐行扫描期间即一帧的读出时间移动超过1个像素Rolling Shutter就不可用。一帧读出时间 行数 × 行扫描时间。比如1080p sensor行扫描时间10μs一帧读出时间1080×10μs10.8ms。如果物体在10.8ms内移动了1个像素对应的物理尺寸比如0.1mm那么Rolling Shutter就GG。2. 看像素尺寸和工艺Global Shutter的像素通常≥3μm比如安森美的PYTHON系列是4.5μm而Rolling Shutter可以做到0.8μm手机sensor。如果你需要高分辨率比如4K、8K且场景运动速度不快比如拍风景Rolling Shutter是唯一选择。如果你需要高速抓拍比如工业检测、高速摄影Global Shutter是刚需。3. 看暗电流和噪声Global Shutter的每个像素内嵌存储电容导致暗电流比Rolling Shutter大3-5倍。在低光环境下Global Shutter的暗噪声会淹没信号画面出现“雪花点”。所以如果你在暗光下拍高速物体比如夜间赛车Global Shutter可能还不如Rolling Shutter短曝光高ISO的组合。4. 看成本和供应链Global Shutter的sensor价格通常是Rolling Shutter的2-3倍而且产能低主要供应商是安森美、索尼、Teledyne三星和豪威也有但量小。手机厂商不会为了“偶尔拍高速物体”而增加成本所以手机几乎全是Rolling Shutter。工业相机和车载ADAS则愿意为可靠性买单。五、一个被忽视的“中间态”Pipelined Global Shutter最近几年有些sensor厂商比如索尼的IMX系列推出了“Pipelined Global Shutter”——本质上还是Rolling Shutter但通过缩短行间延迟比如从10μs降到1μs来近似全局曝光效果。这种方案在成本和性能之间取了个折中但依然无法完全消除果冻效应只是把畸变量缩小了10倍。这里踩过坑某次项目供应商宣称“Pipelined Global Shutter可以替代Global Shutter”结果在拍高速旋转的齿轮时齿轮边缘还是出现了轻微扭曲。后来发现Pipelined Global Shutter的“全局”只针对曝光开始时间但读出时间仍然有行间差异导致运动物体的边缘出现“锯齿”。所以别被营销话术忽悠实测才是王道。六、我的“土办法”选型流程先算运动速度被测物体的最大速度是多少比如拍乒乓球球速可达30m/s拍行人1.5m/s。用公式Δ v × t_frame一帧读出时间估算畸变量。再定像素要求需要多少分辨率如果≥12MP基本只能选Rolling Shutter除非你愿意用大像素、低分辨率的Global Shutter。然后看光照条件低光场景10 lux慎用Global Shutter暗电流会炸。最后做实测用高速旋转的圆盘上面画个十字线拍视频看十字线是否弯曲。如果弯曲超过1度Rolling Shutter不可用。七、写在最后Rolling Shutter和Global Shutter没有绝对的好坏只有适不适合。手机用户不会在意果冻效应因为他们拍的是“静态生活”工业用户不能容忍1个像素的畸变因为那意味着产品报废。作为调试工程师你的任务不是“选最好的”而是“选最合适的”——同时准备好被客户骂因为无论选哪个总有人不满意。个人经验如果你在项目初期就发现“高速场景”是核心需求直接上Global Shutter别犹豫。后期用算法去补偿Rolling Shutter畸变成本高、效果差、调试周期长而且容易出bug。我见过太多项目为了省几块钱sensor成本最后花了几十万做算法优化还搞不定。另外别忘了检查LED Flicker——用手机拍一下现场灯光如果画面有明暗条纹说明灯光频率和sensor行扫描频率不匹配。解决办法调整曝光时间比如设为1/100秒或1/120秒对应50Hz/60Hz或者换Global Shutter。最后一句别信供应商的“Global Shutter完美无缺”他们的样片都是在实验室理想光照下拍的。拿到产线上灰尘、振动、温度变化分分钟教你做人。