我正在研究光流,并基于the lecture notes here以及互联网上的一些示例I wrote this Python code。
所有代码和示例图像也在那里。对于大约4-5个像素的小位移,计算出的矢量方向看起来很好,但是矢量的幅度太小(这就是为什么我必须在绘制它们之前将u乘以v乘以3)。
这是因为算法的限制,还是代码中的错误?上面分享的讲义也说动作需要很小“你,v小于1个像素”,也许这就是原因。这种限制的原因是什么?
答案 0 :(得分:3)
@belisarius说“LK使用一阶逼近,因此(u,v)应该理想地<< 1,否则,更高阶的术语在行为中占主导地位并且你是吐司。”
答案 1 :(得分:0)
光学流动约束方程(OFCE,参考文献第5页)的标准结论是“你的运动应该小于一个像素,更低阶的术语会杀死你”。虽然技术上是正确的,但您可以在实践中使用更大的平均窗口来克服这一点。这要求您按照幻灯片中的建议进行合理的统计,即不是纯粹的最小二乘法。通过Tikhonov正则化可以实现同样快速的计算和远远优越的结果。这需要设置调谐值(Tikhonov常数)。这可以作为全局常量来完成,或者将其调整为图像中的局部信息(例如Shi-Tomasi置信度,也称为结构张量行列式)。
请注意,这并不能取代多尺度方法的需要,以便处理更大的动作。它可以扩展范围,以适应任何单一尺度可以处理的范围。
实现,可视化和代码以教程格式here, albeit in Matlab而非Python。
提供