VisualSFM+MeshLab三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。

多目立体视觉重建关键步骤有以下两点:

从运动信息中恢复场景结构 (Structure from motion, SFM)和多视角立体(Multi-viewstereo, MVS)

大致步骤分为如下:

特征提取与匹配->稀疏重建->稠密重建->表面重建

本文使用VisualSFM+MeshLab工具来过一遍上述流程。

参考来自:http://www.guudo.cn/tech/view/id/7129

操作系统:亲测win10 win8可用(ubuntu的弄好后再更新)

软件版本:ViusalSFM V0.5.26 http://ccwu.me/vsfm/

CMVS+genOption+PMVS2http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html

MeshLab 1.3.3 x64(这里注意,如果重建场景比较大的话,32位软件会提示使用64位版本)

-1、环境准备

上述内容以打包上传:http://download.csdn.net/detail/u012750702/9694352

首先下载解压完成后,将 ..\VisualSFM\CMVS-PMVS-master\binariesWin-Linux\Win64-VS2010 文件夹下的内容,如图:

复制到 ..\VisualSFM\VisualSFM_windows_64bit\VisualSFM_windows_64bit 文件夹下:

因为VisualSFM在进行稠密的时候会调用pmvs和cmvs的部分,否则运行会报错。

0、图片导入

双击 .exe运行:

其中按钮0用来显示日志界面(即上图右侧那个界面),可以查看运行进度,如果运行时找不到在哪里显示了点击此按钮唤出。

按钮1导入图片或者运行文件,可以一次选择多张图片:

这里注意,运行过程中会在与图片相同目录下生成中间文件(建议图片文件夹先做备份),如图:

其中包括sift求解结果和match的结果。

提示:导入的图片文件不全在同一文件夹下也可以,之后生成的中间文件会跟对应的各自图片文件在一起。

导入并加载结束时会输出:Loading image pixel data …done in XXXs

注意:导入过程中如果出现donein 0s的情况是电脑内存不足造成的,也就是数据量太大了。

所有照片加载无误后:

可进行下一步,

有时候个别照片的缩略图会不显示,不要紧。

一、征提取与匹配

 这一步旨在寻找多个视角下同一空间点之间的位置关系,使用描述子提取图片中的特征点后,在其余图像中进行特征点匹配,匹配过程中还需确定特征的尺度、方向等特性。通俗来讲就是找到不同二维图片中拍摄到的同一个三维点。

VisualSFM用的是changchang wu写的siftGPU算法,提取每幅图像中的特征点,并利用GPU加速计算。

点击按钮2,开始进行sift和match步骤。

运行过程会占满cpu。

Log界面可查看进度,此步骤需要等待一段时间。

二、稀疏重建

 利用上一步特征提取和匹配后的结果,求解每张图对应相机的相机姿态和稀疏的三维点,这里稀疏的三维点来自于上一步匹配后的特征点。

点击按钮3,开始稀疏重建,稀疏重建结束后界面会变成这样,可以看到相机位置及对应图像已经被求解出来了。

三、稠密重建

稠密重建使用了CMVS/PMVS算法,其中CMVS对图像序列进行聚类,PMVS利用稀疏重建结果将其向空间周围扩散得到有向点云,同时利用局部光度一致性和全局可见性约束完成稠密重建过程。

点击按钮4进行稠密重建,这个时候需要选择存盘文件名和保存目录,选择目录../gardenData,文件为res。

稠密重建结束后,到刚刚选定的目录下,会有res.0.ply和res.nvm文件和res.nvm.cmvs文件夹:

其中,res.nvm.cmvs\00(这里有可能不是00而是其他数字)文件夹下的centers-0000.ply等文件保存着重建后相机坐标文件,res.nvm.cmvs\00\models文件夹下保存着option-0000.ply文件,也就是稠密点云。当场景比较大的时候会保存不止一个文件,centers文件与option文件的编号是对应的

此步骤也会占满CPU运行。

在日志界面可以看到进度,option文件会逐一生成,剩余时间可通过centers文件个数估计。


四、表面重建

表面重建用的是MeshLab提供的泊松表面重建(poisson surface reconstruction)算法。

关闭VisualSFM打开MeshLab,大致过程如下,点击按钮1打开工程文件:

此文件在上一步保存目录的00文件夹下,bundle.rd.out,没找到的话记得修改一下显示文件的拓展名:

之后会又弹出一个窗口选择同一目录下的list.txt文件:

导入图片和系数点云时会耗费一些时间,软件可能处于卡死状态,不要强制关闭。结束后点击按钮2,界面右侧会出现文件列表,如图:

点击“眼睛”图标可操作本模型是否显示,图标前的小三角可查看模型顶点/面片个数。

下一步选择菜单栏->File->Import Mesh:

导入稠密点云文件,文件在../gardenData/res.nvm.cmvs/00/models路径下:

接下来合并点云(若只有一个文件可跳过此步),在随便某个点云文件上右键->Flatten Visible Layers->修改选项->Apply:

选项如图:

Apply后会多出一个名为Merged Mesh的文件(注意,此文件未存盘,如果要保存的话需要进行导出操作),看一下顶点个数,若为0则可能是上一步设置有问题:

若想查看合并后的结果需要关闭其余文件的显示(点击“眼睛”图标),并修改Merged Mesh文件的显示方式(默认Flat改成Points):

    提示:

   重建的过程中是会有新文件产生的,如果对效果不满意,可以重复进行某些步骤,这样做不会覆盖产生的文件,直至结果满意为止,选择export导出文件,将结果存盘。

如果过程中出现某些失误影响到了,只要不导出存盘就不会影响打开的原始点云数据。

如果像我这样重建场景很大的话中间需要耐心等待(程序可能会显示未响应),MeshLab跑的时候不会满CPU的跑(VisualSFM会),我的CPU占用率一直在20%多(仅供参考)。

接下来:

1、

选中Merged Mesh文件,菜单栏中Filters-> Point Set-> Surface Reconstruction: Poisson,八叉树深度控制着细节精细程度,可根据需要自行调整。

2、

完成后会形成一个“气泡”将模型包起来(也有可能没有,只是延展出几片面):

这时不用怀疑哪里出问题了,滚动鼠标滚轮,视角钻进气泡里,可以看到模型好好的在里面:

如果没有形成多余的面,检查一下进行此步骤时选中的文件是否正确。



3、

然后,Filters -> Selection-> Select faces withedges longer than删除多余的面,这个时候记得把preview/预览打开,同时其余文件取消显示,红色的面片就是选中需要删除的:

调整门限到自己认为合适的地方,软件会根据模型给出个默认门限,调整乱了后可以点击Default回到默认值。

apply选中相应面片后,点击工具栏中的删除面片的图标将选中的面删除:

  4、

修复流型边缘,Filters->Selection-> Select Non-Manifold edges,同上,选中然后删除。

  5

参数化和纹理投影,菜单栏->Filter->Texture-> Parameterization + texturing from registered rasters,

要设置贴图大小,一般是2的幂次:1024\2048等等:

我重建的场景比较大,这一步耗费了很长时间,程序会处于未响应状态,并且进度条没有提示。

  当看见模型显示出颜色后,即可:

 6

完成后记得将结果存盘,菜单栏->File->Export Mesh 。

最终成果:

小结:

Filter–> Point Set–> Surface Reconstruction: Poisson

Filters–> Selection–> Select faces with edges longer than  (delete)

Filters–> Selection–> Select Non-Manifold edges  (delete)

Filter-> Texture-> Parameterization + texturing fromregistered rasters(8192)

VisualSFM+MeshLab 三维重建全过程记录相关推荐

  1. Visualsfm与meshlab三维重建

    Visualsfm与meshlab三维重建 目前使用最方便且广泛的三维重建是利用免费软件visualsfm和meshlab对物体进行三维重建.Visualsfm是基于SIFT提取特征点的匹配软件,能够 ...

  2. linux 配置tensorflow 全过程记录

    linux 配置tensorflow 全过程记录 前几天刚下一个deepin系统,是基于linux 内核的,界面的设计有些mac的feel 感觉还是挺不错的,之后就赶紧配置了一下tensorflow ...

  3. Python Apex YOLO V7 main 目标检测 全过程记录

    博文目录 文章目录 环境准备 YOLO V7 main 分支 TensorRT 环境 工程源码 假人权重文件 toolkit.py 测试.实时检测.py grab.for.apex.py label. ...

  4. java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录

    这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧. 前言 最近在做 ...

  5. ROS-Melodic 编译Moveit全过程记录和错误解决方案

    ROS-Melodic 编译Moveit全过程记录和错误解决方案 在Ros Melodic版本下,直接运行sudo apt-get install ros-melodic-moveit会出现以下错误: ...

  6. Cris 玩转 Linux 之 Deepin 迁移全过程记录

    Cris 玩转 Linux 之 Deepin 迁移全过程记录 Author:Cris 文章目录 Cris 玩转 Linux 之 Deepin 迁移全过程记录 Author:Cris 0. 序 1. 磨 ...

  7. 网站更新部署20110210,新站部署全过程记录

    网站更新部署20110210,新站部署全过程记录 sudo adduser <用户名> 按提示输入 更改初始root账户密码 ubuntu修改初始root密码 2007-01-24 20: ...

  8. psd文件生产html,PSD文件切图制作html全过程记录

    PSD文件切图制作html全过程记录 最后效果图: 新建文件夹 开始时,在您的计算机中创建一个文件夹.我把它命名为zmool.再在文件夹中创建新文件夹images,放网站的所有图像.接下来打开代码编辑 ...

  9. 从零开始实现C++ TinyWebServer 全过程记录

    文章目录 前言 从零开始实现C++ TinyWebServer 全过程记录 1. 全流程博客链接

最新文章

  1. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能
  2. 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)
  3. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)
  4. android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关
  5. 吴恩达 coursera ML 第十七课总结+作业答案
  6. 解决 connect to host github.com port 22 operation timed out
  7. JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
  8. Silverlight中摄像头的运用—part2
  9. 【大开眼界】Python爬虫骚操作
  10. 畅通工程(最小生成树模板)
  11. P1955 [NOI2015]程序自动分析
  12. 《迅雷链精品课》第十二课:PoW 共识算法
  13. java毕业设计成品基于JSP实现的飞机票售票管理系统[包运行成功]
  14. Unity-Unity编辑器Part5
  15. python 微信自动回复_python微信机器人自动回复
  16. vspy如何在图形面板显示报文_GUI 图形用户界面 [学习笔记]
  17. 采用DotAsterisk(点星PBX)系统组建跨地区总公司和分公司之间的免费VoIP电话呼叫
  18. 利用Grafana为你的Loki添加告警
  19. 百度网盘安装在c盘显示系统权限限制的解决方法
  20. 为什么说 HashMap 是无序的

热门文章

  1. git command
  2. 微信小程序如何使用阿里巴巴字体图标iconfont?
  3. Python命名方式转换——帕斯卡、驼峰法、下划线
  4. 11-液晶显示器主要看什么参数?电脑显示器各项参数的含义科普大全
  5. ‘大案牍术’告诉你为什么《长安十二时辰》这么火!
  6. 我接触过的广东美食——流口水
  7. 日期转换(正推与倒推)
  8. 查看Git本地安装位置
  9. MemoryAnalyze分析weblogic的phd文件
  10. Windows蓝屏代码含义速查