Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 光流运动结构_Opencv_Opticalflow_3d Reconstruction_Structure From Motion - Fatal编程技术网

Opencv 光流运动结构

Opencv 光流运动结构,opencv,opticalflow,3d-reconstruction,structure-from-motion,Opencv,Opticalflow,3d Reconstruction,Structure From Motion,比如说,我有一个硬盘录像机的视频。我想使用“运动结构”技术构建录制场景的点云。首先,我需要跟踪一些点 哪种算法可以产生更好的结果?使用稀疏光流(Kanade Lucas-Tomasi跟踪器)或密集光流(Farneback)?我做了一些实验,但不能真正决定。他们每个人都有自己的长处和短处 最终目标是获取场景中记录的汽车的点云。通过使用稀疏光流,我可以跟踪汽车的有趣点。但这将是相当不可预测的。一种解决方案是在图像中制作某种网格,并强制跟踪器在每个网格中跟踪一个感兴趣的点。但我认为这将是相当困难的 通

比如说,我有一个硬盘录像机的视频。我想使用“运动结构”技术构建录制场景的点云。首先,我需要跟踪一些点

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

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


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

你的标题指示SFM,其中包括姿势估计

跟踪只是第一步(匹配),如果您想从视频中获取点云(非常困难的任务),我首先想到的是束调整,它也适用于MVE

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

E=1/K*F*K

回到你最初的问题,什么更好:

1) 密集光流,或

2) 稀疏的一个

显然你在离线工作,所以速度不重要,但我建议你使用稀疏的

更新

对于三维重建,密集可能看起来更吸引人,但正如您所说,它很少健壮,因此您可以使用稀疏,但添加任意多的点,使其成为半密集

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

最终更新

正如我前面所写的,使用半稠密,但是SFM总是假设静态对象(没有移动),否则它永远不会工作


在实际应用中,使用图像中的所有像素从来没有用于三维重建(不是直接的方法),而SIFT一直被称赞为特征检测和匹配的方法。。最近,所有像素都用于不同类型的校准,例如:直接稀疏里程计LSD被称为直接方法

您是否尝试了使用SIFT功能的SfM的常用方法?两者都使用如何?@Sunreef我刚刚尝试了
良好跟踪功能(gftt)
。SIFT怎么能比gftt更有用呢?@mika已经考虑过了。但是计算起来不是很繁重吗?