码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 三维重建_使用OpenMVG/OpenMVS重建场景


    目录

    1. 安装环境

    1.1 安装OpenMVS

    1.2 安装OpenMVG

    2. 测试

    2.1 下载数据

    2.2 进行三维重建

    2.2.1 OpenMVG提取稀疏点云

    2.2.2 OpenMVS稠密化点云/网格化/纹理贴图

    3. 运行遇到问题记录

    4. 参考


    1. 安装环境

    本地环境: Ubuntu20.04 没有cuda

    1.1 安装OpenMVS

      安装指南(官网):https://github.com/cdcseacave/openMVS#build

    安装eigen3.4

    1. git clone https://gitlab.com/libeigen/eigen.git --branch 3.4
    2. cd eigen
    3. mkdir build
    4. cd build
    5. cmake .. #make #eigen只有头文件,不用编译
    6. sudo make install #安装(即复制)到/usr/include/eigen3目录下

    安装vcg:

    1. git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git #vcg只有头文件,不用编译
    2. # 但要修改一处代码: HETYPE ht=*this; ==》 MTTYPE ht=*this;

    遇到一处编译错误,更改代码即可:HETYPE ht=*this; ==》 MTTYPE ht=*this;

    安装glfw3 (可选)

    sudo apt‐get install freeglut3‐dev libglew‐dev libglfw3‐dev

    下载、编译openMVS

    1. git clone https://github.com/cdcseacave/openMVS
    2. mkdir openMVS_build
    3. cd openMVS_build
    4. #Cmake 配置下
    5. cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT=../vcglib/
    6. #make编译下:
    7. make -j4

    1.2 安装OpenMVG

    安装指南(官网): https://github.com/openMVG/openMVG/blob/develop/BUILD.md#linux

    1. #下载依赖项
    2. $ sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev
    3. #If you want see the view graph svg logs, install Graphviz.
    4. $ sudo apt-get install graphviz
    5. #Checkout OpenMVG.
    6. $ git clone --recursive https://github.com/openMVG/openMVG.git
    7. $ mkdir openMVG_Build && cd openMVG_Build
    8. #Configure and build
    9. $ cmake -DCMAKE_BUILD_TYPE=RELEASE ../openMVG/src/
    10. $ cmake --build . --target install
    • 遇到问题1:cannot import name 'soft_unicode' from 'markupsafe'

    • ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/anaconda3/lib/python3.9/site-packages/markupsafe/__init__.py)

      • 解决方法: python -m pip install markupsafe==2.0.1 # https://blog.csdn.net/weixin_45438997/article/details/124261720

    • 遇到问题2:libQt5Core.so undefined reference to `std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13

    • 原因及解决方法:libstdc++.so.6.0.28 的 strings 中 没有CXXABI_1.3.13

    • 复制一个libstdc++.so.6.0.29 到对应的目录即可, (该方法可能会导致系统不稳定无法正常启动)

    • 参考: https://blog.csdn.net/weixin_39643007/article/details/120533472

    其他解决方法: TODO

    OpenMVG安装目录:

    /usr/local/include/openMVG/...

    /usr/local/include/openMVG_dependencies/nonFree/sift/. ...

    /usr/local/lib/libopenMVG_features.a ...

    /usr/local/lib/openMVG/webgl ...

    /usr/local/bin/openMVG_main_SfM ...

    2. 测试

    2.1 下载数据

    数据地址:https://github.com/openMVG/ImageDataset_SceauxCastle

    下载的文本包含 images文件夹 和 Readme.txt文件

    2.2 进行三维重建

    整体流程梳理如下:

    2.2.1 OpenMVG提取稀疏点云

    1. cd path-to/ImageDataset_SceauxCastle-master
    2. mkdir output/matches -p #递归建立文件夹
    3. #生成 sfm_data.json 文件列表文件
    4. openMVG_main_SfMInit_ImageListing -i ./images -o output/matches -f 3399
    5. # “-f 3399” : 第一个命令-f 后面跟的是拍摄照片时的焦距与照片长边像素个数的乘积
    6. # 这里 2832 * 1.2 =3398.4 ≈ 3399
    7. #计算图像特征点和描述子 生成这样100_7100.desc 100_7100.feat 的文件
    8. openMVG_main_ComputeFeatures -i output/matches/sfm_data.json -o output/matches/
    9. #计算匹配关系
    10. openMVG_main_ComputeMatches -i output/matches/sfm_data.json -o output/matches/matches.txt
    11. #生成稀疏点云
    12. openMVG_main_SfM -i output/matches/sfm_data.json -o output/matches/ --match_file output/matches/matches.txt
    13. #提取矫正后的图像(可选)
    14. openMVG_main_ExportUndistortedImages -i output/matches/sfm_data.json -o output/matches/image
    15. #转换成mvs的格式,同时在当前目录下生成undistorted_images文件夹并存储了矫正后的图像
    16. openMVG_main_openMVG2openMVS -i output/matches/sfm_data.bin -o output/scene.mvs

    重建的稀疏点云结果:

    2.2.2 OpenMVS稠密化点云/网格化/纹理贴图

    1. ######使用OpenMVS (mkdir openMVS_build 然后编译) ########
    2. # 1 切换到OpenMVS目录
    3. cd path-to/openMVS_build/bin
    4. # 2 将 undistorted_images 复制到 openMVS_build 目录下
    5. cp path-to/ImageDataset_SceauxCastle-master/undistorted_images ../ -r
    6. # 3 稠密化稀疏点云scene.mvs,生成scene_dense.mvs
    7. ./DensifyPointCloud path-to/ImageDataset_SceauxCastle-master/output/scene.mvs
    8. # 4 使用稠密点云scene_dense.mvs,网格重建,生成scene_dense_mesh.mvs
    9. ./ReconstructMesh path-to/ImageDataset_SceauxCastle-master/output/scene_dense.mvs
    10. # 5 网格优化,生成scene_dense_mesh_refine.mvs
    11. ./RefineMesh path-to/ImageDataset_SceauxCastle-master/output/scene_dense_mesh.mvs
    12. # 6 纹理贴图
    13. ./TextureMesh path-to/ImageDataset_SceauxCastle-master/output/scene_dense_mesh_refine.mvs
    14. # 7 显示结果
    15. ./Viewer path-to-/ImageDataset_SceauxCastle-master/output/scene_dense_mesh_refine_texture.mvs

    三维重建效果:

    3. 运行遇到问题记录

    问题1:DepthMap.cpp:730 ASSERT(ISEQUAL(norm(normalMap0(nx)), 1.f))

    执行: ./DensifyPointCloud path-to/ImageDataset_SceauxCastle-master/output/scene.mvs 报错: DensifyPointCloud: /home/path-to/openMVS/libs/MVS/DepthMap.cpp:730: void MVS::DepthEstimator::ProcessPixel(SEACAVE::IDX): Assertion `ISEQUAL(norm(normalMap0(nx)), 1.f)' failed. 已放弃 (核心已转储)

    解决方法: 注销掉,重新编译openMVS

    // ASSERT(ISEQUAL(norm(normalMap0(nx)), 1.f)); //JOHN_delete

    4. 参考

    • UBUNTU16.04+OPENMVG+OPENMVS(三):实现自己数据的三维重建

    • Ubuntu 安装并使用OpenMVG和OpenMVS(保姆级教程)_哇哈哈347的博客-CSDN博客

    • 使用 OpenMVG+PMVS实现视觉三维重建_wx5d23599e462fa的技术博客_51CTO博客

    • ubuntu学习技巧4: qt多版本更换以及更新更高版本的qt_如何更新qt版本代码-CSDN博客

    • https://github.com/openMVG/openMVG/issues/1973

    • ubuntu安装meshlab,很简单_R-G-B的博客-CSDN博客

  • 相关阅读:
    AquilaChat2-34B 主观评测接近GPT3.5水平,最新版本Base和Chat权重已开源!
    vs2019 c++20 规范 STL库中关于时间的模板 ratio<T,U> , duration<T,U> , time_point<T,U>等
    ShardingSphere-proxy-5.0.0部署之分表实现(一)
    谈谈医疗行业数据治理的四个关键阶段【后附医院数据治理案例】
    【操作系统】实验CPU Scheduling--附讲解视频
    在 macOS 上的多个 PHP 版本之间切换
    vi文件保存退出命令":wq"和":x"的区别(经典深入剖析)
    队列与堆栈:原理、区别、算法效率和应用场景的探究
    【耳机维修】蓝牙耳机维修视频 维修蓝牙耳机
    UVA220 黑白棋 Othello
  • 原文地址:https://blog.csdn.net/shyjhyp11/article/details/133642937
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号