VisualSFM+MeshLab 三维重建全过程记录
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 三维重建全过程记录相关推荐
- Visualsfm与meshlab三维重建
Visualsfm与meshlab三维重建 目前使用最方便且广泛的三维重建是利用免费软件visualsfm和meshlab对物体进行三维重建.Visualsfm是基于SIFT提取特征点的匹配软件,能够 ...
- linux 配置tensorflow 全过程记录
linux 配置tensorflow 全过程记录 前几天刚下一个deepin系统,是基于linux 内核的,界面的设计有些mac的feel 感觉还是挺不错的,之后就赶紧配置了一下tensorflow ...
- Python Apex YOLO V7 main 目标检测 全过程记录
博文目录 文章目录 环境准备 YOLO V7 main 分支 TensorRT 环境 工程源码 假人权重文件 toolkit.py 测试.实时检测.py grab.for.apex.py label. ...
- java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录
这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧. 前言 最近在做 ...
- ROS-Melodic 编译Moveit全过程记录和错误解决方案
ROS-Melodic 编译Moveit全过程记录和错误解决方案 在Ros Melodic版本下,直接运行sudo apt-get install ros-melodic-moveit会出现以下错误: ...
- Cris 玩转 Linux 之 Deepin 迁移全过程记录
Cris 玩转 Linux 之 Deepin 迁移全过程记录 Author:Cris 文章目录 Cris 玩转 Linux 之 Deepin 迁移全过程记录 Author:Cris 0. 序 1. 磨 ...
- 网站更新部署20110210,新站部署全过程记录
网站更新部署20110210,新站部署全过程记录 sudo adduser <用户名> 按提示输入 更改初始root账户密码 ubuntu修改初始root密码 2007-01-24 20: ...
- psd文件生产html,PSD文件切图制作html全过程记录
PSD文件切图制作html全过程记录 最后效果图: 新建文件夹 开始时,在您的计算机中创建一个文件夹.我把它命名为zmool.再在文件夹中创建新文件夹images,放网站的所有图像.接下来打开代码编辑 ...
- 从零开始实现C++ TinyWebServer 全过程记录
文章目录 前言 从零开始实现C++ TinyWebServer 全过程记录 1. 全流程博客链接
最新文章
- mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能
- 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)
- 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)
- android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关
- 吴恩达 coursera ML 第十七课总结+作业答案
- 解决 connect to host github.com port 22 operation timed out
- JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
- Silverlight中摄像头的运用—part2
- 【大开眼界】Python爬虫骚操作
- 畅通工程(最小生成树模板)
- P1955 [NOI2015]程序自动分析
- 《迅雷链精品课》第十二课:PoW 共识算法
- java毕业设计成品基于JSP实现的飞机票售票管理系统[包运行成功]
- Unity-Unity编辑器Part5
- python 微信自动回复_python微信机器人自动回复
- vspy如何在图形面板显示报文_GUI 图形用户界面 [学习笔记]
- 采用DotAsterisk(点星PBX)系统组建跨地区总公司和分公司之间的免费VoIP电话呼叫
- 利用Grafana为你的Loki添加告警
- 百度网盘安装在c盘显示系统权限限制的解决方法
- 为什么说 HashMap 是无序的