C++ 基于光流信息的运动恢复

C++ 基于光流信息的运动恢复,c++,opencv,math,opticalflow,C++,Opencv,Math,Opticalflow,我已经实现了一个函数,使用OpenCV的calcOpticalFlowFarneback()在两个连续帧之间计算密集光流。我正在将结果以x,y的形式写入txt文件(每个向量一行)。图像大小为640x480,因此我有一个307200向量,表示两个连续帧之间图像中每个像素的速度方向 我想知道是否有可能根据光流的信息计算出一个变换矩阵。我会说,有没有可能重建图像中的对象如何在两帧之间移动,并重建一个变换矩阵,以便我可以将第二个图像与第一个图像对齐 图像中除了我想要跟踪的对象(由白色背景上的单点构成的对

我已经实现了一个函数,使用OpenCV的
calcOpticalFlowFarneback()
在两个连续帧之间计算密集光流。我正在将结果以
x,y
的形式写入
txt文件(每个向量一行)。图像大小为
640x480
,因此我有一个
307200
向量,表示两个连续帧之间图像中每个像素的速度方向

我想知道是否有可能根据光流的信息计算出一个变换矩阵。我会说,有没有可能重建图像中的对象如何在两帧之间移动,并重建一个变换矩阵,以便我可以将第二个图像与第一个图像对齐

图像中除了我想要跟踪的对象(由白色背景上的单点构成的对象)之外没有其他内容,但对象本身是丰富场景的投影,因此光流信息中存在一些噪声。已知图像之间的帧率
tf
。请注意,尽管光流仅提供2D信息(因为输入图像是2D的),变换矩阵稍后应在3D对象上执行3D空间变换。我输入光流计算的2D图像是该对象的特定2D-“快照”。由于自由度受限,来自2D光流的重构变换矩阵应足以正确变换3D对象


我想使用尽可能多的内置OpenCV功能。我读过,我认为这可能会有帮助。但我不确定如何将307.200向量所包含的所有信息正确地输入到这样一个矩阵的计算管道中。也许我可以计算一个代表整个光流矢量场平均值的单个矢量,并将其属性用作运动恢复的输入?

这是可能的。它可能是远处的一个大物体,也可能是附近的一个小物体。议案也相应地进行了调整。在估计对象的完整运动之前,您需要提供对象的大小信息。您需要的是所谓的运动结构和SLAM(同步定位和映射)