像素不能直接告诉我们速度。相机只记下每一帧里物体落在哪一列像素;要得到速度,先用标定把像素换成位置,再用相邻几帧的位置变化估计斜率。这样得到的速度同时带着运动本身、相机和分析方法的影响,需要分开检查。
上一章的位置曲线是给定的。现在换一个问题:一台固定相机对着直轨拍摄,每秒 30 帧。一个小球沿轨道来回振荡,同时缓慢向右漂移。我们手里只有每一帧的像素列号,能从这些数字读出小球每一刻的速度吗?
本章的数字都来自运动测量与数值微分 Lab。Lab 里的运动由一个已知公式给出,所以可以把估计结果与真值比较。真实实验没有这样的真值,只能依靠本章介绍的检查方法。
2.1 相机记录了什么
相机以固定帧率 拍摄,相邻两帧相隔 。从零开始数,第 帧的时刻是 。帧率为 时,帧间隔约为 。
每一帧里,跟踪程序找出小球中心所在的像素列 。一份记录就是一列成对的数字 。记录里没有位置,更没有速度:位置要经过标定换算,速度要经过计算估计。
这个区分贯穿全章。直接记下的量叫观测值,由观测值算出的量叫估计值。估计值的误差,一部分来自观测值本身,一部分来自我们选择的算法。
Lab 的默认记录长 ,共 121 帧。传感器宽 2048 列,第 1024 列对准轨道原点。小球的真实运动是
默认取 、、、、、。频率 是每秒振荡的周数, 叫角频率,单位是弧度每秒;正弦函数的自变量按弧度计算。这样的小球每两秒来回一次,同时以 向右漂移。
2.2 正弦运动的速度
要比较估计值和真值,先要知道这个运动的速度。前一章只求过多项式的斜率,这里用对称的平均速度求正弦函数的斜率。
取 前后各 的两个时刻。由三角恒等式 ,
当 趋于零, 趋于 1。这是小角度下正弦值与弧度近似相等的结果,例如 。于是
默认运动的最大速率约为 。上式中的比值 在 2.5 节还会出现,它决定差分会把速度低估多少。
2.3 标定:把像素换成位置
若相机比例为每米 个像素,原点所在的列为 ,那么
Lab 中 ,,一个像素约对应 。真实实验通常拍下一把已知长度的尺,数出它占多少像素,再据此确定 。
标定会出两类错,影响很不一样。
比例假定错了,每个位置都按同一倍数缩放。若假定的比例比真实值大 10%,所有位置、位移和速度都被除以 1.1。误差和被测量的大小成正比:走得越远,位置误差越大。
原点假定错了,每个位置都平移同一段距离。原点偏 12 个像素,每个位置都偏 。两帧位置相减时这段平移抵消,所以速度不受影响。
Lab 的“匀速运动”预设让小球以 匀速移动,且不加噪声。比例误差设为 10% 时,速度的误差恰好是 ;原点误差设为 12 像素时,位置误差是 ,速度误差为零。两条结论都可以不依赖 Lab,用上面的公式直接算出。
2.4 怎样概括一列误差
一份记录有上百个估计值,每个都有误差 。要比较两种方法,需要把一列误差概括成少数几个数。
平均值说明误差是否整体偏向一边,标准差说明误差围绕平均值散开多宽,均方根同时包括这两部分:
把 写成 再平方求和,交叉项的和为零,因为各个 加起来正好抵消。于是
原点偏 12 像素时,位置误差的平均值是 ,标准差为零,均方根也是 。Lab 报告的各项“均方根误差”都是估计值与已知真值之差的均方根,只有在模拟中才能直接算出。
同样的推理说明另一件事。两个互不相关的误差相加,交叉项平均为零,标准差不直接相加,而是平方后相加。本章多次用到这条规则。
Lab 在每一帧加入一个落在 像素之间的扰动,再把结果取成整像素。这个扰动由确定的公式产生,不是真正的随机噪声,但在很多帧上大致均匀地铺满这个区间。均匀分布在 之间的量,标准差是 。这里直接使用这个结果,它的推导需要计算 的积分。
扰动的标准差是 像素;取整误差落在 像素之间,标准差也约为 0.29 像素。两者平方相加再开方,约为 0.41 像素,即 。Lab 默认记录的原始位置均方根误差是 ,与估算一致。
2.5 差分:用相邻帧估计速度
最直接的估计是相邻两帧的平均速度。为了让估计值对应一帧的时刻,通常取前后两帧,称为三点中心差分:
这里的帽子记号表示估计值。它有两种误差,来源不同,随帧率的变化方向也相反。
第一种叫截断误差,来自用一段有限时间代替瞬时。对匀加速运动,这个公式完全准确:把 代入,前后两项中的 部分相减后只剩 ,正是瞬时速度。对正弦运动,2.2 节已经算出,差分得到的是真实速度乘以 。
帧率为 时,,这个比值为 0.99817。速度被低估约 0.18%,误差振幅约为 ,均方根约为 。把 Lab 的噪声和取整都关掉,三点差分的速度均方根误差是 。
第二种误差来自位置噪声。两帧位置各有标准差为 的误差,相减后标准差是 ,再除以 :
代入 、,得到约 。Lab 默认记录用三点差分时,速度均方根误差为 。它比截断误差大十倍以上,可见这里的主要问题是噪声。
用像素直接看更清楚。三点差分可以写成 ,在默认设置下分母是 8 像素秒每米。前后两帧只要差一个像素,速度估计就变化 。
提高帧率能减小截断误差,却会放大噪声。帧率改为 时,原始位置误差约为 ,上式预计约 ;Lab 给出 ,是 时的四倍左右。拍得更密,三点差分反而更差。
加速度要再做一次差分,噪声被放大得更厉害。三点公式 在默认记录上的加速度均方根误差约为 ,与真实加速度的振幅 相当。
2.6 局部拟合:多用几帧换取平滑
只用两帧,噪声无处平均。改进的办法是取以第 帧为中心的 帧,用一条二次曲线贴近这些点,再取曲线在中心的斜率。
“贴近”的标准是让各点到曲线的竖直距离的平方和最小,这叫最小二乘拟合,第 3 章会详细讨论。用局部多项式拟合来平滑和求导,Savitzky 与 Golay 在 1964 年给出了一套简便算法。
用帧序号 表示窗口里的偏移。窗口左右对称, 与 的总和都是零,所以常数项和二次项不影响斜率,中心斜率等于直线拟合的斜率:
取 ,这个公式正好回到三点差分。窗口越宽,分母中的 增长得越快,噪声被平均掉的部分越多:
九帧窗口中 ,噪声只剩约 。代价是平滑:九帧覆盖 ,在这段时间里速度已经变了不少,拟合斜率把速度的峰谷削低。表 2.1 列出不同窗口在默认记录上的结果。
| 方法 | 有效估计数 | 速度均方根误差(米每秒) | 加速度均方根误差(米每二次方秒) |
|---|---|---|---|
| 三点差分 | 119 | 0.068 | 8.00 |
| 五帧拟合 | 117 | 0.037 | 1.59 |
| 九帧拟合(Lab 默认) | 113 | 0.069 | 0.357 |
| 十五帧拟合 | 107 | 0.190 | 0.467 |
| 三十一帧拟合 | 91 | 0.793 | 1.83 |
速度误差先降后升,在五帧附近最小。九帧拟合的误差主要来自平滑:关掉噪声和取整后,它的速度误差仍是 ,与有噪声时几乎相同。加速度需要更宽的窗口才能压住噪声,所以两列的最佳窗口不同。
- 参考速度
- 三点差分
- 五帧拟合
- 三十一帧拟合
图 2.1 同一份默认记录上的三种速度估计。灰色曲线是 Lab 公式给出的参考速度;圆点是三点差分,细线是五帧拟合,粗线是三十一帧拟合。
三点差分围绕参考曲线跳动,三十一帧拟合很平滑,却明显削低了峰值。五帧拟合在两者之间。三种估计只用了记录的像素和标定。
窗口该多宽,取决于窗口持续的时间与运动变化快慢之比,而不只是帧数。帧率为 时,三十一帧窗口只覆盖 ,速度均方根误差为 ,比 时的九帧窗口还好。
2.7 采样太稀:混叠
前面的方法都假设相邻帧之间运动变化不大。若振荡比帧率还快,记录本身就会误导人。
Shannon 在 1949 年证明,若信号不含高于 的频率,每隔 取一个样本就能完全确定它。反过来,帧率为 时,比 更快的振荡会在记录里冒充成较慢的振荡,这叫混叠。
Lab 的“混叠运动”预设让小球以 振荡,相机每秒只拍 4 帧。第 帧的正弦值是
记录与一个反相的 振荡完全相同。从这些帧估计速度,误差的均方根达到 ,而真实速度的振幅是 。
“频闪静止”预设更极端: 的振荡,每秒拍 2 帧。每一帧都落在 ,小球看起来一动不动。实际上每次拍摄时小球都以 穿过原点,这正是 Lab 报告的速度误差。
换什么求导方法都救不回来,因为需要的信息根本没有进入记录。唯一的检查是提高帧率,看记录是否随之改变。
2.8 速度积分回位置
第 1 章说过,位置等于初位置加上速度对时间的积分。手里只有一帧一个的速度估计时,可以把相邻两帧的速度平均,乘以帧间隔,逐段累加,这就是梯形法。
这样积分时,随机误差有正有负,会部分抵消;一个固定的速度偏差却会一直累积。“速度偏差漂移”预设在每个速度估计上加 。积分从第一个有效估计开始,到最后一个结束,共 ,积分位置比原始位置多出
这正是 Lab 读数“末段积分减原始位置”的值。默认九帧拟合没有加偏差,这个读数只有 。
另一种问题是记录有缺口。“离开传感器”预设中,小球在快结束时跑出画面,121 帧里只有 114 帧有像素。九帧窗口里只要缺一帧就不给估计,所以只剩 106 个速度估计。可靠的估计方法让这些帧空着。
2.9 例题:从五帧像素估计速度
下面是 Lab 默认记录中第 13 到 17 帧的像素列号,时刻从 到 。已知 ,,。求第 15 帧的三点差分速度和五帧拟合速度,并判断两者的差别是否异常。
| 帧号 | 像素列 | 位置(米) |
|---|---|---|
| 13 | 1208 | 1.5333 |
| 14 | 1211 | 1.5583 |
| 15 | 1213 | 1.5750 |
| 16 | 1213 | 1.5750 |
| 17 | 1210 | 1.5500 |
先换算位置,例如第 13 帧是 。小球在这几帧附近到达最右端,接着往回走。
三点差分只用第 14 和第 16 帧:
用像素看,两帧相差 2 像素,除以 8 像素秒每米,也是 。
五帧拟合取 ,:
两个估计相差 。按 2.5 节,三点差分的噪声标准差约为 ,五帧拟合约为 ,所以这个差别在噪声允许的范围内,不说明哪一步算错。
最后与真值比较。按 2.2 节的公式, 时余弦项为零,真实速度正好是漂移速度 。五帧拟合这次恰好命中,三点差分多出不到一个像素的量。真实实验没有这个真值,只能依靠上一段那种噪声估计判断结果是否合理。
2.10 在运动测量 Lab 中检验
打开运动测量与数值微分 Lab。进入页面时已经采集好一份记录,读数区直接给出整段记录的误差。“导出原始像素”保存的是相机记录,不含真值。
比较求导方法。 选择“带噪振荡”。先预测:把“导数:0 三点;1 二次拟合”设为 0,速度均方根误差会比默认的九帧拟合大还是小?再改回 1,把“二次拟合窗口帧数”依次设为 5、15、31。记录速度和加速度的均方根误差,与表 2.1 比较。然后把“取整前像素噪声上界”设为 0、“整像素取整”设为 0,看哪种窗口的误差几乎不变,并说明原因。
改变帧率。 仍用三点差分,把“帧率”从 30 提高到 120。操作前,用 2.5 节的公式预测速度误差会变成多少。
检查标定。 选择“匀速运动”,把“假定比例误差”设为 10%,记录原始位置和速度的均方根误差。点“重置”后再选“匀速运动”,改把“假定原点像素误差”设为 12。解释为什么一种误差影响速度,另一种不影响。
检查采样。 选择“混叠运动”和“频闪静止”。先根据 2.7 节预测相机看到的运动,再逐步提高帧率,找出记录开始跟上真实运动的帧率,并与 比较。
表 2.3 汇总这些设置的结果。Lab 的扰动和取整都是确定的,同样的设置总给出同样的数字。改变“确定性噪声样本”会换一组扰动:我们试过 8 个样本,三点差分的速度均方根误差在 0.059 到 之间。
| 设置 | 已追踪帧数 | 原始位置均方根误差(米) | 速度均方根误差(米每秒) |
|---|---|---|---|
| 带噪振荡,三点差分,帧率 120 | 481 | 0.0031 | 0.264 |
| 带噪振荡,九帧拟合,帧率 120 | 481 | 0.0031 | 0.042 |
| 匀速运动,假定比例误差 10% | 121 | 0.105 | 0.0455 |
| 匀速运动,假定原点像素误差 12 | 121 | 0.100 | 0 |
| 混叠运动 | 17 | 0 | 15.6 |
| 频闪静止 | 9 | 0 | 25.1 |
| 离开传感器 | 114 | 0 | 0.069 |
2.11 习题
- 相机记录给出的是哪些量?位置和速度为什么都算估计值?
- 一台相机的比例为每米 200 像素,原点在第 1024 列。小球在第 1124 列和第 1174 列各出现一次,两次拍摄相隔 。求这段时间的平均速度。若原点其实在第 1030 列,结果变不变?若比例其实是每米 190 像素呢?
- 某组误差的平均值是 ,均方根是 。标准差是多少?这组误差主要是整体偏移还是分散?
- 位置噪声的标准差是 ,帧率 。三点差分的速度噪声约为多少?改用七帧拟合呢?
- 用 2.2 节的结果说明:小球做匀加速运动时,三点差分没有截断误差;做正弦振荡时,帧率越低,速度被低估得越多。帧率为 时,默认运动的速度会被低估百分之几?
- 一位同学说:“帧率越高,测出的速度越准。”用本章的结果说明这句话在什么条件下对,在什么条件下错。
- 一个风扇每秒转 25 圈,在每秒 24 帧的视频里看起来慢慢倒转还是正转?每秒转多少圈?
- 迁移题。你用手机以每秒 240 帧拍摄一辆沿桌面滑行的小车,比例约为每米 1000 像素,跟踪误差约 1 像素。小车速度约 ,在 内变化不大。你打算怎样选择求导方法和窗口?写出估计的速度噪声,并说明你会怎样检查选择是否合适。
2.12 答案与解释
第 1 题
相机记录的是每帧的时刻和像素列号。位置要经过比例和原点的标定才能得到,依赖标定假设;速度要由多帧位置计算,依赖求导方法和窗口。它们都是估计值,误差来源也比原始记录多。
第 2 题
两次位置分别是 和 ,平均速度为 。
原点错了,两次位置一起平移,差值不变,速度仍是 。比例错了,位移按比例改变:真实比例为每米 190 像素时,50 像素对应约 ,速度约为 ,原来的结果偏低约 5%。
第 3 题
由 ,标准差为 。分散部分比整体偏移略大,两者都不可忽略。
第 4 题
三点差分:。
七帧拟合取 ,,。这只是噪声部分;七帧覆盖 ,若速度在这段时间里明显变化,还要加上平滑带来的偏差。
第 5 题
把 代入三点差分,得到 ,与瞬时速度完全相同,所以没有截断误差。
对正弦运动,差分结果是真实速度乘以 。这个比值小于 1,且 越大越小,帧率越低低估越多。默认 , 时 ,比值约为 0.984,速度被低估约 1.6%。
第 6 题
帧率越高,帧间隔越短,截断误差和混叠都会减小,在这个意义上更好。但三点差分的噪声与 成正比,帧率提高四倍,噪声也大约四倍,Lab 中速度误差从 升到 。
只有同时按帧数加宽窗口、让它覆盖的时间大致不变,更多的帧才会变成更小的误差。这句话只在位置噪声很小、或者配合合适的拟合窗口时才对。
第 7 题
每帧之间风扇转过 圈,也就是一圈再多 圈。整圈看不出来,视频里每帧只前进 圈,看起来按原方向慢慢转,每秒 1 圈。这是 的转动混叠成了 。若风扇有几片相同的叶片,每片转到下一片的位置也算一次重复,看到的速度还会不同。
第 8 题
位置噪声约为 。三点差分的速度噪声约为 ,是速度本身的三分之一,太大。
速度在 内变化不大,所以可以用持续约 的窗口,即 25 帧左右()。这时 ,噪声约为 。
检查的办法有几种:把窗口减半再加倍,看速度曲线的形状是否稳定;拍一段已知匀速的运动,看速度是否平直;再拍一把尺,重新确定比例。可以接受的答案不必选同样的窗口,但要说明窗口时长与运动变化时间的关系,并给出噪声估计。
接下来:用模型检验一次下落
本章只从记录估计速度,没有假设运动遵循什么规律。下一章换一个思路:先假设加速度恒定,推出位置随时间的公式,再用整份记录检验这个假设,并测出重力加速度。
图表与数据说明
- 正弦函数的导数与三点差分的误差按本章推导独立计算;平均速度与瞬时速度的定义见 OpenStax《University Physics》第一卷第 3.2 节。
- 表 2.1、表 2.2、表 2.3 和图 2.1 由运动测量 Lab 的模型代码按 Lab 默认参数计算:时长 、帧率 、比例 、像素噪声上界 0.5 像素并取整、确定性噪声样本 17;表中另列的设置只改动所写的参数。参考速度来自 Lab 的运动公式,只用于比较。
- 文中的噪声估计把 Lab 的确定性扰动近似为均匀分布,用来检查数量级。它不是 Lab 噪声的精确描述。
到 Lab 里检验
每次只改一个设置,再把看到的结果和本章的表格、答案对照。
运动测量与数值微分 →用模拟相机记录运动物体的像素位置,再用有限差分或局部拟合估计速度和加速度,看看噪声、混叠、标定偏差和积分漂移怎样影响结果。来源与核读范围
- OpenStax, University Physics Volume 1, §3.2 Instantaneous Velocity and Speed
对照瞬时速度作为平均速度极限和位置导数的定义,以及速率是速度大小的定义。
- A. Savitzky and M. J. E. Golay, Smoothing and Differentiation of Data by Simplified Least Squares Procedures, Analytical Chemistry 36(8), 1627–1639 (1964)
核对了出版记录。作为“滑动局部多项式拟合求导”的标准文献引用;第二章的窗口公式在正文中独立推导。
- C. E. Shannon, Communication in the Presence of Noise, Proceedings of the IRE 37(1), 10–21 (1949)
核对了出版记录。作为采样定理的出处引用;第二章只用正文直接算出的特例:采样频率不超过正弦频率两倍时,记录可能像一段更慢的运动。