点云三维重建--基于两视图的射影重构,仿射重构以及度量重构

来源:互联网 发布:流星网络电视怎么样 编辑:程序博客网 时间:2024/05/22 14:32

一段时间以来一直对三维重建中的分层重建概念理解的比较模糊,这两天特地梳理了一下,用博文记录下来。


NO0.两视图重建

基于图片序列的三维重建不管在科研还是实际应用中都有了比较成功的实现,Bundler就是一个很不错的例子,随后的VisualSFM也已经得到了很好的应用,近两年发展较快的还有SLAM等,而基于两视图实现空间点的三维重建便是构造完整图片序列三维重建的第一步。本文侧重于简单归纳实现两视图重建的理论基础,由于我们通过摄像机采集的照片中往往存在不同程度的误差或者噪声,因此如果只是简单的采用下面涉及的几何原理进行重建,得到的结果会和我们的预期有较大的差别,在实际的算法实现中还需要引入更多的技巧和方法,这里为了让重建原理更加简洁清晰,所以没有深入到算法实现的细枝末节。

        根据重建结果的精确程度,可以将两视图重建分成三层,分别是:射影重构,仿射重构,度量重构(和相似重构以及大部分书里讲的欧式重构其实就是一个概念)。图2-图4显示了利用图1中两张图像在不同方法下获得的重建结果。


图1.用于重建的两张图像



图2. 通过射影重构方法获得的重建效果



图3.利用仿射重构的方法获得的重建效果



图4.利用度量重构的方法获得的重建效果

       从重建的结果我们可以直观的看出,射影重建的结果只反映出了真实场景中直线之间的相交性;仿射重建结果则进一步反映出了真实场景中存在的直线平行关系;度量重构又进一步反映出了直线之间的夹角关系,实际场景中两条直线之间的夹角为多少度,重建结果中就为多少度。由此我们可以知道,射影重构,仿射重构和度量重构组成了进行三维重构由低到高的三个层次。度量重构的结果是和场景的实际三维情况最为接近的,假如我们将场景的实际三维情况称为真实的欧式重构,那么度量重构和真实的欧式重构之间其实还相差一个相似变换(所以度量重构又被称之为相似重构),但是除了不能从模型中测量出场景真实尺寸以外,度量重构的结果已经能够满足我们的大部分需求。

        有了对两视图重建三个层次的初步了解,下面我就来梳理一下要实现这三个层次的重建需要的条件有哪些,涉及到的重要概念和结论有哪些,以及重建的过程是怎样的。

**********************\0o.  华丽丽的分割线  .o0/***********************

       

          在上述假设的基础上,下面分别对射影重构,仿射重构和度量重构进行分析。

NO1.射影重构

图5.进行射影重构的反向推导图

        在实际的求解过程中,首先需要利用特征点提取和匹配算法获得两个视图的匹配点对,然后基于这些匹配点对求得和这两个视图相关的基本矩阵F,根据已有的结论,在获得基本矩阵F的情况下,摄像机矩阵可以选择为,其中是满足的对极点。然后结合前面两个视图中的匹配点对求得他们对应的空间点三维坐标,这样就完成了三维点云的射影重构。

       那么根据两个视图中的信息我们获得的重建结果是否就是唯一的呢?通过进行理论推导我们可以证实,这样的重建结果并不唯一。下面就分两种情况对这种重构的多义性进行分析:

上述理论推导对重建来说有两个重要的意义:

1.仅仅根据图像的对应便可以求出摄影重构,如果我们知道了一个摄影重构

2.如果进一步求出能够实现摄影重构和真正的欧式重构之间的非奇异矩阵H,那么我们便可以根据射影重构定理得到真实的欧式重构了!!!Perfect^O^.

摄影重构的内容现在知道的大概就这些了,以后还会补充。下面进入到更高一层的重构----仿射重构。

NO2.仿射重构

         因为该方法获得的重建结果再经过一个仿射变换便可以得到真实的欧式重建结果,所以我们称这种方法为仿射重建。从本文开始的实例中我们知道,仿射重建能够得到比射影重建更加符合实际场景三维信息的重建结果。仿射重建本身就是在摄影重建的基础上通过添加更多的约束条件实现的。这里添加的约束条件就是对无穷远平面的定位。因此我们可以认为仿射重建的本质就是采用某些方法定位无穷远平面。要定位一个平面,我们只要知道该平面上的三个点即可,而具体如何找到这样的三个点就是仿射重建的主要任务,方法有很多,下面会进一步解析。如果不出意外的话经过求解我们可以得到一个在射影空间中表示无穷远平面的四维矢量,这里用来表示,而在真实的重构下的坐标是。所以只要找到使映射到的射影变换,我们便大功告成,得到了真实的欧式重构,等等,情况好像并不是那么简单的,先驱们已经发现:一个固定无穷远平面的射影变换其实充其量就是一个仿射变换,因此这个重构和真实的重构还相差一个仿射变换,这种重构方法也就被称为仿射重构了。同时他们也揭开了这个的神秘面纱,它就是:

接下来我们将变换作用到所有点和两个摄像机上,那么便得到了仿射重建的结果。

        现在思路已经很清晰了,接下来我们只要找到无穷远平面上3个点,进而求出了这个无穷远平面的方程,那么仿射重建也就水到渠成了,下面就重点记录下这些方法:

M1.采用平移运动实现仿射重构

        根据常识,当一个人沿一条直线运动时,距离很远的物体(比如月亮)好像是固定不动的,图6就是一个很好的例子,两幅图像中的对极点在两幅图像中的像素点位置是一样的。因此从一对视角中我们可以很容易的找出这样的三个以上的点对(当然有些图像还是不行的),并且可以确定:投影形成这些点对的原始三维点肯定处于无穷远平面上,所以我们就确定了无穷远平面的方程。这个方法也可以不通过求解无穷远平面方程来进行重建的,因为我们将运动限制在了纯平移运动的范围内,所以两个视角之间的基本矩阵F就是一个反对称矩阵,这样就大大简化了我们的求解过程。在这种情形下有这样一个结论:

假设摄像机的运动是没有旋转且内参保持不变的一个纯平移运动,那么他的基本矩阵F就是一个反对称矩阵,,并且作为仿射重构的两个摄像机矩阵可以是。然后我们将这对摄像机矩阵作用到原来的点对上也就得到了三维点的坐标。但是这个方法在实际的数值计算中并不好实现,往往用的较多的是下面一种基于平行直线的方法。

图6.左右两张图像只包含了一个平移运动,两张图中的对极点在两张图像中的像素坐标是完全相同的


M2.利用场景中的平行直线

       3D场景中平行直线的交点就是是位于无穷远平面上的,而这些直线被映射到图像上之后并往往不能保持平行,我们可以通过一些方法定位出他们的交点,这个点就是无穷远平面上一点在图像中投影形成的像。反过来将这个点用摄像机矩阵投影回去,便得到了一条和无穷远平面存在交点的射线。两个视角下的射线相交便得到了一个交点,且这个交点一定位于无穷远平面上。在图片上找到三组以上实际3D场景中的平行线,也就确定了三个无穷远点,无穷远平面也就确定下来了。

       这个方法的重点就是找到消影点对,当我们找到图像A中的一组平行线的消影点以后,为了简化计算在B图像中只要找到这一组平行线中的一条,然后A图中的消影点在B图中对应的极线,求这两条直线的交点就好了。然后根据摄像机矩阵进行投影求交点,问题便迎刃而解了。:)这种方法也是最为常用的。

M3直线上的距离比

      略

M4通过无穷单应矩阵求解

     上述内容已经包括了进行射影重构的主要框架,但是在仿射重建中我们还发现了一个十分有用的无穷单应矩阵,下面主要讲述该矩阵的获取和用处。

     无穷单应的作用就是将图像A中的一个点通过无穷远平面转移到两一张图像B上,代数表达就是:,如果两个摄像机的矩阵分别是,那么,因此我们有了如下结论:如果一个仿射重构已经得到并且其中的摄像机矩阵是,那么无穷单应矩阵就是。无穷单应矩阵的关键作用在于:当已知无穷单应为H的时候,仿射重构的摄像机可以取为。而H则可以通过三个消影点和F来计算(或者通过一条消影线与消影点对应和F来计算),具体计算方法还在学习中。。。

M5其中一个摄像机是仿射摄像机条件下的重建方法

仿射摄像机:是指摄像机矩阵的最后一行为(0,0,0,1)形式的摄像机,因为它将无穷远点映射为无穷远点(就是图像中找不到的意思吗?),所以把它叫做仿射摄像机。

如果一个摄像机是仿射摄像机,那么他的主平面就无穷远平面,而他的主平面就是仿射重构下相应摄像机矩阵的第三行,因此只要将摄像机矩阵第三行表示的平面映射到,就可以得到仿射重构了。为了完成这个至关重要的平面映射我们需要做什么呢?其实我们要做的非常简单,保证一个前提,做到两个步骤。前提就是:两个摄像机矩阵形式必须是,且P是一个仿射摄像机(其实任何一对规范的摄像机都可以变换成P是仿射的摄像机对,具体怎么变换的还在研究中。。。)。步骤就是:1.交换两个矩阵的最后两列。2.交换每一个的最后两个坐标,这样便得到了一个仿射重建。

          事实上,真实的仿射摄像机是不存在的,我们只是为了方便而进行了一种近似,这种近似是有效的前提条件是:图像上看到的点的深度变化相对于它到摄像机的距离比较小。仿射重构的内容终于O-V-E-R了,下面进入到巅峰重建----度量重构,先喝口水。。。

NO3.度量重构

        仿射重构的重点是找到无穷远平面,而度量重建则是在仿射重建的基础上找到绝对二次曲线,利用绝对二次曲线在仿射重构和真实的欧式重构之间的变换关系,将整个仿射重建的结果过提升为度量重构。绝对二次曲线在多个重构结果之间的方程是不变的(这里也说明了度量重构结果不是唯一的),因此它被称为绝对二次曲线。我们本来的目标是在仿射重构的基础上通过找到合适的矩阵,使得该绝对二次曲线映射为真实欧式空间中的绝对二次曲线。但是我们发现经过努力之后,得到的重建结果仍旧和真实的欧式重建有一定的差距,这个差距可以用一个相似变换来描述,但是这已经达到了度量重构的目的,重建结果也能够满足大部分的需求了。在这一步才开始用到了摄像机的标定矩阵。

        现在问题再次归结为找到使仿射重建结果变换到度量重建结果的单应矩阵上来了,这个单应矩阵到底是怎样的,该怎么求得。已有的研究成果告诉我们,这个单应矩阵其实早就已经被发现了,所以我们就不用再做无用功了。我们有这样的结论:如果已知绝对二次曲线在某一幅图像中的像是,且和这幅图像对应的仿射重构中的摄像机矩阵是,那么就有这样一个,他实现了由仿射重建到度量重建的一个飞跃。。。,形式如下:

其中的A由方程经过Cholesky分解得到(是否意味着使用一对图像中的另一摄像机矩阵就会得到不一样的度量重构结果?因为两一张图像的摄像机矩阵肯定不同)。纵观上述式子我们发现只有其中的是未知量,因此求取的问题归结为求取的问题,下面就来说说求取这个有哪些方法:

M1.已知内参条件下的求解方法

      如果相机的标定矩阵(也就是内参)K是已知的,那么绝对二次曲线在这张图像上的投影曲线方程为,由此也可以看出一旦摄像机的内参确定了,那么绝对二次曲线在他所拍摄的图像中的方程也就确定了,不管外参怎么变化,这个方程式永远不变的。特殊情况1:当K的扭曲因子为0时(即s=0,对大多数标准摄像机来说,扭曲因子都是0,不是0的情况只发生在CCD阵列的像素元素产生扭曲使得x和y轴不垂直的情况下),。特殊情况2:在1的基础上如果像素还是正方形的(即),那么。看起来这种方法是最实用的,而且特殊情况基本都符合实际情况,所以优先考虑这条思路。

M2.根据景物正交性约束的求解方法

       景物正交直线的一对消影点(如图7所示)V1和V2就形成了对绝对二次曲线在这张图像中投影的一个约束。类似的,来自一个方向的消影点V和与之垂直的平面消影直线l对提供了另外的约束(一个常用的例子就是垂直方向的消影点和水平地面平面的消影直线)。

图7.图中横的和竖的两组直线各有一个消影点

M3.同一摄像机在多幅图像中的约束

在多张图像中,因为摄像机没有变,所以绝对二次曲线的投影在任何一个视图中都不会发生改变,再利用仿射重建中的无穷单应将其中一张图像中的转换到另外一张图像上,,这个方程会得到关于的4个约束,而有5个自由度,因此还需要额外的信息加入才能获得解。

M4.如果已知,直接利用它求得度量重构

一条思路是根据计算出两个摄像机的内参,然后利用本质矩阵和基本矩阵,内参之间的关系求得本质矩阵,然后利用本质矩阵恢复这相机矩阵,接着进行三维重建。

NO4.终极巅峰重构

           这一部分所讲的是由射影重构结果直接升级为度量重构。

          两种方法:下面分别介绍:

M1:在射影重构下空间点的集合为{},这些点的对应坐标在射影重构下很容易通过计算获得。射影重构结果和实际的欧式重建结果可以通过一个单应矩阵联系起来:

(其中i=1,2,3......n)

每一组点对提供三个独立的线性方程,而H有15个自由度,因此需要5对以上(且没有四个控制点是共面的)的对应点就可以求出这个H。

M2:另一种方法是不经过计算,而利用对真实的欧式空间中的点进行投影变换和图像中的点对应关系得到方程,从而得到解,方程形式如下:

一个对应点对产生两个方程,所以总共需要7对以上的对应点才能接出H,同时要注意如果是两张图像的一对对应点,则这一组点由于共面的关系,得到的4个方程中只有3个是线性无关的。这种方法和上一种方法相比的优势在于不需要欧式空间点在两张图像中的对应点都被找到,而上一种方法则要求,不然没法求出射影重建下的三维坐标。图8展示的是在射影重建下利用5个世界点坐标进行度量重建的实例。

图7.在射影重建下利用空间点的欧式物理坐标进行度量重建的步骤和结果



        以上就是两视角重建相关的内容学习小结,各位亲爱的观众朋友们,如果你能够看到这句话才停下来,那你一定是一个非常伟大的人,感谢你宽广的胸怀接纳了我拙劣,对,就是拙劣的文笔和混论逻辑下的重建原理,我一定要向你表示敬意!!!如果发现文中有错误,请在下面直接回复给我,一定要毫不犹豫的做到^o^,我会尽快回复的。


NO5.俩视图重建方法小结

给定两幅未标定的图像,计算摄像机和景物结构的一个度量重构可以通过以下的方法实现:

(1)计算射影重构

             (a)由两幅图像之间的点对计算基本矩阵

             (b)由基本矩阵计算摄像机矩阵

             (c)根据匹配点对,利用摄像机矩阵进行反投影得到空间点坐标。

(2)有射影重构提升到度量重构

             这一步有两种方法,要么根据在欧式空间中已知位置的5个点直接计算满足的单应矩阵H,再将H作用到射影重构下的摄像机矩阵和空间点坐标上便得到了度量重构。要么再用分层的方法进行由两个步骤实现的重构:

             (a)首先进行仿射重构,计算出无穷远平面,然后用单应矩阵把射影重构提升到仿射重构。

             (b)在进行度量重构,按照前面所述的方法找到绝对二次曲线的像,然后用单应对仿射重建结果进行提升。其中A由经过        Cholesky分解得到,M是仿射重建中摄像机矩阵左边的3*3子矩阵。


Reference:

1.计算机视觉中的多视图几何,中文版第一版

2.Mastering  OpenCV with practical Computer Vision Projects


@@@最后编辑于29/08/2013 20:50                   




原创粉丝点击