资讯动态

时间编码摄影:扑动快门、SCI与事件相机如何突破运动模糊

发布时间:2026/10/26 20:19:17 来源:尧图企业网站定制
如果你拍过奔跑的狗、挥动的球拍、旋转的风扇一定对那种“糊成一团”的照片不陌生。把快门时间缩短到几千分之一秒能救回来一点可光线一暗画质马上崩盘。这其实是传统成像的固有矛盾曝光时间越长传感器收集的光越多但运动物体的时间信息也被平均得越干净。计算成像领域里的“时间编码摄影”就是冲着这个矛盾来的。这一讲要聊的是三个具有代表性的思路扑动快门、SCI快照压缩成像、事件相机。它们分别从快门调制、编码测量和传感器架构三个层面把“时间”从一个只会拖后腿的因素变成可以主动利用的信息维度。如果你正在做图像去模糊、高速视觉、机器人感知或者只是单纯想知道“相机到底还能怎么玩”这篇文章值得往下看。先说明一个容易踩的坑标题里的SCI在计算成像语境中指快照压缩成像Snapshot Compressive Imaging也就是单次曝光编码压缩测量的那套体系跟平时检索论文时遇到的SCI缩写完全是两码事千万别混。搞清楚这个后面读起来就不会犯晕。1. 先理解这个方向为什么要跟“时间”过不去1.1 传统曝光的困境一开一合之间信息被抹平普通相机拍一张照片本质上是在曝光时间内对入射光场做积分。这个过程可以理解为一个“时间盒”盒子里所有光强被平均成一个值。对于静止场景没问题一旦场景里有运动问题就来了——不同时刻的成像结果被平均在一起高频的空间细节被抹掉表现成我们熟悉的运动模糊。运动模糊在数学上可以写成卷积模型清晰图像与一个与运动轨迹相关的模糊核做卷积再加噪声。模糊核的形状由曝光时间内相机的抖动或物体运动决定。理论上只要知道模糊核做一次反卷积就能恢复清晰图像。但问题恰恰出在这个模糊核上普通曝光对应的核是一个矩形窗函数——曝光时间内的权重处处相等它就像一个理想低通滤波器会把某些频率的信息直接清零。这就好比录音时把所有声音黏成一个长音事后想用均衡器把原本的高频细节拉回来却发现那段频谱上压根没有任何信号痕迹怎么拉都是白噪声。1.2 计算成像的核心思路编码-解码传统成像是“老老实实”记录光场计算成像则是“先破坏再重建”。既然模糊核丢信息那就换一个模糊核既然时间积分抹平细节那就不要连续积分换个编码方式去积分。这就是时间编码摄影的起源。核心逻辑其实很朴素设计一种可被精确测量的调制方式让光场在时间维度上被“编码”进一张或多张测量图中再通过算法解码出想要的信息。编码方式越聪明解码出来的时空分辨率就越高或者在同样分辨率下对硬件和光强的要求越低。整个方向的发展有一条清晰的脉络一开始是在快门层面做文章用二值码调制曝光这叫扑动快门接着有人把思路拓展到二维空间与时间联合编码用一张图重建一段视频这就是快照压缩成像后来干脆换掉传感器的像素架构让像素自己异步报告亮度变化这就是事件相机。三者本质都在回答同一个问题如何在有限的测量资源里尽可能多地保留时间维度的信息1.3 三个层次的方案预览为了方便后面展开先用一张表把三种方案的关系梳理清楚。方案编码的维度输出形式解码目标扑动快门时间全局快门逐段开合单张编码模糊图去运动模糊快照压缩成像空间×时间联合编码单张编码测量图重建高帧率视频事件相机异步连续时间编码像素级异步事件流直接感知高速变化可以看到三者的共同特征都是“不按常规出牌”普通快门是一次性平均扑动快门是随机节拍器普通传感器是逐帧采样事件相机是变化即触发。理解了这张表后面的所有细节都是对表格内容的展开。2. 扑动快门把一次曝光切成一段二值码2.1 核心思想与数学建模扑动快门Flutter Shutter的做法非常直接把本来连续打开的曝光时间切分成很多个小片每一片决定快门是“开”还是“关”形成一个二值码序列。比如总曝光时间切到N段每段占总曝光时长的1/N码字序列为c[1], c[2], ..., c[N]每个位置取0或1。如果目标物体在像平面上以速度v像素滚动那么第i个时间片内的图像只是原始清晰图像的一个平移。最终拍到的模糊图可以写成一个离散求和B(x, y) Σ_i c[i] · F(x − v·i·Δt, y) n其中n是噪声Δt是每个时间片的长度。这个式子本质上说明模糊图是一系列“不同位置的清晰图”按码字加权累加的结果。反卷积的目标就是从B中恢复F。与传统曝光的关键区别在于传统曝光的c[i]全为1或等效的全1对应的模糊核是矩形扑动快门的c[i]是精心设计的伪随机序列对应的模糊核变成一个有高低起伏的“梳子”。2.2 为什么随机编码有效传统矩形模糊核在频域的表现是sinc函数也就是在1/T、2/T等特定频率处出现零点。这些零点意味着对应频率的信息在曝光过程中被完全抹掉了反卷积时哪怕用正则化方法也无法无中生有恢复这些频段。随机码的目标就是打破这个局面。一个设计良好的伪随机二值码其傅里叶频谱通常是起伏的但几乎不会出现真正深入底部的零点。换句话说原本被永久抹掉的高频信息现在只是被乘以了一个非零的系数。既然系数非零反卷积时就有机会把它恢复出来代价只是放大一部分噪声。我用一个生活类比帮助理解普通曝光像把一整首歌压缩成一声平均响度高频音符全丢了扑动快门像是在歌曲播放的某些瞬间随机做静音留下的是一个个节奏切片。只要记录下静音的时间位置解码时就能根据这些切片把原曲拼回来。2.3 硬件上如何实现扑动快门的关键是“能按码字高速开合的快门”。实际工程中有几种常见路径液晶快门利用液晶通电/断电改变透光率开关速度能做到毫秒级实现简单但通光效率有限。机械快门阵列用多片叶片或高速旋转盘上的镂空图案精度高但结构复杂、体积大。数字微镜器件微镜阵列可以高频翻转响应时间在微秒量级适合做更高精度的编码曝光。如果需要的是全局编码——也就是整个画面同一时刻用同一个码字——液晶快门就够用了如果想做像素级空间编码就要上DMD这类器件。这里的经验是不要一上来就追求高码率先把码字正确施加到成像链路上确认曝光时序和触发信号同步再逐步提高切片数。2.4 码字选择与参数设置码字设计是扑动快门最容易忽略、却最影响效果的一环。我见过不少人直接拍脑袋生成随机0/1序列结果反卷积出来全是条纹。几点实操心法码长N一般取8到52。码太长每个时间片变短光量变少信噪比下降码太短频谱凹坑太深难以恢复。占空比控制在30%到50%左右。占空比太低通光量损失严重太高编码特征退回到近似矩形窗。用伪随机序列而不是纯随机序列。纯随机序列有时会碰巧出现周期性或长串零伪随机序列例如线性反馈移位寄存器生成的频谱更平均结果更稳定。可以进一步做码字优化把“最小频响幅值尽可能抬高”作为目标函数用搜索算法找码字。实测下来优化码比随机码在高噪声条件下能稳定提升1到2dB的恢复信噪比。2.5 反卷积重建细节拿到编码模糊图后重建清晰图像的核心是解一个反卷积问题。常用的方法有维纳滤波、Tikhonov正则化、全变分正则化。最简单的维纳滤波长这样X_est conj(H) · G / (|H|² λ)其中H是编码模糊核的傅里叶变换G是模糊图的傅里叶变换λ是正则化参数。λ给大了图像太钝给小了噪声爆开通常用对数扫描几档肉眼挑一个噪声和锐度平衡的。再提一个容易被忽视的边界问题卷积计算会在图像边界产生伪影。处理办法是先把图像做边缘扩展镜像或零填充反卷积完再裁掉边界区域。还有一个经验如果重建结果出现周期性的明暗条纹多半是码字里有周期性结构换码字比调正则化参数更有效。3. SCI快照压缩成像用一张图重建一段视频3.1 为什么要从一维编码走向时空编码扑动快门解决的是“一张图怎么不丢高频信息”但它的目标始终是恢复一张静态清晰图。如果场景里发生的事情本身就有时间结构——比如液体飞溅、火花传播、蜂鸟振翅——我们想知道的是某个瞬间发生了什么那么单张清晰图根本不够需要一段视频。一台普通相机拍高速视频代价是曝光时间变短、传感器读出带宽受限。快照压缩成像的想法是既然单帧连拍受带宽限制那干脆只拍一张或者很少的几帧但让这一张图携带整个时间维度的信息。空间编码掩膜在曝光过程中按时间切换把不同时刻的场景“揉”进一张图里然后用压缩感知类算法分离还原出数十帧视频。3.2 SCI的观测模型与压缩感知基础快照压缩成像的观测模型非常简洁Y(u,v) Σ_t M_t(u,v) · F_t(u,v) n(u,v)其中F_t是t时刻的高速视频帧M_t是t时刻的编码掩膜Y是探测器上拍到的单张测量图。每个像素测量到的强度是所有时刻该位置光强乘以掩膜后的叠加。注意这里的待求量是T帧视频而测量量只有一帧方程数量远少于未知量。这种欠定问题之所以可能解靠的是自然图像/视频的强先验相邻帧之间结构相似、纹理在空间上平滑、运动轨迹往往稀疏等等。压缩感知理论告诉我们只要信号在某个变换域可稀疏表示且测量矩阵满足一定条件稀疏重建就能成功。实际常用的先验包括总变分正则保持边缘、抑制噪声、低秩先验视频帧矩阵秩低、以及基于深度学习的生成先验。近两年做得最多的还是“深度展开网络”——把迭代重建算法的每一步展开成一个网络层既保留了物理模型约束又用数据学到的先验替换了手工设计的正则项效果和速度都比纯迭代好不少。3.3 核心重建算法从迭代优化到深度展开如果只做最小复现我用得最多的还是近端梯度法核心就是两步循环梯度下降步让估计结果逼近测量方程。近端映射步对估计结果施加先验约束比如软阈值收缩对应稀疏正则或TV去噪。伪代码逻辑如下# 伪代码快照压缩成像重建简化版 # 输入测量图 Y掩膜序列 M[T]步长 tau X 初始估计比如直接把Y广播到T帧 for it in range(max_iter): residual sum(M[t] * X[t] for t in range(T)) - Y for t in range(T): grad M[t] * residual X[t] X[t] - tau * grad X[t] proximal_operator(X[t]) # 例如TV降噪/阈值收缩如果要用深度学习展开网络思路是把上面的梯度步、近端映射步拆开分别用可学习的小网络替代近端映射损失函数直接约束重建帧与真实帧的差异。训练数据一般用仿真生成的高速视频——拍摄真实高速视频成本太高仿真数据完全可以满足第一阶段的算法验证。3.4 硬件架构与标定流程SCI的硬件核心是“可编程编码掩膜 同步曝光”。最常规的架构是DMD微镜阵列放在光路中在相机单次曝光期间快速切换多帧掩膜图案每帧掩膜持续时间为Δt探测器在整个时间段内做积分。DMD的切换速度可达数千赫兹足以支撑T从几帧到几十帧的重建。实现过程中必须做两件事第一掩膜标定。DMD反射的光经过镜头会有轻微畸变和渐晕直接把设计图案当作真值重建必出暗角。标定方法很简单打开均匀光源逐一投影每帧掩膜图案并采集图像得到实际掩膜的像素级分布。第二同步。DMD切换必须与相机曝光窗口严格对齐否则重建出来的“时间段”会错位运动轨迹会撕裂。可以用相机的外触发信号去驱动DMD模式切换偏移控制在微秒量级。实操里还有一个容易被忽略的点掩膜图案本身的空间频率分布。太规则比如棋盘格会把重建噪声集中到某些频段太随机又不利于先验发挥。业界常用的是伪随机伯努利分布掩膜并且把每一帧掩膜设计成互不相关这样测量矩阵的约束等距性更好。3.5 与扑动快门的关键差异一句话总结差异扑动快门在时间维度做的是“全局统一编码”SCI在时间和空间两个维度联合编码。结果上的差异也很明显——扑动快门只能恢复一张去模糊的图SCI可以从一张图里重建出一段高帧率视频代价是SCI的测量模型更欠定重建难度高一个量级硬件上也需要像素级的掩膜调制能力。选型时如果只是想拍清楚一张运动物体的照片用扑动快门性价比更高如果需要“看清过程”比如液体混合、裂纹扩展那SCI才有发挥空间。4. 事件相机与事件视觉让传感器自己读懂变化4.1 事件相机工作原理与像素级机制扑动快门和SCI还是在“帧”的框架里打转它们设计得再巧妙本质上仍然是每隔一段时间曝光一次。事件相机则直接跳出这个框架。事件相机的每个像素都是独立工作的。像素电路不断监测光强的对数变化率当变化幅度超过设定的正阈值或负阈值时立刻输出一个事件包含坐标、时间戳和极性变亮还是变暗。事件产生的条件可以写成ΔL log I(t) − log I(t_last)若 ΔL ≥ C 输出正事件若 ΔL ≤ −C 输出负事件这里t_last是像素上次触发事件的时刻C是灵敏度阈值。每个像素可以随时重置因此时间分辨率不再受制于帧率传感器输出本质上是一个稀疏的异步事件流。这种机制很像值班保安普通相机是每隔固定时间巡视一圈记下整屋情况事件相机只在有人移动时报告“有人动了”。静止场景在普通相机里占据大量无效数据在事件相机里直接是零输出。4.2 事件流的特点延迟、动态范围、稀疏性事件相机带来的三个硬核优势微秒级延迟从光强变化到事件输出延迟通常在几十微秒量级适合高速控制回路。高动态范围因为每个像素单独比较亮度变化而不是做绝对积分事件相机可以同时感知亮处和暗处的变化常见动态范围超过120dB。极低功耗与数据量事件流是稀疏的大多数像素大多数时间不输出因此功耗和带宽远低于同等分辨率的帧式相机。代价也很明显事件相机拿到的不是强度图像而是一堆变化信号。如果你要的是纹理、颜色、绝对光强光靠事件相机是拿不到的。这也是为什么实际系统中事件相机和传统帧式相机经常成对出现。4.3 事件视觉的主要任务与算法输入表示事件流是一个异步的、稀疏的点集直接塞给卷积神经网络并不方便。常见的做法是把事件流转换成一个稠密张量再用通用的网络结构处理事件帧把一段时间窗内的事件按极性累加成两通道或单通道图像简单高效但丢失了精确时间信息。事件体素将时间轴分桶每个桶内累加极性并做插值保留更多时间结构适合光流和视频重建。时间曲面记录每个像素最近事件的时间戳用时间差表示运动方向对跟踪任务很友好。基于这些表示事件视觉的主要任务包括高速目标跟踪、光流估计、视觉里程计与SLAM、运动分割、去模糊、从事件流重建帧式视频。最近也比较多的工作是把普通帧作为“稀疏参考”用事件流填充帧间空白达到极高帧率的视频重建效果。4.4 与帧式相机融合的思路现有传感器里有一类同时输出“普通帧事件流”的架构使用方可以拿到两种互补数据。融合时有几个实用技巧时间对齐是第一关。帧相机和事件相机各自的时钟不同必须做时间戳校准常见做法是设备唤醒后记录一组已知闪光的时间差估计固定的时钟偏移。空间配准同样重要。双传感器系统存在视差和旋转可以先对静止场景采集一组帧和事件密度图计算单应性矩阵做配准。融合策略不要一律“先拼接再识别”。帧数据负责纹理和颜色事件数据负责运动和时序常见做法是在网络里用两路编码器提取特征再用注意力模块融合。5. 三种时间编码方案对比与选型建议5.1 核心参数横向对比把三种方案放到同一张表里选型会清爽很多。对比维度扑动快门快照压缩成像SCI事件相机编码维度时间一维空间×时间二维异步连续时间输出形态单张模糊图单张编码图事件流目标产物清晰图像高帧率视频事件检测/帧级视频重建时间分辨率受切片数限制受掩膜切换速度限制微秒级硬件复杂度中低高中重建/算法难度低高中光效率损失较大较大无积分损失适用场景运动模糊去除瞬态过程可视化高速跟踪、低功耗感知这个表也指向一个结论三种方案不是简单的替代关系而是针对“时间信息提取”的不同取舍。5.2 不同场景下的选型逻辑如果是固定机位拍一个运动目标目标是出“一张不糊的照片”直接上扑动快门。成本低、重建快、工程链路成熟。但你要清楚它的天花板目标运动和快门码不匹配比如非线性变加速重建会明显变差。如果需要“看清楚动作细节”比如一滴水滴落反弹的完整过程选SCI。它能用一张图重建出十几到几十帧视频适合实验室环境中做瞬态现象观测。缺点是重建比较费时且对光照有一定要求因为编码掩膜会挡掉一半以上的光。如果是移动平台上做实时感知比如飞行器避障、机械臂抓取高速移动物体事件相机才是正确方向。它不需要等待帧周期反应快、动态范围大但请注意它需要专门的事件处理算法不能直接套用传统图像处理管线。5.3 组合使用从互补走向混合三种方案完全可以组合。一个较完整的系统可以是扑动快门做关键帧去模糊SCI做短时高速视频重现事件相机做实时触发与帧间插值。很多研究已经把这种混合思路落地了。组合时最核心的问题永远是同步。三种方案各自时钟独立工程上建议统一用一个外部触发源来驱动快门、掩膜和事件记录器并在算法前先做时间偏移标定。我见过不止一个项目因为时序没对齐算法跑得再漂亮结果还是错位重影。6. 最小可行实验从仿真到实物6.1 实验1扑动快门仿真与复原在扑动快门这步可以先完全在软件里跑通链路验证“编码-反卷积”逻辑取一张清晰静态图作为原始帧。给图像连续做平移模拟匀速运动。生成一个二值码字按码字分段叠加平移后的图像得到模拟的编码模糊图。利用同一码字构造模糊核执行维纳滤波或Tikhonov反卷积。对比复原结果与原始清晰图的差异。伪代码逻辑如下# 伪代码扑动快门仿真与反卷积 blurred zeros_like(sharp) for i in range(N): if code[i] 1: shifted translate(sharp, dxspeed*i) blurred shifted blurred * (len(code) / sum(code)) # 保持平均亮度 H fft(psf_from_code(code, speed)) G fft(blurred) X ifft(G * conjugate(H) / (abs(H)**2 lam))跑完这个仿真你能直观看到矩形曝光和编码曝光在频响上的区别矩形核在零点附近反卷积后会有明显“水波纹”编码核的反卷积虽然也有噪声但结构边缘要干净得多。6.2 实验2SCI单图重建高帧率视频SCI仿真的关键是要有一套模拟的“高帧率视频”训练数据准备一段T帧的高速视频片段可以用插值或重复运动生成。设计T个互不相关的随机掩膜。按观测模型合成单张测量图。用近端梯度法或深度展开网络重建。用PSNR和SSIM评估重建帧质量。这里最容易犯的错误是仿真时掩膜和重建用的是同一个理想掩膜结果异常漂亮一上实物设备就崩。所以仿真阶段最好先加一层“真实验证”给掩膜加上渐晕、像素偏移和噪声观察重建质量的退化程度。如果加了这些干扰后依然能重建出可接受的结果算法上硬件的胜算才大一些。6.3 实验3事件流仿真与基础处理没有真实事件相机也能入门事件视觉。用普通帧式视频合成事件流是常用手段对视频逐像素做时间差分把对数光强变化超过阈值的位置和时间转为事件。这样得到的事件流虽然不如实机数据那么真实但足以用来调试算法流程。合成后可以做一个简单的运动检测把事件按短时间窗比如10毫秒累加成一帧事件密度图用连通域分析圈出运动区域。这个流程能让你直观感受事件稀疏性的好处——静止背景零事件计算机只需处理少量有信息的像素检测速度会快很多。等仿真链路跑顺了再买或借一台真实事件相机做数据验证调阈值的感受会更直接。7. 常见问题与排查技巧7.1 扑动快门踩坑记录重建出现周期性条纹大概率是码字频谱有深坑或周期性。优先换优化码字不要只调正则化参数。图像整体偏暗码字占空比太低。占空比降到0.3以下时信噪比损失会超过编码增益这种情况下缩短总曝光比继续降占空比更合理。边缘有振铃反卷积前记得边界扩展反卷积后裁剪仍存在的话把正则项换成加权TV对平坦区域抑制振铃效果更好。7.2 SCI重建调试心得重建结果整体模糊先检查掩膜标定。实测中发现把标定掩膜的中心区域截出一块单独保存比整幅掩膜平均化重建质量高不少。噪声放大严重压缩比重建帧数/测量帧数超过一定阈值时噪声会被放大得非常明显。建议从T8开始调稳定了再往上加帧数。迭代次数怎么定不要固定迭代次数看重建残差的下降曲线曲线平了再加迭代基本是浪费算力拐点通常就是合适的迭代次数。7.3 事件相机调试心得事件数量爆炸灵敏度阈值设太低了。阈值提高一档往往就能滤掉大量热像素噪声。应该响应的高速运动没响应图像平面上的运动速度超过了像素比较器的频响这时单纯调阈值没用要减小光学系统视场让目标在像面上的角速度降下来。事件流和帧图像对不上位置先做空间配准不要指望两个传感器天然对齐。尤其在不同光学镜头的系统里必须先标定单应矩阵。7.4 时间同步与数据配准问题所有需要融合多个数据源的系统时间同步都是第一优先级。我的做法是在系统启动时做一次“闪烁同步标定”。放一个已知频率的LED闪光帧相机记录到闪光帧事件流记录到同一闪光的触发时间用两者时间戳差值修正时钟偏移。这样一套操作下来融合算法的很多奇怪误差都会自动消失。另外一个容易忽略的点是存储事件流数据量看起来稀疏但长时间高速记录的文件可以非常大。设计实验时给事件流单独一条高速存储通道别和帧图像挤同一个带宽否则掉事件是必然的。结尾一点个人体会这三个方向我接触下来的整体感觉是扑动快门适合入门它把一个很抽象的问题——时间频率与信息丢失——落到了一串明明白白的0和1码字上SCI是进阶它对“先验”的依赖会让你理解为什么计算成像不能只靠硬件事件相机则是另一个思维范式逼着你忘记“帧”这个概念用异步的眼光重新审视视觉数据。最后分享一个小技巧无论做哪个方向的实验先把整条链路在仿真里跑通再上实物。仿真阶段多花一天实物阶段能少踩一周的坑。尤其是SCI的时间同步和事件相机的时间戳对齐这些不是算法能救的工程问题只能在硬件和流程上提前堵住。希望这些记录能帮想入门的读者少走一段弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑