基于SFM的三维重建点云合并及位移测量
参考文档:
[1]https://blog.csdn.net/baoshuowl/article/details/80373591?biz_id=102&utm_term=vmware%20UBANTU&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-80373591&spm=1018.2118.3001.4187
[2] https://blog.csdn.net/abccc250110119/article/details/93471816
[3] https://www.cnblogs.com/21207-iHome/p/6034792.html
目录
- Ubantu虚拟机的安装
- SFM、CMVS-PMVS及其环境的安装
- 相片拍摄调制与点云形成
- 点云文件的合并与保存
- 任意两点的距离量测
Ubantu虚拟机的安装
在官网下载vmware workstation windows最新版并安装
在官网下载Ubantu合适版本的ISO镜像,这里用的是16.04.3
打开vmware主页,点击“创建新的虚拟机”
选择“典型”
浏览并选择已经下载好的Ubantu系统镜像
输入一些个人与安装信息并确认
完成后便可以打开虚拟机了
启动虚拟机后,会出现以下界面,左侧选择我们想安装的语言,右边选择安装Ubuntu
选择为图形或无线硬件,不要选择安装Ubuntu时下载更新,否则会先下载,速度很慢
选择其他选项,这样就可以自己创建、调整分区
然后选择创建新分区表,这时候会出现一个21474MB大小空闲的设备
进行分区,分区之后如下图
分区之后,在下面选择/boot分区,也就是选择/dev/sda6,这样就设置了安装启动引导其的设备,进行安装,或许有的小伙伴看不到下面的按钮,可以按这ALT然后鼠标拖动从窗口
点击现在安装之后会弹出下面的窗口,点击继续即可
之后会出现以下界面,选择时区Shanghai
选择键盘布局,选择左侧的汉语,然后选择右侧的汉语
接下来设置系统用户,和密码,密码为登陆系统的密码,要牢记
点击继续,就会进入到安装系统的界面了,只需等待
SFM、CMVS-PMVS及其环境的安装
- 在Ubantu系统中按住CTRL+alt+T调出终端
- 在linux终端输入:
git clone https://github.com/snavely/bundler_sfm.git
git clone https://github.com/pmoulon/CMVS-PMVS.git
若没有安装git,则按照终端的提示输入指令安装git - 安装bundler相关依赖:
sudo apt-get install liblapack-dev libblas-dev minpack-dev f2c gfortran jhead imagemagick
- 在 http://www.cs.ubc.ca/~lowe/keypoints/ 下载SIFT。(因为bundler需要SIFT进行特征提取)
- 安装SIFT依赖:
sudo apt-get install libc6-dev-i386
- 安装CMVS/PMVS依赖:
sudo apt-get install libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev
- 进入Makefile文件所在的目录:
cd /你自己的安装目录/bundler_sfm/
编译 :make
- 将下载好的SIFT解压,进入文件夹中编译:
make
- 将sift可执行文件拷贝到bundler_sfm下的bin目录下
- 将jhead文件拷贝到bundler_sfm下的bin目录下:
sudo cp /usr/bin/jhead bin/
- 生成libANN_char.so:
cd bundler_sfm -master
make
- 将bundler_sfm/bin/目录下生成的libANN_char.so文件拷贝到系统库:
sudo cp bin/libANN_char.so /usr/lib/
- 接下来对CMVS-PMVS进行编译,使用cd命令进入到CMVS-PMVS/program/下,然后依次执行以下命令:
mkdir build && cd build
cmake ..
make
- 执行完成后,CMVS-PMVS也就编译完成了,生成的可执行文件位于build目录下的main目录中。将生成的可执行文件cmvs、genOption、pmvs2这三个文件拷贝到bundler_sfm目录的bin下。
相片拍摄调制与点云形成
位移前图像进行三个角度的多张图片拍摄,并将其称为1-1,1-2,1-3
利用“光影魔术手”软件将图片的分辨率改为640*480的同时保存EXIF信息
位移后的图像也进行同样的拍照操作,并将其称为2-1,2-2,2-3
查看bin目录下extract_focal.pl配置文件中有没有自己所用相机的CCD宽度或CMOS宽度信息,若没有,在网上查找并写入进去,如:
在虚拟机中bundler_sfm/example文件夹下新建peach_1文件夹,将图片集1-1复制到文件夹中
在终端中使用cd命令进入到peach_1文件夹下,然后执行以下命令
../../RunBundler.sh
最终会生成很多的结果文件,其中bundler文件夹下的bundler.out中存储了重建的稀疏点3D坐标和相机参数。
接下来我们就可以利用PMVS进行稠密点云的重建了,在这之前需要将Bundler的输出转换为CMVS-PMVS的输入格式。利用bin下的Bundle2PMVS即可完成这一过程。
../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.out
此时会生成pmvs目录,在此目录下有prep_pmvs.sh文件,编辑此文件,将里边的BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。
BUNDLER_BIN_PATH="/你自己的路径/bundler_sfm/bin
然后依次执行如下操作:
sh pmvs/prep_pmvs.sh
(在这一步出现了报错“unexcepted operator”,可修改sh默认连接到bash:sudo dpkg-reconfigure dash
,解决报错)
../../bin/cmvs pmvs/
../../bin/genOption pmvs/
../../bin/pmvs2 pmvs/ option-0000
生成的最终结果位于pmvs目录的models 文件夹下,名称为option-0000.ply对6个图片序列分别进行如上操作得到点云
点云文件的合并与保存
回到windows系统中,在官网上下载meshlab最新版并安装
运用meshlab打开1-1,1-2,1-3的点云
点击Align开始配准
在右边的tool栏中选择基准点云,并点击Glue Here Mesh,选择好之后点云名字前面会出现一个星号。
然后选择另一块点云,点击Point Based Glueing,这时弹出一个窗口,在两块点云上手动选择匹配点,至少选4对点之后点OK确认。双击鼠标左键进行选择,按住Ctrl双击左键消除选择。
之后会发现,两块点云基本上重合在了一起,并且第二块点云名字前也出现了一个星号。初始配准之后,我们将进行ICP配准,注意Param ICP Default中的默认参数,根据需要进行修改。如果我们的两块点云大小相同,那么就要勾选Rigid matching选型。如果我们不勾选,那最终的变换矩阵中将会有一个缩放因子。
点击Process之后软件开始自动计算,然后按照上述步骤再次合并第3幅点云
对任意一个点云图层右键并点击Flatten Visible Layers,选择1,3,4并apply
按住ctrl+s保存合并的点云
对2-1,2-2,2-3也采取上述操作进行合并,以下是合并的点云图片
再对上面两幅合并的点云进行合并操作
任意两点的距离量测
采用measure工具量取标准距离,两个黄色标识之间的实际距离为10cm,测量距离为0.412087
桃子的位移测量距离为0.916609,算的实际距离为10*0.916609/0.412087=22.24cm
实际桃子的位移距离约为22~23cm,这此方法对于位移测量是值得参考的
基于SFM的三维重建点云合并及位移测量相关推荐
- matlab 光度 三维重构 code,基于matlab的三维点云数据三维重建
基于matlab的三维点云数据三维重建,通过快速构建三角网,实现三维模型的建立,并提供实例数据用于实验. 三维重建的英文术语名称是3D Reconstruction. 三维重建是指对三维物体建立适合计 ...
- 基于VisualSFM的三维重建(一)
第一章绪论 1.1.项目背景与目的 三维重建一直是计算机视觉的热点研究领域,是获取物体模型及三维场景的重要手段.人们获取物体三维信息的方法有很多种,比如传统的几何造型技术,此方法需要较好的专业水平和大 ...
- 基于图像的三维重建——基于空间patch扩散的方法(PMVS)
1.PMVS:多视图匹配经典算法简介 导语:常见的稠密重建方法主要有三种:基于体素的方法.基于深度图融合的方法以及基于3D patch扩张的方法.第一种基于体素的方法仅适用于小场景,单个物体,遮挡较少 ...
- 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置
基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...
- 视频+课件| PointDSC:基于特征匹配的点云配准方法(CVPR2021)
写在前面 感谢「3D视觉从入门到精通」知识星球嘉宾白旭阳博士为我们带来的主题为PointDSC:基于特征匹配的点云配准方法(CVPR2021)视频讲解,星球成员可免费观看学习.备注:白旭阳,香港科技大 ...
- 重磅直播 | PointDSC:基于特征匹配的点云配准方法(CVPR2021)
大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微信群内完成答疑. 本期由香港科技大学计算机系白旭阳博士分享,分享的主题为<基于特征匹配的鲁棒 ...
- 基于深度学习的点云配准Benchmark
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨千百度@知乎 来源丨https://zhuanlan.zhihu.com/p/289620126 ...
- 基于八叉树的区域增长点云分割算法
基于八叉树的区域增长点云分割算法 1. 提出问题 激光雷达探测到城市环境的物体表面构成三维几何点,相应的点云分割技术常用于建筑物重建.由于建筑物的复杂性,数据分割计算量很大,传统的点云分割方法需人工干 ...
- 基于MVS的三维重建算法学习笔记(二)— 立体视觉的几何基础总结
基于MVS的三维重建算法学习笔记(二)- 立体视觉的几何基础总结 声明 概述 1. 常见三维数据类型 2. 三维形状的几种表达形式 3. 三维空间刚体运动 4. 李群和李代数 5. 相机标定 6. 非 ...
最新文章
- 计算机组装cpu用哪种好,教你电脑处理器哪款好
- 《Javascript高级程序设计》读书笔记之对象创建
- 操作系统(二)操作系统的四个特征
- THANATOS数据库(自噬调节相关蛋白及其翻译后修饰信息数据库)使用指南
- ffmpeg个人翻译文档1-8转
- python中库是什么意思_python的库是什么意思
- 委内瑞拉通胀这么厉害,为什么有钱人不去圈地、买房?
- Mybatis 插入时获取主键的方式
- 向量除法能用计算机吗,为什么向量没有除法
- php选择排序从大到小,PHP选择排序
- Bash学习系列---第2/3部分
- failed building wheel for termcolor_【零基础学Python】For循环和RANGE()函数
- Rust : chrono库,DateTime、FixedOffset等
- beanshell断言_jmeter BeanShell断言(一)
- Meshlab快捷键与菜单功能翻译
- U盘数据恢复免费破解版哪里有?
- matlab编程999玫瑰花,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
- easyExcel合并单元格策略
- ASP模式的机械产品分布式协同设计的研究
- 《23种设计模式之原型模式(2种实现)》