关于运动管道结构的问题

时间:2014-04-25 09:35:24

标签: opencv 3d computer-vision 3d-reconstruction

我一直在尝试在OpenCV中为项目实施一个简单的SFM管道而且我遇到了一些麻烦。

它适用于未经校准的摄像头所以我没有相机矩阵(是的,我知道它会使事情变得更加复杂和模糊)。
我知道在尝试这样的事情之前我应该​​阅读更多内容但是我时间紧迫,而且当我遇到它们时,我试图阅读有关事物的内容。

这是我目前的管道,我从许多文章,代码示例和书籍中收集到了。我已经发布了关于其后的具体步骤的问题,并且还想知道我在这个或我做错的事情中有什么遗漏?

这是我目前的管道。

  1. 从图像中提取SIFT / SURF关键点。
  2. 成对匹配图像。

    1. 在成对匹配期间,我运行"比率测试"减少关键点的数量。
    2. (不确定)我读到计算基本矩阵(RANSAC)并从匹配中删除异常值进一步帮助它。
        

      问)我是否需要这样做?它是否太多或者我应该做一些像Homography这样的事情以避免8点的堕落情况?

    3.   
  3.   
  4. 接下来,我需要选择2张图片来开始重建。   

        
    1. 我在图像对之间找到了Homography Inlier的数量。我按照大多数%inlier的顺序迭代图像对列表。
    2.   
    3. 我计算基本矩阵。
    4.   
    5. 我"猜测" K矩阵并使用Hartley的公式计算基本矩阵。
    6.   
    7. 我用SVD分解这个Essential Matrix,然后验证4个解决方案。   
          
      • 我使用维基百科条目中的逻辑和这个python要点来实现我的检查。

          

        问)这是对的吗?或者我应该对这些点进行三角测量,然后确定它们是否在摄像机前面,或者它是否能够完成相同的操作?

      •   
    8.   
    9. 如果在查找Essential Matrix时遇到问题,请跳过它并检查下一个图像对
    10.   

    11. 设置P = [I | 0]和P1 = [R | T],执行三角测量并将3d点存储在某些数据结构中。还存储P矩阵。

    12. 使用大量迭代运行捆绑调整步骤以最大限度地减少错误。

        

      这里有点朦胧,我很确定我搞砸了什么。

    13. 根据观察到的最多3d点数选择要添加的下一个图像。

    14. 使用类似PnPRasnac之类的东西,从已知的3D点估计这个新图像的姿势。使用R& S的值。因为它的投影矩阵P1 = [R | t]
    15. 对所有这些新图像进行三角测量(我知道,我不需要对所有这些图像进行三角测量)到目前为止使用P矩阵进行三角测量的图像为P = PMatrices [ImageAlreadyTriangulated]并获得P1上方。

        

      问)它是否真的像使用我们使用的P的原始值一样简单?这会将所有东西都放到相同的坐标空间吗?如上所示,三角测量点是否与从P和P1的初始值获得的系统相同,或者我是否需要在此处进行某种转换?

    16. 从我们从三角测量中获得的点数中,只添加我们尚未存储的3D点数。

    17. 每两张图片后运行一次捆绑调整
    18. 返回步骤6,直到添加所有图像。
    19. 一般问题:

      • 我应该使用undistort来获得积分或其他东西 我的相机矩阵K只是猜测?
      • 对于捆绑调整,我将点输出到文件中 捆绑调整(BAL)格式。我应该转换它们吗? 通过R = R'到世界坐标空间&安培; T = -RT还是留下来?

      我知道这必须经过长时间的阅读。非常感谢您的时间:))

2 个答案:

答案 0 :(得分:1)

我可以推荐这篇文章; https://github.com/godenlove007/master-opencv-book/tree/master/Chapter4_StructureFromMotion

为了构建它,您需要SSBA和PCL库作为先决条件。 SSBA构建起来非常简单,但如果您计划使用Visual Studio 2013,则PCL可能会非常棘手。在这种情况下,您必须从源代码构建PCL的先决条件,这需要一些时间。

一旦你建立了这个项目,你就可以检查那个人是如何做到的并与你的想法进行比较。

答案 1 :(得分:1)

您建议的管道通常是正确的。 3.1除外。

2.2)正确。 RANSAC随机选取点来估计基本矩阵,并且足够强大到异常值(只要你有足够的有效匹配当然)。 Homography异常值不一定是坏匹配,因此不应使用单应性来过滤匹配。

3.1)不正确:Homography inlier是在两个视图中完美对齐的匹配,例如在两个视图之间呈现成比例或类似移动的点。 这意味着,视图对中单应性内容的数量越多,ViewPair作为基线三角测量的种子就越好。使用RANSAC估算的基本矩阵中的这两个视图的相机矩阵很可能会出现不准确,并且重构将永远不会恢复。 你想要做的是从ViewPair开始,它具有最低百分比的单应性内容,并且仍然有大量的匹配。 不幸的是,具有最高匹配数的图像对通常也具有最高数量的单应性内容。这是因为通常这些对包含非常少的相机移动...

3.4)我所做的是使用所有4种可能的相机矩阵模糊来尝试三角测量。 R1 | t1,R1 | t2,R2 | t1,R2 | t2

8)是的