【原创】Structure from Motion (SfM)算法测试---3D重建简介

【原创】Structure from Motion (SfM)算法测试—3D重建简介

Author: chad
Mail: [email protected]

今天整理资料,突然发现之前公司调研摄像头3D扫描方案时做的一个实验小实验,同时联想到前段时间尼泊尔地震百度搞的一个尼泊尔古迹3D重现项目,突然想整理一下,简要说下工作原理。

开始之前先看一张概念图,了解下SfM算法是干嘛的,如下:
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第1张图片

如上图所示,SfM算法的目标就是通过一堆照片重建3D模型。

我们当时的硬件方案是这么设想的:
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第2张图片

由于我们当时非常关注3D重建精度,所以,当时简单推算了下精度关系大致如下:
1.扫描精度与照片分辨率,拍摄距离,对焦准确性,灯光系统有较大关系。
2.运算时间与照片数量成 n!/(n-m)!级数增长。
3.精度关系如下:
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第3张图片
4.经过算法处理后的,由于计算误差,2D->3D转换误差,导致实际精度会远低于0.08。

基于激光的主动扫描方式,需要将激光在物体表面扫描一遍,所以扫描速度比较慢(结构光光栅投影测量技术速度较快),但是后期计算处理速度较快。

基于图像的三维重建作为当今热门的虚拟现实和科学可视化的基础,它被广泛应用于检测和观察中。一个完整的三维重建系统通常需要包含图像获取、摄像机标定、特征点提取、立体匹配、深度确定和后处理等6 大部分。相较于结构光光栅投影测量,该方法在相机标定、特征点提取方面有2指数级运算量,整个过程非常缓慢。
一般来讲,大尺度特征含有较丰富的信息,本身数目较少,易于得到快速匹配,但对它们的提取与描述相对复杂,定位精度也差;而小尺度特征本身的定位精度高,表达描述简单,但数目较多,所含信息量却较少,因而在匹配时需要采用较强的约束准则和匹配策略。

算法模拟测试情况如下:
我的电脑情况如下:
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第4张图片
实验过程如下:
1、大尺度图片测试:共140张照片,运算时间4个小时,产生的中间文件600M。
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第5张图片
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第6张图片
2.小尺度图片测试:65张图片,运算时间30分钟,中间文件350M。
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第7张图片

【原创】Structure from Motion (SfM)算法测试---3D重建简介_第8张图片

;D 上面说的65张照片都是我用某米手机直接拍的。纯手工拍摄,所以能生成这样的效果已经非常不错了。

通过上面的实验可以发现,3D建模会自动剔除不变部分,比如底座。

原理简要介绍下

先看图:
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第9张图片

也就是首先找特征点,然后根据特征点找照片的运动方向,拍摄方向。这个算法牛的地方就是你随便拍摄一组照片,算法能够自动检测到运动方向与拍照角度,自动照片排序。

最后,关于SfM算法的介绍再推荐一个链接,对于了解下SfM算法很有帮助:
《第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV》 —这个写的非常好,看懂你就入门了。

再附一个澳大利亚团队搞的很牛的3D扫描介绍:

http://www.mopintu.com/article-1235-1.html

20160401 附记:

近日有同学向我请教关于SfM算法的问题,我这里再推荐几个网站,本博客中SfM算法程序来源于http://ccwu.me/vsfm/,算法测试程序下载点这里
【原创】Structure from Motion (SfM)算法测试---3D重建简介_第10张图片

其他推荐网站如下:
http://users.ics.forth.gr/~lourakis/sparseLM/index.html#download
https://code.google.com/archive/p/libmv/downloads

你可能感兴趣的:(sfm算法,3D重建,图像处理)