3. 高速运动模糊机理与抑制

在高速产线上,读码失败往往不是算法“看不清”,而是图像在传感器上就已经被“抹开”了。要理解这一点,需要把运动模糊拆成三个可量化的量:目标在像面上的移动速度、曝光时间,以及允许的模糊像素数。三者一旦确定,曝光时间上限就被锁死,剩下的问题才是如何用光源和快门方式把光“补回来”。

一、运动模糊的成因:像面位移与曝光窗口的乘积

设物体沿运动方向的实际速度为 v(mm/s),镜头放大倍率为 β(像高/物高,无量纲),则像面上的移动速度为 vi = v·β。在曝光时间 T(s)内,像点沿运动方向扫过的距离为:

像面位移 d = v · β · T   (单位:mm,像面)
模糊像素数 B = d / p       (p 为像元尺寸,单位:mm/px)
合并:B = v · β · T / p

这就是运动模糊的核心公式。它说明模糊不是“速度太快”这一个因素造成的,而是速度、放大倍率、曝光时间、像元尺寸四者共同作用的结果。举例(示例参数,非实测):某产线物体速度 v = 2000 mm/s,镜头放大倍率 β = 0.2,像元尺寸 p = 3.45 μm = 0.00345 mm。若曝光时间 T = 100 μs = 1×10⁻⁴ s,则像面位移 d = 2000×0.2×1×10⁻⁴ = 0.04 mm,模糊像素数 B = 0.04 / 0.00345 ≈ 11.6 px。对于一维条码,横向 11 px 以上的拖影足以让窄条与空区对比度塌陷,解码器难以恢复模块边界。

需要区分两类模糊:一类是运动模糊,由曝光窗口内目标与传感器相对位移造成,方向沿运动方向;另一类是离焦模糊,由景深不足造成,方向各向同性。高速读码中两者常叠加,但抑制手段不同——运动模糊靠缩短曝光和补光,离焦模糊靠收光圈、调工作距离或缩小视场。判断时可用一个简单特征:若模糊只沿运动方向拉长,且静止时图像清晰,则主因是运动模糊。

二、曝光时间与运动速度的定量关系

把上面的公式反解,得到工程上最常用的曝光时间上限:

T_max = B_allow · p / (v · β)

其中 Ballow 是允许的模糊像素数。对 DataMan 这类一维/二维读码器,经验上 Ballow 取 1~2 px 时解码余量较充足;取 3~4 px 时对低密度码仍可读,但高密度码或低对比度码会明显掉读率。仍用上例:若要求 Ballow = 2 px,则 Tmax = 2×0.00345 / (2000×0.2) = 0.0069 / 400 = 1.725×10⁻⁵ s ≈ 17.3 μs。也就是说,在 2000 mm/s、β=0.2 的条件下,曝光时间必须压到约 17 μs 量级,才能把拖影控制在 2 px 以内。

这个数量级带来两个直接后果。第一,曝光时间越短,进入传感器的光子越少,图像越暗、信噪比越低,必须靠更强的瞬时照度补偿。第二,曝光时间与运动速度近似成反比:速度翻倍,允许曝光时间减半。因此产线提速时不能只改触发频率,必须同步重算曝光上限并核对光源亮度是否够用。实际调试中,可先固定 Ballow 和光学参数,算出 Tmax,再在该值附近做阶梯测试,观察读码率随曝光时间的变化拐点。

运动模糊形成链与两类抑制手段 运动物体 v = 2000 mm/s 镜头成像 β = 0.2 传感器曝光窗口 T = 100 μs 像面拖影 B ≈ 11.6 px 模糊像素数 B = v · β · T / p 曝光上限 T_max = B_allow · p / (v · β) 两条抑制路径 ① 缩短曝光 T → 需频闪光源补足瞬时照度 ② 全局快门 → 整帧同时曝光,消除行间错位 频闪光源作用 · 只在曝光窗口内发光,峰值亮度高 · 占空比低,减少发热与运动拖影 · 与曝光信号同步,避免无效照明 全局快门作用 · 所有像元同一时刻开始/结束曝光 · 消除卷帘快门逐行曝光造成的倾斜/扭曲 · 与频闪配合,把有效曝光压到 μs 级

三、频闪光源:用瞬时高照度换短曝光

缩短曝光时间后,图像亮度按比例下降。若曝光从 100 μs 压到 20 μs,进光量只剩原来的 1/5,靠提高增益会同时放大噪声,读码对比度反而恶化。频闪光源的思路是:让光源只在曝光窗口内以极高瞬时功率发光,其余时间关闭。这样平均功耗和发热可控,而曝光瞬间的照度足够高。

频闪的关键参数是脉冲宽度和与曝光的同步关系。脉冲宽度应覆盖曝光窗口并略有裕量,通常取曝光时间的 1~1.5 倍;若脉冲太窄,曝光窗口边缘照度不足,图像亮度不均;若脉冲太宽,则失去频闪意义,退化为常亮。同步方式上,DataMan 可通过曝光有效信号(Strobe/Flash 输出)触发光源控制器,使发光窗口与传感器积分窗口对齐。实际调试时,可先固定曝光时间,逐步增加光源电流或脉冲宽度,观察图像平均灰度与条码对比度,直到灰度落在传感器线性区中段(例如 8 bit 图像均值约 100~150),避免过曝削顶。

频闪还带来一个副作用需要管理:光源与运动物体之间的相对位置。若光源脉冲与物体到达视场中心的时刻错开,会出现“亮在错误位置”的现象。因此触发延时(Trigger Delay)要与编码器或光电传感器配合,使曝光窗口落在物体位于视场中心附近的时间段内。

四、全局快门:消除逐行曝光的时间错位

卷帘快门(Rolling Shutter)逐行依次曝光,每一行的曝光起始时刻不同。当物体高速运动时,同一帧内不同行对应的物体位置不同,图像会出现倾斜、拉伸或“果冻效应”。对一维条码,这种行间错位会破坏条空比例的横向一致性;对二维码,则可能造成网格畸变,直接导致定位失败。全局快门(Global Shutter)让所有像元在同一时刻开始并结束曝光,整帧对应同一时间切片,从根本上消除行间时间差。

在 DataMan 高速读码场景中,全局快门与频闪是配套使用的:全局快门保证“同一时刻成像”,频闪保证“这一时刻足够亮”。两者结合后,曝光时间可以压到十几微秒甚至更低,同时保持足够信噪比。选型与调试时应确认相机为全局快门传感器;若使用卷帘快门相机,则需把曝光时间进一步压缩到行周期以下,或降低运动速度,否则倾斜无法通过算法完全补偿。

快速估算口诀:先算像面速度 v·β,再乘曝光时间得位移,除以像元尺寸得模糊像素。要求 B ≤ 2 px 时,T_max ≈ 2p/(v·β)。例如 v=2000 mm/s、β=0.2、p=3.45 μm,T_max ≈ 17 μs。此时必须用频闪补光,并确认相机为全局快门。
常见误区:只调短曝光而不增加光源亮度,会导致图像过暗、增益噪声上升,读码率不升反降;只换全局快门而不缩短曝光,运动模糊依然存在。两者必须同时处理,并按“先算曝光上限、再配光源、最后核对快门类型”的顺序推进。

把上述关系落到调试动作上,可以形成一条清晰的检查顺序:根据速度、放大倍率和像元尺寸计算允许曝光时间;在该曝光时间下评估所需照度,选择频闪光源并设置脉冲宽度与同步;确认传感器为全局快门;最后用实际码型在不同曝光时间下做阶梯测试,记录读码率拐点,确定既有余量又不欠曝的工作点。这样,运动模糊就从“感觉上的难题”变成了可计算、可验证、可复现的工程参数问题。