opencv - 光流运动结构

标签 opencv opticalflow 3d-reconstruction structure-from-motion

假设我有一段来自行车记录仪的视频。我想使用运动结构技术构建记录场景的点云。首先,我需要跟踪一些点。

哪种算法可以产生更好的结果?通过使用稀疏光流(Kanade-Lucas-Tomasi 跟踪器)或密集光流(Farneback)?我已经尝试了一些但无法真正决定。他们每个人都有自己的长处和短处。

最终目标是获取场景中记录的汽车的点云。通过使用稀疏光流,我可以跟踪汽车的有趣点。但这将是非常不可预测的。一种解决方案是在图像中制作某种网格,并强制跟踪器在每个网格中跟踪一个有趣的点。但我认为这会非常困难。

通过使用密集流,我可以得到每个像素的运动,但问题是,它无法真正检测到只有很少运动的汽车的运动。此外,我怀疑算法产生的每个像素的流量是否那么准确。另外,有了这个,我相信我只能获得两帧之间的像素移动(与使用稀疏光流不同,我可以在其中获得同一有趣点随时间的多个坐标 t)

最佳答案

您的标题表明 SFM 其中包括姿势估计 ,

跟踪只是第一步(匹配),如果你想从视频中获取点云(非常艰巨的任务),我首先想到的是bundle adjustment,它也适用于 MVE,

然而,对于视频我们可以做更多,因为帧彼此太靠近,我们可以使用更快的算法,如(光流),/比匹配 SIFT/并从中提取 F 矩阵,然后:

E = 1/K * F * K

回到你原来的问题,什么更好:

1) 密集光流,或者

2) 稀疏一个。

显然你在离线工作,所以速度并不重要,但我会推荐稀疏的,

更新

对于 3d 重建,密集可能看起来更有吸引力,但正如您所说,它很少有鲁棒性,因此您可以使用稀疏但添加尽可能多的点使其成为半密集

我只能说出一些可以做到这一点的方法,比如 mono-slamorb-slam

最终更新

像我之前写的那样使用半密集,但是 SFM 总是假设物体是静态的(没有运动),否则它永远不会起作用。

在实践中使用图像中的所有像素从未用于 3d 重建(不是直接方法),并且 SIFT 一直被称赞为特征检测和匹配的方式,..最近所有像素都用于不同类型的校准,for ex in methods like:Direct Sparse odometry and LSD known as Direct methods

关于opencv - 光流运动结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098251/

相关文章:

Javascript 光流实现

python - 在OpenCV上输入高分辨率视频文件时,fps较低

opencv - OpenCV:在Windows 7上构建库期间,cmake失败

python - 如何使用python opencv2减去两个图像以获得前景对象

python - 在 opencv python 中实现光流时选择我自己的点而不是角点

mesh - 从使用点云库通过泊松重建构建的网格中去除水密性属性

c - 从外部摄像头捕获 OpenCV

c++ - 找到每个像素opencv的光流

c++ - 如何使用 OpenCV 从已知的 3D 点云(没有 I 构建)估计新图像 I 的相机姿态矩阵

opencv - 如何使用opencv找到具有内在和外在参数的点的3d位置