基于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虚拟机的安装

  1. 在官网下载vmware workstation windows最新版并安装

  2. 在官网下载Ubantu合适版本的ISO镜像,这里用的是16.04.3

  3. 打开vmware主页,点击“创建新的虚拟机”
    基于SFM的三维重建点云合并及位移测量_第1张图片

  4. 选择“典型”
    基于SFM的三维重建点云合并及位移测量_第2张图片

  5. 浏览并选择已经下载好的Ubantu系统镜像
    基于SFM的三维重建点云合并及位移测量_第3张图片

  6. 输入一些个人与安装信息并确认
    基于SFM的三维重建点云合并及位移测量_第4张图片基于SFM的三维重建点云合并及位移测量_第5张图片基于SFM的三维重建点云合并及位移测量_第6张图片

  7. 完成后便可以打开虚拟机了
    基于SFM的三维重建点云合并及位移测量_第7张图片

  8. 启动虚拟机后,会出现以下界面,左侧选择我们想安装的语言,右边选择安装Ubuntu
    基于SFM的三维重建点云合并及位移测量_第8张图片

  9. 选择为图形或无线硬件,不要选择安装Ubuntu时下载更新,否则会先下载,速度很慢
    基于SFM的三维重建点云合并及位移测量_第9张图片

  10. 选择其他选项,这样就可以自己创建、调整分区
    基于SFM的三维重建点云合并及位移测量_第10张图片

  11. 然后选择创建新分区表,这时候会出现一个21474MB大小空闲的设备
    基于SFM的三维重建点云合并及位移测量_第11张图片

  12. 进行分区,分区之后如下图
    基于SFM的三维重建点云合并及位移测量_第12张图片

  13. 分区之后,在下面选择/boot分区,也就是选择/dev/sda6,这样就设置了安装启动引导其的设备,进行安装,或许有的小伙伴看不到下面的按钮,可以按这ALT然后鼠标拖动从窗口
    基于SFM的三维重建点云合并及位移测量_第13张图片

  14. 点击现在安装之后会弹出下面的窗口,点击继续即可
    基于SFM的三维重建点云合并及位移测量_第14张图片

  15. 之后会出现以下界面,选择时区Shanghai
    基于SFM的三维重建点云合并及位移测量_第15张图片

  16. 选择键盘布局,选择左侧的汉语,然后选择右侧的汉语
    基于SFM的三维重建点云合并及位移测量_第16张图片

  17. 接下来设置系统用户,和密码,密码为登陆系统的密码,要牢记
    基于SFM的三维重建点云合并及位移测量_第17张图片

  18. 点击继续,就会进入到安装系统的界面了,只需等待
    基于SFM的三维重建点云合并及位移测量_第18张图片

SFM、CMVS-PMVS及其环境的安装

  1. 在Ubantu系统中按住CTRL+alt+T调出终端
  2. 在linux终端输入:
    git clone https://github.com/snavely/bundler_sfm.git
    git clone https://github.com/pmoulon/CMVS-PMVS.git
    若没有安装git,则按照终端的提示输入指令安装git
  3. 安装bundler相关依赖:sudo apt-get install liblapack-dev libblas-dev minpack-dev f2c gfortran jhead imagemagick
  4. 在 http://www.cs.ubc.ca/~lowe/keypoints/ 下载SIFT。(因为bundler需要SIFT进行特征提取)
  5. 安装SIFT依赖:sudo apt-get install libc6-dev-i386
  6. 安装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
  7. 进入Makefile文件所在的目录:cd /你自己的安装目录/bundler_sfm/
    编译 :make
  8. 将下载好的SIFT解压,进入文件夹中编译:make
  9. 将sift可执行文件拷贝到bundler_sfm下的bin目录下
  10. 将jhead文件拷贝到bundler_sfm下的bin目录下:sudo cp /usr/bin/jhead bin/
  11. 生成libANN_char.so:
    cd bundler_sfm -master
    make
  12. 将bundler_sfm/bin/目录下生成的libANN_char.so文件拷贝到系统库:sudo cp bin/libANN_char.so /usr/lib/
  13. 接下来对CMVS-PMVS进行编译,使用cd命令进入到CMVS-PMVS/program/下,然后依次执行以下命令:
    mkdir build && cd build
    cmake ..
    make
  14. 执行完成后,CMVS-PMVS也就编译完成了,生成的可执行文件位于build目录下的main目录中。将生成的可执行文件cmvs、genOption、pmvs2这三个文件拷贝到bundler_sfm目录的bin下。

相片拍摄调制与点云形成

  1. 位移前图像进行三个角度的多张图片拍摄,并将其称为1-1,1-2,1-3

  2. 利用“光影魔术手”软件将图片的分辨率改为640*480的同时保存EXIF信息
    基于SFM的三维重建点云合并及位移测量_第19张图片
    基于SFM的三维重建点云合并及位移测量_第20张图片
    基于SFM的三维重建点云合并及位移测量_第21张图片

  3. 位移后的图像也进行同样的拍照操作,并将其称为2-1,2-2,2-3

  4. 查看bin目录下extract_focal.pl配置文件中有没有自己所用相机的CCD宽度或CMOS宽度信息,若没有,在网上查找并写入进去,如:
    在这里插入图片描述

  5. 在虚拟机中bundler_sfm/example文件夹下新建peach_1文件夹,将图片集1-1复制到文件夹中

  6. 在终端中使用cd命令进入到peach_1文件夹下,然后执行以下命令../../RunBundler.sh

  7. 最终会生成很多的结果文件,其中bundler文件夹下的bundler.out中存储了重建的稀疏点3D坐标和相机参数。

  8. 接下来我们就可以利用PMVS进行稠密点云的重建了,在这之前需要将Bundler的输出转换为CMVS-PMVS的输入格式。利用bin下的Bundle2PMVS即可完成这一过程。
    ../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.out

  9. 此时会生成pmvs目录,在此目录下有prep_pmvs.sh文件,编辑此文件,将里边的BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。
    BUNDLER_BIN_PATH="/你自己的路径/bundler_sfm/bin

  10. 然后依次执行如下操作:
    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

  11. 对6个图片序列分别进行如上操作得到点云

点云文件的合并与保存

  1. 回到windows系统中,在官网上下载meshlab最新版并安装

  2. 运用meshlab打开1-1,1-2,1-3的点云
    基于SFM的三维重建点云合并及位移测量_第22张图片

  3. 点击Align开始配准
    基于SFM的三维重建点云合并及位移测量_第23张图片

  4. 在右边的tool栏中选择基准点云,并点击Glue Here Mesh,选择好之后点云名字前面会出现一个星号。
    基于SFM的三维重建点云合并及位移测量_第24张图片

  5. 然后选择另一块点云,点击Point Based Glueing,这时弹出一个窗口,在两块点云上手动选择匹配点,至少选4对点之后点OK确认。双击鼠标左键进行选择,按住Ctrl双击左键消除选择。
    基于SFM的三维重建点云合并及位移测量_第25张图片
    基于SFM的三维重建点云合并及位移测量_第26张图片

  6. 之后会发现,两块点云基本上重合在了一起,并且第二块点云名字前也出现了一个星号。初始配准之后,我们将进行ICP配准,注意Param ICP Default中的默认参数,根据需要进行修改。如果我们的两块点云大小相同,那么就要勾选Rigid matching选型。如果我们不勾选,那最终的变换矩阵中将会有一个缩放因子。
    基于SFM的三维重建点云合并及位移测量_第27张图片

  7. 点击Process之后软件开始自动计算,然后按照上述步骤再次合并第3幅点云
    基于SFM的三维重建点云合并及位移测量_第28张图片

  8. 对任意一个点云图层右键并点击Flatten Visible Layers,选择1,3,4并apply
    基于SFM的三维重建点云合并及位移测量_第29张图片
    基于SFM的三维重建点云合并及位移测量_第30张图片

  9. 按住ctrl+s保存合并的点云

  10. 对2-1,2-2,2-3也采取上述操作进行合并,以下是合并的点云图片
    基于SFM的三维重建点云合并及位移测量_第31张图片

  11. 再对上面两幅合并的点云进行合并操作
    基于SFM的三维重建点云合并及位移测量_第32张图片

任意两点的距离量测

  1. 采用measure工具量取标准距离,两个黄色标识之间的实际距离为10cm,测量距离为0.412087
    基于SFM的三维重建点云合并及位移测量_第33张图片
    基于SFM的三维重建点云合并及位移测量_第34张图片

  2. 桃子的位移测量距离为0.916609,算的实际距离为10*0.916609/0.412087=22.24cm
    基于SFM的三维重建点云合并及位移测量_第35张图片

  3. 实际桃子的位移距离约为22~23cm,这此方法对于位移测量是值得参考的
    基于SFM的三维重建点云合并及位移测量_第36张图片

你可能感兴趣的:(个人经验)