4、卷帘快门伪影(上):果冻效应(Jello Effect)—— 运动物体扭曲、倾斜、缩放变形的数学建模与视觉表现
好,咱们进入卷帘快门伪影的第一部分。说实话,果冻效应是卷帘快门最出名、也最让人头疼的问题。你随便拿手机拍个快速挥动的手臂,画面里手臂就弯了——这就是果冻效应。我当年第一次在高速产线上看到检测图像里的零件被拉成斜的,还以为是镜头坏了,折腾了半天才发现是快门在捣鬼。
4.1 果冻效应的本质:逐行曝光的时间差
先想清楚一件事:全局快门是所有像素同时曝光,同时结束。卷帘快门呢?它是逐行扫描曝光的。第一行开始曝光后,隔了Δt,第二行才开始,第三行再隔Δt……直到最后一行。
这个Δt,就是行间延迟(Row Delay)。
假设传感器有1080行,帧率为30fps,一帧总时间约33.3ms。那么每行之间的延迟大约是:
Row Delay ≈ 33.3ms / 1080 ≈ 30.8μs
你看,每行差了30微秒。如果物体在水平方向快速运动,这30微秒就足以让相邻行捕捉到的物体位置发生偏移。结果就是——本该是直线的边缘,变成了斜线;本该是正方形的物体,变成了平行四边形。
核心公式:
果冻效应导致的像素偏移量 Δx = v × (Row Delay × ΔRow)
其中 v 是物体在图像平面上的运动速度(像素/秒),ΔRow 是行号差。
说白了,行差越大、运动越快,扭曲就越严重。
4.2 三种典型果冻效应变形模式
我在项目里总结过,果冻效应其实就三种基本变形。你掌握了这三种,大部分场景都能快速判断。
| 变形类型 | 运动方向 | 视觉表现 | 典型场景 |
|---|---|---|---|
| 倾斜(Skew) | 水平运动 | 垂直线变成斜线,矩形变成平行四边形 | 传送带上快速通过的零件 |
| 缩放(Stretch/Compress) | 垂直运动 | 物体被拉长或压扁 | 电梯上下运动时拍摄的人脸 |
| 扭曲(Wobble) | 振动/旋转 | 物体边缘呈波浪形,像果冻一样抖动 | 手持拍摄跑步场景 |
4.3 倾斜变形(Skew)的数学建模
先看最常见的倾斜。物体沿水平方向运动,速度为Vx(像素/秒)。传感器行延迟为Td(秒/行)。
对于第n行,相对于第0行的曝光起始时间差为:
t_n = n × Td
在这段时间内,物体水平位移了:
Δx_n = Vx × t_n = Vx × n × Td
所以,原本垂直的边,在图像上会变成一条斜线。斜率就是:
斜率 = Δx_n / n = Vx × Td
嗯,这里要注意:斜率只取决于运动速度和行延迟,跟物体本身大小无关。也就是说,同样速度下,大物体和小物体的倾斜角度是一样的。
我的经验:在产线检测中,如果传送带速度是500mm/s,镜头分辨率是0.1mm/pixel,行延迟30μs,那么每行偏移就是 500 × 0.1 × 30e-6 = 0.0015像素。看起来很小?但1000行下来,顶部和底部就差了1.5个像素。对于高精度测量,这已经不可接受了。
4.4 缩放变形(Stretch/Compress)的数学建模
物体沿垂直方向运动时,情况更微妙。假设物体以速度Vy向下运动。
卷帘快门是从上往下逐行曝光的。物体也在往下走。结果就是:物体上某一点,被不同行捕捉到的时间不同,但物体本身也在移动——这会导致物体的垂直尺寸被拉长或压缩。
具体来说:
- 物体向下运动,快门从上往下扫:物体被拉长。因为顶部行先曝光,底部行后曝光,底部行曝光时物体已经往下移动了,所以底部被记录的位置比实际更靠下。
- 物体向上运动,快门从上往下扫:物体被压缩。顶部行曝光时物体还在下面,底部行曝光时物体已经上来了,结果底部被记录的位置比实际更靠上。
数学上,垂直方向的表观尺寸变化率为:
表观高度 / 实际高度 = 1 + (Vy × Td × (N-1)) / H
其中N是总行数,H是物体实际高度(像素)。
Vy为正(向下)时,比值大于1,拉长;Vy为负(向上)时,比值小于1,压缩。
我曾经踩过的坑:有次做无人机航拍测量,用卷帘快门相机拍地面标定板。无人机下降过程中拍摄,标定板在图像里被拉长了将近3%。我一开始以为是镜头畸变,折腾了半天的标定算法。后来才意识到——是果冻效应的垂直缩放。从那以后,我只要做运动平台上的测量,第一件事就是确认快门类型。
4.5 扭曲变形(Wobble)的成因
扭曲变形其实是倾斜和缩放的组合。当物体不是单纯的水平或垂直运动,而是有旋转或振动时,不同行的偏移方向和大小都在变化。
比如一个风扇叶片在旋转。叶片上不同位置的速度方向和大小都不同。卷帘快门逐行曝光时,每一行捕捉到的叶片位置都不一样——结果就是叶片边缘出现波浪形扭曲。
我习惯用一个简单模型来理解:
对于旋转角速度为ω的物体,第n行的角度偏移为:
Δθ_n = ω × n × Td
这个角度偏移会导致物体上每个点的位置都发生非线性变化。视觉上就是——像果冻一样抖动。
4.6 果冻效应的视觉表现总结
我把常见场景下的果冻效应表现整理成了一张表,方便你快速对照:
| 拍摄场景 | 运动类型 | 果冻效应表现 | 严重程度 |
|---|---|---|---|
| 快速摇动手机 | 水平旋转 | 垂直线倾斜,建筑像要倒 | 高 |
| 拍摄行驶中的汽车 | 水平运动 | 车轮变椭圆,车身倾斜 | 中高 |
| 无人机下降拍摄 | 垂直运动 | 地面物体被拉长 | 中 |
| 手持拍摄跑步的人 | 上下振动 | 人像上下拉伸,边缘抖动 | 中 |
| 拍摄旋转风扇 | 旋转 | 扇叶扭曲成波浪形 | 极高 |
| 慢速平移拍摄风景 | 低速水平 | 几乎不可见 | 低 |
4.7 果冻效应知识体系图
下面这张图把果冻效应的核心逻辑串起来了。从根本原因到三种变形模式,再到数学建模和视觉表现,你可以用它快速回顾。
4.8 实际项目中的判断方法
你拿到一个卷帘快门相机,怎么快速判断果冻效应会不会影响你的项目?我个人习惯用三步法:
- 算行延迟:查传感器手册,找到行扫描时间。或者直接用帧率除以行数估算。
- 估运动速度:物体在图像平面上的最大速度是多少?单位是像素/秒。
- 算最大偏移:用公式 Δx = Vx × Td × N,看顶部和底部的偏移量是否超过你的公差。
快速估算口诀:
行延迟乘行数,再乘速度得偏移。
偏移超过一个像素,果冻效应就要重视。
举个例子。你做一个PCB板检测,传送带速度200mm/s,镜头分辨率0.05mm/pixel,传感器有1200行,行延迟25μs。
Vx = 200 / 0.05 = 4000 像素/秒
Td = 25μs = 0.000025 秒
N = 1200 行
最大偏移 = 4000 × 0.000025 × 1200 = 120 像素
120个像素!PCB板上的焊盘位置都偏到姥姥家去了。这种情况下,要么换全局快门,要么用机械快门加闪光灯冻结运动。没有别的办法。
好了,果冻效应的数学本质和视觉表现就讲到这里。你理解了这些,后面讲卷帘快门其他伪影的时候,思路会顺很多。