我正在研究用于计算视频中光流的 Horn-schunck 方法。我的代码是用 C 语言编写的,这意味着我要从头开始实现所有算法,包括对图像进行灰度缩放、计算导数等。我无法完全吸收该方法的精髓。我得到的最终流矩阵将包含每个像素的位移向量,对吧?对于每个像素,流矩阵中的值表示它在下一张图像中的位移量。
当我的所有像素值都在 0 到 255 之间时,这是如何工作的,我所有的计算都是在这些像素值上完成的,并且结果输出给出了一个 1920 X 1080 图像中的位移。
我正在研究用于计算视频中光流的 Horn-schunck 方法。我的代码是用 C 语言编写的,这意味着我要从头开始实现所有算法,包括对图像进行灰度缩放、计算导数等。我无法完全吸收该方法的精髓。我得到的最终流矩阵将包含每个像素的位移向量,对吧?对于每个像素,流矩阵中的值表示它在下一张图像中的位移量。
当我的所有像素值都在 0 到 255 之间时,这是如何工作的,我所有的计算都是在这些像素值上完成的,并且结果输出给出了一个 1920 X 1080 图像中的位移。
您的方法的结果将是具有两个通道或两个矩阵的矩阵,一个用于 u(或 dx)方向/位移,另一个用于 v(或 dy)方向/位移。这意味着你有一个向量场
[u(x,y) v(x,y] = optical flow for each position (x,y) in your image
此向量场(此字段的值)具有浮动精度。这意味着例如u(0,0) = 0.2 v(0,0) = 0.13
。因此,在您的计算机的一部分中,您已将输入图像的灰度值转换为浮动值。这主要是在您计算梯度时完成的,例如使用 sobel 算子。OpenCV库有一个 Horn-Schunk 实现。虽然阅读代码需要一些时间,但您可以放心,这是实现此方法的一种非常有效的方式。