Opencv 光流中的像素对应

Opencv 光流中的像素对应,opencv,frame,tracking,pixel,opticalflow,Opencv,Frame,Tracking,Pixel,Opticalflow,我对视频序列中光流的概念有些陌生,我已经阅读了有关光流的基础知识,我熟悉Horn&Shunck方法或Lucas&Kanade方法 我意识到,在这些方法中,我们正在计算一些表示图像中像素运动的向量,当然这些像素有一些约束(亮度恒定性、平滑度和……) 我的问题: 根据公式fx*u+fy*v=-ft 我们如何准确地在帧t中的一个像素与帧t+1中的另一个像素之间建立对应关系 我的意思是,我们如何确定它是我们在帧t+1中找到的帧t中的同一像素,我不知道我们在他们的算法的哪个部分找到这些像素,并在帧t和帧t

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

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

我的问题:

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

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

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

如果可能的话,请尽可能精确地回答


Merci beaucoup

使用Fx*U+Fy*V=-Ft,我们无法为一个像素求解此方程…因此,在cvGoodFeaturesToTrack为您提供一组像素后…将围绕该组中的每个像素选择一个窗口…根据该面片/窗口的恒定强度假设(将所选像素居中)假设在下一帧中具有相同的强度。因此假设在帧a中,我们通过考虑点周围的窗口来找出点的U和V…U和V给出了特定点在水平和垂直方向上应该通过的像素位移…使用U和V,我们找到点在下一帧中的位置,即.frameB.根据恒定强度假设,frameB中预测点周围的面片应具有与frameA中点周围的面片相同的强度…在检查frameA和frameB中两个面片之间的强度后,确定该点是否处于良好轨道下..我已尝试解释了同样的内容如果我在某一点上错了,我可以……纠正我。

实际上霍恩、舒克和卢卡斯、卡纳德的方法以不同的方式处理方程:

Fx*U + Fy*V = -Ft
正如你所看到的,这个方程是一个欠定方程组。因此Horn和Schunk建议整合一个二次假设。平滑度约束
U
V
的偏差应该很小。这被整合到一个最小二乘框架中,你有:

(Fx*U + Fy*V + Ft)² + lambda * (gradient(U)² + gradient(V)² = E
E -> min
利用该方程,可以通过将
E
的偏差设置为
0
来求解
U
V
。因此,运动矢量的解通过
U
V
的梯度算子连接

Lucas和Kanade建议在定义的区域中,Lucas-Kanade窗口只计算一个运动矢量(或一个区域只有一个运动/运动恒定约束),并将其放入最小二乘框架中:

sum(Fx*U + Fy*V + Ft)² = E
E->min
对定义区域中的每个像素进行求和。如果将
E
的偏差设置为
0
,也可以轻松计算
U
V

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

  • 如果图像包含纹理,这些方法只能计算运动矢量(孔径问题)
  • Fx*U+Fy*V+Ft
    F(x,y,t)=F(x+U,y+V,t+1)
    的一阶泰勒近似值。这意味着您的图像信号需要是线性的。因此,您只能计算高达几个像素的运动。这就是为什么使用图像金字塔来传递线性
  • 运动恒定性或平滑度约束可防止尖锐的运动边界。这在某些应用中可能很重要
  • 该框架不会阻止您解决经典的通信问题

在Horn和Schunk的方法中,不需要通过无关的方法计算两帧之间的像素对应关系。H&s是一种迭代算法。对于两个连续的帧,从u-s和v-s的一些初始值开始,迭代直到收敛

详情:

对于两个连续的帧,执行以下几次迭代(这是为每个像素计算的,假设有一个u-image-buffer和一个v-image-buffer)

在哪里

*, stands for multiplication
P = Fx * u_av + Fy  * v_av + Ft
D = lambda + Fx**2 + Fy**2
Fx = gradient of image along x (can be averaged across the two frames)
Fy = gradient of image along y (can be averaged across the two frames)
Ft = temporal gradient across two frames
u_av = (sum of u-s of 4 diagonal neighbors)/4
v_av = (sum of u-s of 4 diagonal neighbors)/4
lambda=smoothness constraint coefficient
u和v的初始值可以是零

*, stands for multiplication
P = Fx * u_av + Fy  * v_av + Ft
D = lambda + Fx**2 + Fy**2
Fx = gradient of image along x (can be averaged across the two frames)
Fy = gradient of image along y (can be averaged across the two frames)
Ft = temporal gradient across two frames
u_av = (sum of u-s of 4 diagonal neighbors)/4
v_av = (sum of u-s of 4 diagonal neighbors)/4
lambda=smoothness constraint coefficient