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

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

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

  3. 打开vmware主页,点击“创建新的虚拟机”
    在这里插入图片描述

  4. 选择“典型”
    在这里插入图片描述

  5. 浏览并选择已经下载好的Ubantu系统镜像
    在这里插入图片描述

  6. 输入一些个人与安装信息并确认
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  7. 完成后便可以打开虚拟机了
    在这里插入图片描述

  8. 启动虚拟机后,会出现以下界面,左侧选择我们想安装的语言,右边选择安装Ubuntu
    在这里插入图片描述

  9. 选择为图形或无线硬件,不要选择安装Ubuntu时下载更新,否则会先下载,速度很慢
    在这里插入图片描述

  10. 选择其他选项,这样就可以自己创建、调整分区
    在这里插入图片描述

  11. 然后选择创建新分区表,这时候会出现一个21474MB大小空闲的设备
    在这里插入图片描述

  12. 进行分区,分区之后如下图
    在这里插入图片描述

  13. 分区之后,在下面选择/boot分区,也就是选择/dev/sda6,这样就设置了安装启动引导其的设备,进行安装,或许有的小伙伴看不到下面的按钮,可以按这ALT然后鼠标拖动从窗口
    在这里插入图片描述

  14. 点击现在安装之后会弹出下面的窗口,点击继续即可
    在这里插入图片描述

  15. 之后会出现以下界面,选择时区Shanghai
    在这里插入图片描述

  16. 选择键盘布局,选择左侧的汉语,然后选择右侧的汉语
    在这里插入图片描述

  17. 接下来设置系统用户,和密码,密码为登陆系统的密码,要牢记
    在这里插入图片描述

  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信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  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的点云
    在这里插入图片描述

  3. 点击Align开始配准
    在这里插入图片描述

  4. 在右边的tool栏中选择基准点云,并点击Glue Here Mesh,选择好之后点云名字前面会出现一个星号。
    在这里插入图片描述

  5. 然后选择另一块点云,点击Point Based Glueing,这时弹出一个窗口,在两块点云上手动选择匹配点,至少选4对点之后点OK确认。双击鼠标左键进行选择,按住Ctrl双击左键消除选择。
    在这里插入图片描述
    在这里插入图片描述

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

  7. 点击Process之后软件开始自动计算,然后按照上述步骤再次合并第3幅点云
    在这里插入图片描述

  8. 对任意一个点云图层右键并点击Flatten Visible Layers,选择1,3,4并apply
    在这里插入图片描述
    在这里插入图片描述

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

  10. 对2-1,2-2,2-3也采取上述操作进行合并,以下是合并的点云图片
    在这里插入图片描述

  11. 再对上面两幅合并的点云进行合并操作
    在这里插入图片描述

任意两点的距离量测

  1. 采用measure工具量取标准距离,两个黄色标识之间的实际距离为10cm,测量距离为0.412087
    在这里插入图片描述
    在这里插入图片描述

  2. 桃子的位移测量距离为0.916609,算的实际距离为10*0.916609/0.412087=22.24cm
    在这里插入图片描述

  3. 实际桃子的位移距离约为22~23cm,这此方法对于位移测量是值得参考的
    在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值