来自Motion的结构,在给定2D图像点对应的情况下重建3D点云

时间:2014-05-12 15:45:49

标签: algorithm 3d computer-vision 3dcamera

使用例


  • 物体以不同的速度绕着它的中心旋转
  • 固定相机正在看物体
  • 给定2D图像点对应重建3D点云
  • 当物体旋转时,相机会看到它的不同部分,因此,不同的点和检测到对应关系。


场景


一个。 N图像
湾N-1图像对
C。 N-1 2D点对应(两个2D点阵列)


实施


对于(N-1)个2D点对应中的每一个

  1. 计算相机相对姿势
  2. 三角测量以产生3D点数
  3. 对于每2个3D点数组,使用[c]
  4. 中给出的2D对应关系导出对应关系
  5. 使用3D对应派生@ [3]导出每个对象3D点的轨迹,为每个对象点/顶点生成单个轨迹

  6. 结果:


    A(N-2)个3D点数组,对应关系,相机姿势和轨迹(每个对象点一个轨迹)


    考虑解决问题的方法:


    鉴于三角测量结果在一定范围内是准确的,计算点云 A.每个三角测量结果和相机相对平移都以非齐次坐标表示(每个结果具有不同的比例)。
    B.假设物体结构是实心的,因此不会改变,则每个3D点到其中心的距离对于所有相机姿势都应相同。
    C.考虑到[B],在[A]和摄像机翻译的所有三角形3D点都可以转换为齐次坐标系。
    D.选择一个摄影机姿势并将每个轨道中的第一个点(定义为@ [4])转换为该摄像机姿势(通过累积摄像机的姿势的倒数进行变换),得到,预期点可以。

    以上是从2D点对应生成点云的正确方法吗?

1 个答案:

答案 0 :(得分:3)

重建对象是正确的过程。去年我在大学的一个项目上研究过这个话题。我的经验是用手移动相机重建物体并不容易。

<强>匹配

首先,您必须考虑inteset点的匹配。 SURF和SIFT是这一点的良好匹配方法。当物体移动小于15°时,您可以考虑使用USURF,这比正常的SURF快一点(有关详细信息,请参阅SURF论文)。在我们的项目中,我们决定使用OpenCV中的光流,它看起来有点慢,但对异常值更强。您的对象只是旋转,所以您也可以考虑使用它。

评估矩阵

接下来是评估新相机矩阵的结果。您是否有可能找出物体旋转的程度(如某些步进电机或其他东西)?因此,您可以将计算结果与电机步骤进行比较。如果它高于阈值你知道计算是坏的。但是,对于一些步进电机的精度并不是很好,但是一些实验可能会带来更多的信息。

评估云

有一些很好的方法来评估计算的云。最简单的方法是计算云的重投影错误。为此,您只需反转重建并查看计算图像指向远离原始对应点的距离。 另一项测试是检查所有点是否都是相机的缺陷。通过计算可以发现点位于摄像头前方和后方。我知道当两个相机相互关闭时它会发生,并且三角测量也会终止。

第一张图片对

我不确定静态相机是否需要此步骤。但首先我们必须计算一个基本矩阵。我们使用具有最多匹配的图像对来提取它们并使用RANSAC版本获得最佳结果。但也许您可以尝试放置对象,使其在第一次拍摄时在前面具有最多的Intereset点。

关注图片对

真正有效的是从之前的旧图像对计算的现有点云中提取新的相机位置。为此你已经记住了以前的2D 3D相关图像。它被称为PerspectivenPoint相机姿势估计(PnP)。

最后我们得到了一些好的和坏的结果。这取决于扫描对象。以下是一些帮助我的文章:

Modeling The World

Live Metric 3D-Reconstruction