我已经实现了一个在两个连续帧之间使用OpenCV的calcOpticalFlowFarneback()
来计算密集光流的函数。我将结果以txt-file
的形式写入x,y
(每个向量一行)。图像大小为640x480
,因此我有307200
个向量,表示两个连续帧之间图像中每个像素的速度方向。
我想知道是否有可能根据光流信息计算变换矩阵。会说,是否有可能重建图像中的物体如何在两帧之间移动并重建变换矩阵,以便我可以将第二张图像与第一张图像对齐?
图像除了我想跟踪的对象(白色背景上由单个点构建的对象)之外没有任何其他内容,但是对象本身是丰富场景的投影,因此在光流信息中存在一些噪声。图像之间的帧速率tf
是已知的。注意,尽管光流仅提供2D信息(因为输入图像是2D),但是变换矩阵稍后应该在3D对象上执行3D空间变换。我输入光流计算的2D图像是该对象的特定2D-快照。由于受限制的自由度,来自2D光流的重建变换矩阵应足以正确地变换3D对象。
我想尽可能多地使用内置的OpenCV功能。我读过有关cv::EstimateRegitTransformation和here的内容,我认为这些内容可能会有所帮助。但我不确定如何将307.200向量正确保存的所有信息都输入到这种矩阵的计算流水线中。也许我可以计算一个代表完整光流向量场平均值的单个向量,并使用它的属性作为运动恢复的输入?