基于OpenSfM的单目三维重建实现详细步骤

基于OpenSfM的单目三维重建实现详细步骤

任务描述:

三维重建作为物理环境感知的关键技术之一,其可用于智慧城市、虚拟旅游、数字遗产保护等诸多场景。随着自动驾驶的兴起,部分研究人员利用三维重建技术快速准确地还原一个真实的物理场景,并在其中构建了一系列的虚拟交通运行场景,期望通过数字孪生技术加速自动驾驶感知算法、决策规划、功能安全的开发和验证。怎样低成本、高效重建适合于自动驾驶的三维场景仍然是一个开放性问题。请参考目前开源的三维重建方法,开发一个基于单摄像头的三维重建算法,并完成部分场景重建,要求重建区域面积不小于5m*5m。然后对重建场景进行精度评估和敏感性分析。针对重建过程中不足之处提出改进意见,最后形成详细结果报告,包括算法设计、实验设置、实验结果、改进意见等内容。参考资料,以下为目前开源的一些三维重建方法:
1)https://github.com/mapillary/OpenSfM
2)http://cdcseacave.github.io/openMVS/
3)https://github.com/alexlocher/hpmvs
4)https://colmap.github.io/

1、安装环境

1.1 在Windows系统上安装openSFM

openSFM官方链接:https://opensfm.org/docs/building.html#download

1、downloading

git clone --recursive https://github.com/mapillary/OpenSfM

2、进入vcpkg目录,点击 bootstrap-vcpkg.bat 生成 vcpkg.exe

vcpkg.exe install opencv4 ceres ceres[suitesparse] lapack suitesparse --triplet x64-windows

在这里插入图片描述
下载的过程会有点长,安心等待
在这里插入图片描述
结果报错了

1.2 在虚拟机ubuntu上安装openSFM

git clone --recursive https://github.com/mapillary/OpenSfM

2、安装依赖

sudo apt-get install build-essential cmake libatlas-base-dev libatlas-base-dev libgoogle-glog-dev \
                     libopencv-dev libsuitesparse-dev python3-pip python3-dev  python3-numpy python3-opencv \
                     python3-pyproj python3-scipy python3-yaml libeigen3-dev

3、安装opengv,分别执行以下命令

mkdir source && cd source/
git clone --recurse-submodules -j8 https://github.com/laurentkneip/opengv.git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcP4BFGT-1659526174187)(C:\Users\12447\AppData\Roaming\Typora\typora-user-images\image-20220629182009677.png)]

cd opengv && mkdir build && cd build
cmake .. -DBUILD_TESTS=OFF -DBUILD_PYTHON=ON -DPYBIND11_PYTHON_VERSION=3.6 -DPYTHON_INSTALL_DIR=/usr/local/lib/python3.6/dist-packages/
sudo make install


4、安装ceres

cd ../../
curl -L http://ceres-solver.org/ceres-solver-1.14.0.tar.gz | tar xz
cd ./ceres-solver-1.14.0 && mkdir build-code && cd build-code
cmake .. -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF
sudo make -j4 install

在这里插入图片描述
5、安装pip库,然后build这个opensfm的库,安装在pip里面

cd ../../../ && pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
python3 setup.py build

在这里插入图片描述

发现报错,进行百度搜索答案。找到解决办法:https://www.cnblogs.com/hailin2018/p/13495790.html

问题在于没有这个txt文件,那么需要手动经过pip进行生成,所以经过pip3 freeze > requirements.txt 生成之后,在进行安装requirements.txt依赖:pip3 install -r requirements.txt.就顺利进行接下来的步骤
在这里插入图片描述

此时opensfm即安装成功,进行测试

1.3 Building the library

进入opensfm主目录,注意这个目录下有setup.py文件,而不是自己的某个创建的目录

然后运行

python3 setup.py build

1.4 Building the documentation(建立文档 这一步不需要 直接看官网文档)

To build the documentation and browse it locally use:

python3 setup.py build_doc
python3 -m http.server --directory build/doc/html/

and browse http://localhost:8000/

2、进行使用

示例数据集位于data/berlin。您可以通过运行来重建它

bin/opensfm_run_all data/berlin

这将运行整个 SfM 管道并生成文件data/berlin/reconstruction.meshed.json作为输出
在这里插入图片描述

通过运行以下命令从 npm下载查看器依赖项(mapillary-jsgl-matrixdat.gui ):

./viewer/node_modules.sh

要可视化结果,您可以通过运行以下命令启动查看器 HTTP 服务器:

python3 viewer/server.py -d data/berlin

然后浏览到http://localhost:8080并选择一个重建文件。你应该看到类似的东西

在这里插入图片描述

用虚拟机的Ubuntu打开内置的浏览器进行访问,本机打开localhost:8080亲测没用

打开之后就初步完成了经过一个图像的三维重建

如果需要获得密集点云:

bin/opensfm undistort data/berlin
bin/opensfm compute_depthmaps data/berlin

这将运行密集的多视图立体匹配并生成存储在data/berlin/unidtorted/depthmaps/merged.ply. 您可以使用MeshLab或任何其他支持PLY文件的查看器来可视化该点云

查看ply文件可以看到

a/berlin/unidtorted/depthmaps/merged.ply`. 您可以使用MeshLab或任何其他支持PLY文件的查看器来可视化该点云

查看ply文件可以看到

在这里插入图片描述

完成

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于OpenSFM构建三维点云的详细步骤,包括原理、流程图和实现结果。 一、原理 OpenSFM是一个用于稀疏结构从运动(SfM)和结构从运动和场景重建(SfM+MVS)的开源库。它利用图像序列中的几何关系,通过估计相机内参、外参和特征点深度等信息,实现了三维点云的构建。 在构建三维点云之前,需要对相机进行校准,以获得准确的内参。然后,通过光束平差法计算相机的外参,进而确定相机的位置和方向。接下来,使用SFM算法重建三维稀疏点云。最后,通过ICP方法进行点对的最优化求解,以更新稀疏点云。 二、流程图 1. 数据采集 使用单目摄像机采集需要重建的场景,保证摄像机在不同位置和角度拍摄到场景的多个视角图像。每秒采集的帧数应该足够高,通常在15帧/秒以上。采集过程中需要注意保持相机的稳定性,避免图像模糊和运动模糊。 2. 相机内参标定 相机内参标定是重建的第一步,它可以获取相机的内部参数,包括焦距、主点、畸变系数等。内参标定可以使用标定板或者自标定法,标定板方法需要在场景中放置标定板,自标定法则不需要标定板,但需要多次拍摄场景。内参标定通常会得到一个内参矩阵和畸变系数向量。 3. 图像预处理 在进行三维重建前,需要对采集到的图像进行预处理,包括图像去畸变、特征点检测和匹配等。去畸变可以使用相机内参矩阵和畸变系数进行校正,特征点检测可以使用OpenCV库中的SIFT、SURF、ORB等算法,匹配可以使用FLANN和RANSAC等算法。 4. 相机外参估计 相机外参估计是三维重建的关键步骤,它可以获取相机在不同位置和角度下的外部参数,包括旋转矩阵和平移向量。相机外参估计可以使用多视几何技术,即通过多组图像间的特征点匹配,计算相机的运动轨迹和姿态。OpenSFM库中提供了多种相机外参估计的算法,包括基于局部优化的重建、基于全局优化的重建和基于深度学习的重建等。 5. 稀疏点云重建 稀疏点云重建是利用估计的相机内参和外参,根据图像序列中的几何关系,在三维空间中重建场景的稀疏点云。在OpenSFM中,可以使用SfM算法进行稀疏点云重建。 6. 点云配准和ICP优化 在稀疏点云重建的基础上,需要进行点云配准和ICP优化,以获得更准确的三维点云。点云配准可以使用ICP算法,通过点云变换将不同角度的点云对齐。ICP优化可以通过迭代寻找最优的点云变换参数,以达到点云匹配的最优化。 7. 稠密点云重建 稠密点云重建是在稀疏点云基础上,通过插值等方法,生成更为密集的点云。稠密点云重建需要用到图像配准、三维重建和点云滤波等技术,其中点云滤波可以使用PCL库中的滤波算法。 8. 点云后处理 点云后处理可以根据应用需求进行,包括点云滤波、配准、分割、识别、建模等。点云后处理可以使用PCL库或者其他点云处理库进行实现。 三、实现结果 实现结果是三维稀疏点云和稠密点云,可以使用可视化工具进行展示和进一步处理。此外,还可以使用点云配准等方法,进一步提高点云的准确性和精度。 总之,使用openSFM构建三维点云需要进行相机内参标定、相机外参估计、稀疏点云重建、点云配准和ICP优化、稠密点云重建和点云后处理等步骤。希望这些信息可以对您有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值