从内外参到 Structure From Motion(SFM)

 

        去年,我有幸了解到image-based modeling的相关知识。作为一个大三本科生,虽说自己此前也做过一些相关工作,但是要自己实现Structure from motion,确实是费尽了我的脑袋壳儿(3个月)。

       哦对,顺带宣传一下此前自己尝试过的一个相关的内容:Shape from shading(点击打开我的另一篇博客)。

 

首先贴下我的程序的实现结果:

       平台:Qt + OpenGL + OpenCV

       功能:(我实现的SFM算法——稀疏点云的获取)

       程序截图:

1. 学校首任校长的雕像

输入数据:

输出结果:

 

2. 紫薇树:

输入数据:

输出结果:

 

3. 矮灌木

输入数据:

输出结果:

写在前面:

 

       前面给出了三组测试用例的执行结果: 我的SFM算法实现。整体看来还是不错的,程序是其实有些不足,比如:对图像的分辨率要求比较高、若图像抖动会影响重建效果、恢复速度慢等等缺点。相比起VisualSFM及CMVS还是缺少了不少东西的。

       关于SFM和CMVS的关系:SFM是得到稀疏点云的方法,CMVS是日本Yasutaka Furukawa(Washington University的assitance professor)基于SFM提出的多幅图像密集点云的提取方法。当然了,如果想要自己实现密集点云的CMVS,首先要实现稀疏点云的SFM。

       我实现的程序也算是能得到相对密集的三维信息,也有比较快的执行速度。限于自己的知识水平有限,暂时无法做到CMVS那样的密集点云的效果。

       顺带说明一下:我采用的方法大抵是知网、IEEE、SIGGRAPH上能够找到的关于SFM的Papers。说实话,虽说实现了出来,也是博主照葫芦画瓢,对原理的认识还是挺模糊的。不过还是希望接下来的介绍能够对看到这篇文章的人有所帮助。欢迎讨论~~~

 

Structure from motion简介:

     Structure from motion (SfM) is a photogrammetric range imaging technique for estimating three-dimensional structures from two-dimensional image sequences that may be coupled with local motion signals. It is studied in the fields of computer vision and visual perception

    Structure from motion(SFM)是由一系列包含着视觉运动信息(motion signals)的多幅二维图像序列(2D image sequences)估计三维结构(3D model)的技术。它属于计算机视觉及可视化的研究范围。

 

Structure from motion 的简单原理:

     说明:paper里面的太多数学原理、公式啥了,看的心累。这里整理出来的是简单的步骤,数学部分几乎没有。当然能理解最好,不要像我这样子半吊子…… 其实很多东西opencv已经帮我们做好了,我们只需要通过其中的函数就能实现下面的几个关键步骤。

1. 相机坐标系

为了更好的表示相机的旋转、平移,需要先引入相机的参考系。Z轴沿镜头方向,如下图(几乎每篇关于SFM的paper必有的图片……)

2. 相机的内参矩阵和外参矩阵

    熟悉OpenCV的同学应该知道这一点。在市面上大多数计算机视觉方面的教材对这个都有很详细的讲述。这里不详细说了,不清楚的娃儿可以翻翻教材或者看看下面的博客:

     http://blog.csdn.net/liyuan123zhouhui/article/details/52043683(摄像机内参、外参矩阵)

这里需要提一下:

     一般来讲,内参矩阵需要通过标定求出来,但是其实部分参数我们可以从图片的信息中获取,在图片上右键“属性”,可以找到部分需要的信息:

     外参矩阵的话:[R T] 包含从世界坐标系到相机坐标系的旋转、平移关系。

三、特征点提取和特征点匹配

     这里可以不用我们去实现,使用OpenCV中的SIFT或SURF都可以做到。不过需要OpenCV3.0,之前版本的OpenCV可以直接使用SIFT和SURF,但是3之后的版本有我们需要的功能,只是它的SIFT等等被移动到nonfree.hpp里去了。具体的配置可以参考下面的链接(亲测可行,Qt下配到吐血!!!!):

     (OpenCV3.1.0+Contrib配置)http://blog.csdn.net/qq_25517467/article/details/52189057

 

四、计算本征矩阵,进一步求出R、T矩阵

       在得到匹配筛选过的特征点后,就能够计算出图像间的本征矩阵了。使用OpenCV中的findEssentialMat()方法可以直接实现。之后对求得本征矩阵essentialMat进行分析,得出图像间的相对变换矩阵R和T(两幅图像间的变换关系)

 

五、利用已知的R、T和匹配的特征点还原三维坐标。

      这一步,需要我们自己去实现了。但是建议先去了解一下“三角测距”。因为到现在,我们已经知道图像两两之间的旋转平移的变换矩阵R、T,以及图像两两间的特征点匹配信息。这个就和“三角测距”非常类似。

     关于这一步的实现可以参考各个论文或者下面的链接:

     http://blog.sina.com.cn/s/blog_662c78590100zqwd.html

 

六、补充:

1. 关于SIFT、SURF的选择:SIFT得到的结果相对比较稀疏且特征点的价值较高,但是OpenCV里的SIFT不太稳定,很多图片在提取过程中会出现莫名其妙的错误。SURT的话特征点会比较多但是质量不怎么好,但是OpenCV的SURF非常稳定。

2. 关于稀疏点云SFM得到密集点云CMVS。

     可以查阅相关论文,关于“面片”的部分。(我没有往下接着琢磨……)

3. 使用我的方法实现的SFM,如果想要有较快的速度,建议使用OpenCV的GPU模块。

4. 大致的实现流程如下:

祝大家好运。

地形数据测量是许多地貌研究应用程序的基本方面,尤其是那些包括地形监测和地形变化研究的应用程序。然而,大多数测量技术需要相对昂贵的技术或专门的用户监督。 MotionSfM)摄影测量技术的结构通过允许使用消费级数码相机和高度自动化的数据处理(可以免费使用)减少了这两个限制。因此,SfM摄影测量法提供了快速,自动化和低成本获取3D数据的可能性,这不可避免地引起了地貌界的极大兴趣。在此贡献中,介绍了SfM摄影测量的基本概念,同时也承认了其传统。举几个例子来说明SfM在地貌研究中的应用潜力。特别是,SfM摄影测量为地貌学家提供了一种工具,用于在一定范围内对3-D形式进行高分辨率表征,并用于变化检测。 SfM数据处理的高度自动化既创造了机遇,也带来了威胁,特别是因为用户控制倾向于将重点放在最终产品的可视化上,而不是固有的数据质量上。因此,这项贡献旨在指导潜在的新用户成功地将SfM应用于一系列地貌研究。 关键词:运动结构,近距离摄影测量,智能手机技术,测量系统,表面形态echnology reduces both these constraints by allowing the use of consumer grade digital cameras and highly automated data processing, which can be free to use. SfM photogrammetry therefore offers the possibility of fast, automated and low-cost acquisition of 3-D data, which has inevitably created great interest amongst the geomorphological community. In this contribution, the basic concepts of SfM photogrammetry are presented, whilst recognising its heritage. A few examples are employed to illustrate the potential of SfM applications for geomorphological research. In particular, SfM photogrammetry offers to geomorphologists a tool for high-resolution characterisation of 3-D forms at a range of scales and for change detection purposes. The high level of automation of SfM data processing creates both opportunities and threats, particularly because user control tends to focus upon visualisation of the final product rather than upon inherent data quality. Accordingly, this contribution seeks to guide potential new users in successfully applying SfM for a range of geomorphic studies.
考资源链接:[三维重建技术综述:SFM方法与挑战](https://wenku.csdn.net/doc/1gaz0zwoit?utm_source=wenku_answer2doc_content)计算机视觉领域,结构从运动(Structure-from-Motion, SfM)技术是一种强大的三维重建方法,它通过分析一系列从不同视角拍摄的二维图像来推断出场景的三维结构。具体来说,SfM技术可以分为几个关键步骤,包括特征点匹配、相机姿态估计、三维点云的计算以及相机内外校准。 首先,特征点匹配是指从不同图像中识别并匹配相同的点,这通常是通过特征检测和描述子匹配算法完成的。在多视角图像中,相同的物理点在不同的视角下会映射到二维图像上的不同位置,通过这些对应关系,可以推断出这些点在三维空间中的位置。 接着,相机姿态估计是指通过一系列已匹配的特征点计算每个图像对应的相机位置和朝向。这一过程通常涉及到解决一个非线性优化问题,即最小化重投影误差,从而得到相机数的最优估计。 三维点云的计算是在相机姿态估计的基础上进行的。通过将不同视角下的二维点映射回三维空间,结合相机的内部和外部数,可以重建出三维点云模型。在这一过程中,使用相机模型来进行坐标转换至关重要。 相机模型描述了现实世界中的三维点如何被映射到二维图像上。最简单的相机模型是针孔相机模型,它假设光线通过一个理想的点(针孔)并投影到成像平面上。这个模型忽略了现实世界中的畸变,如镜头畸变等。为了提高三维重建的准确性,通常需要对相机进行内和外校准。 内校准涉及到确定相机的内部数,如焦距、主点坐标、畸变系数等,这些数描述了相机的成像特性。外校准则是为了确定相机相对于世界坐标系的位置和方向。通过内外的精确校准,可以将图像中的二维坐标转换为实际的三维空间坐标。 结合这些步骤,SfM技术能够有效地从多视角图像中恢复出三维结构,生成高精度的三维模型。由于其普适性和灵活性,SfM技术在多个领域得到了广泛的应用,如计算机图形学、机器人导航、遥感和虚拟现实等。对于希望进一步掌握SfM技术的读者,推荐阅读《三维重建技术综述:SFM方法与挑战》一书,它详细地介绍了SfM的基本概念、方法分类以及具体的实现步骤和挑战,是深入学习SfM技术不可或缺的考资料。 考资源链接:[三维重建技术综述:SFM方法与挑战](https://wenku.csdn.net/doc/1gaz0zwoit?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值