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

Author: chad
Mail: linczone@163.com

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

开始之前先看一张概念图,了解下SfM算法是干嘛的,如下:

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

我们当时的硬件方案是这么设想的:

由于我们当时非常关注3D重建精度,所以,当时简单推算了下精度关系大致如下:
1.扫描精度与照片分辨率,拍摄距离,对焦准确性,灯光系统有较大关系。
2.运算时间与照片数量成 n!/(n-m)!级数增长。
3.精度关系如下:

4.经过算法处理后的,由于计算误差,2D->3D转换误差,导致实际精度会远低于0.08。

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

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

算法模拟测试情况如下:
我的电脑情况如下:

实验过程如下:
1、大尺度图片测试:共140张照片,运算时间4个小时,产生的中间文件600M。


2.小尺度图片测试:65张图片,运算时间30分钟,中间文件350M。

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

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

原理简要介绍下

先看图:

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

最后,关于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/,算法测试程序下载点这里

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

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

  1. 从内外参到 Structure From Motion(SFM)

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

  2. Structure From Motion(SFM)入门讲解

    概念: Structure From Motion(SFM) 是从一系列包含视觉运动信息的多幅二维图像序列中估计三维结构的技术. SFM和立体视觉的区别 在立体视觉中,两个相机之间的相对位姿是通过标定 ...

  3. SfM: Structure from motion

    SfM Structure from motion (SfM) is the process of estimating the 3-D structure of a scene from a set ...

  4. vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)

    忘了附上项目下载地址: https://github.com/PacktPublishing/Mastering-OpenCV-4-Third-Edition https://github.com/P ...

  5. 单目三维运动重建(sfm算法)

    算法介绍 单目相机三维重建可以使用运动重建Structure from motion(SfM)方法,即由图像生成三维点云以及相机姿态.SfM方法的主要流程如图所示1,第一步,使用同一相机的从不同位置和 ...

  6. NIMA 算法测试图片清晰度

    NIMA 算法测试图片清晰度 简介 该算法从两个不同的维度进行判断.首先是判断照片的质量等. 美观等主观方面,该算法也可以用来判断拍照水平.摄影爱好者可以用来提高自己的摄影水平. 如何检测图片 NIM ...

  7. 【SLAM】SfM论文推荐(ICCV,CVPR,ECCV等)Structure from Motion

    文章目录 SfM 相关文献 增量式SfM: 全局式SfM: 混合式SfM: SfM 相关文献 增量式SfM: N. Snavely, et al. Modeling the World from In ...

  8. SFM(structure from motion 从运动恢复结构)和MVS(multi-view stereo 多视图立体视觉)

    主要目的: SFM是可以重建稀疏点云的和相机参数(内外), 主要目的是:estimating the geometry of the scene and camera poses from a set ...

  9. 2020年ECCV论文DeepSFM: Structure From Motion Via Deep Bundle Adjustment阅读笔记

      这篇博客分享的是2020年发表于ECCV上的一篇论文<DeepSFM: Structure From Motion Via Deep Bundle Adjustment>. 论文地址: ...

  10. 腾讯优图提出LAP无监督多视角人脸3D重建算法,高清还原面部细节

    编辑丨腾讯优图AI开放平台 近日,腾讯优图实验室提出无监督多视角人脸3D重建算法LAP(Learning to Aggregate and Personalize),摆脱人脸3D训练样本真值依赖,高清 ...

最新文章

  1. Google Guice使用入门
  2. CTFshow 命令执行 web66
  3. 【期外】 (一)关于LSH :局部敏感哈希算法
  4. TypeError: Data must not be unicode
  5. c++中大矩阵乘法计算的效率问题
  6. 【转】Oracle当中扫描数据的方法
  7. 2d游戏动作软件支持c语言,C语言编写简单2D游戏
  8. Python如何安装模块
  9. Java 读取PDF中的表格
  10. 一些与一对一视频聊天软件开发有关的事,也许你该了解的
  11. 笔记本电脑摄像头频闪问题,打开摄像头出现错误代码0xA00F4244(0xC00D36D5)的问题解决方法
  12. Grafana——》重置默认的登录密码
  13. BZOJ5294 BJOI2018二进制(线段树)
  14. 自动动手打造绿色的Photoshop CS2
  15. stol函数在linux下使用,C++中进制转换问题
  16. NC65 查询信用余额——客户信用联查、销售订单信用联查等
  17. 超过100w条数据表的分页查询优化
  18. 软件测试分享15个适合练手的项目【金融/银行/商城/电商/医药......】
  19. Kafka Broker
  20. 机器人三大定律的发展和演进概述

热门文章

  1. WebService案例实例
  2. jmeter快速修改协议、服务器名称或IP、端口号的方法
  3. 皮尔逊相关系数(Pearson Correlation Coefficient)
  4. 基于STM32读取W25Q64(模拟SPI)
  5. SVN客户端——SmartSVN功能详解
  6. webpower携手穷游,解析大数据、营销智能化与用户的关系
  7. Java分布式开发中的RPC
  8. dtft变换的性质_dtft(dtft和dft的关系区别)
  9. Python实战:个人贷款计算器
  10. java8新特性-过滤