opencv - 光流中的像素对应

标签 opencv frame tracking pixel opticalflow

我对视频序列中的光流概念有点陌生,我已经阅读了关于光流的基础知识,并且熟悉 Horn & Shunck 方法或 Lucas & Kanade 方法。

我意识到在这些方法中我们正在计算一些表示图像中像素运动的向量,当然这些像素有一些限制(亮度恒定性、平滑度和......)

我的问题:

根据公式fx*u + fy *v = -ft 我们如何才能准确地建立帧 t 中的一个像素与帧 t + 1 中的另一个像素之间的对应关系?

我的意思是我们如何确定它是我们在帧 t + 1 中找到的帧 t 中的相同像素,我不知道在哪个在他们的算法中,我们正在寻找这些像素并在帧 t 和帧 t + 1 中的像素之间建立对应关系! 我知道我们可以找到移动的像素,但我不知道我们是如何找到帧 t 和帧 t + 1 中像素之间的关系的。

我希望你能理解我的问题:o)(o:

如果可能的话,尽可能地给出答案。

谢谢你

最佳答案

实际上 Horn、Schunk 和 Lucas 的方法,Kanade 以不同的方式处理方程:

Fx*U + Fy*V = -Ft

如您所见,这个方程是一个欠定方程组。因此 Horn 和 Schunk 提议整合第二个假设。平滑度约束UV的偏差应该很小。这已集成到您拥有的最小二乘框架中:

(Fx*U + Fy*V + Ft)² + lambda * (gradient(U)² + gradient(V)² = E
E -> min

通过将 E 的偏差设置为 0,使用该方程可以求解 UV .因此,运动向量的解通过 UV 的梯度算子连接起来。

Lucas 和 Kanade 提出在 Lucas Kanade 窗口定义的区域中只计算一个运动向量(或者一个区域只有一个运动/运动恒常性约束)并将其放入最小二乘框架:

sum(Fx*U + Fy*V + Ft)² = E
E->min

对定义区域中的每个像素进行求和。并且 UV 也可以很容易地计算出 E 的偏差设置为 0

通过这两个方程,您可以看到像素对应是通过使用时间 (Ft) 和空间图像梯度 (Fx, Fy). Lucas 和 Kanade 的原始论文中有一张很好的图片,以图形方式显示了这种相关性。但是,有几点需要考虑:

  • 如果图像包含纹理(孔径问题),这些方法只能计算运动矢量
  • Fx*U + Fy*V + FtF(x, y, t) = F(x + U, y + V, t + 1)。这意味着您的图像信号需要是线性的。因此,您最多只能计算几个像素的运动。这就是使用图像金字塔来提供线性度的原因。
  • 运动恒常性或平滑度约束可防止出现明显的运动边界。这在某些应用中可能很重要。
  • 该框架不会阻止您解决经典对应问题。

关于opencv - 光流中的像素对应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873791/

相关文章:

c++ - 我需要一个使用 OpenCV 比较 2 个面孔(UIimage )并通过 IOS 获取距离的示例

追踪号码模式

paypal - 来自用户未访问的页面的 Google Analytics

http - 某些服务如何跟踪每个收件人打开的电子邮件?

python - 我该如何制作没有小部件的框架?

ios - Open CV - iOS PNG Overlaying images with transparent background 显示白色背景

python - 属性错误 : module 'cv2.cv2' has no attribute 'createFisherFaceRecognizer'

python - 在 Python 中创建 HandTrackingProject 错误

iphone - 以编程方式创建一个 View ,并将框架设置为 super View 的框架?

Swift 让键盘适应设备屏幕