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

任务描述:

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

1、安装环境

1.1 在Windows系统上安装openSFM

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

OpenCV 三维景物恢复 基于opencv的三维重建_深度学习


下载的过程会有点长,安心等待

OpenCV 三维景物恢复 基于opencv的三维重建_OpenCV 三维景物恢复_02


结果报错了

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

OpenCV 三维景物恢复 基于opencv的三维重建_python_03

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

OpenCV 三维景物恢复 基于opencv的三维重建_深度学习_04

OpenCV 三维景物恢复 基于opencv的三维重建_计算机视觉_05


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

OpenCV 三维景物恢复 基于opencv的三维重建_计算机视觉_06


5、安装pip库,然后build这个opensfm的库,安装在pip里面

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

OpenCV 三维景物恢复 基于opencv的三维重建_重构_07

发现报错,进行百度搜索答案。找到解决办法:

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

OpenCV 三维景物恢复 基于opencv的三维重建_python_08

此时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作为输出

OpenCV 三维景物恢复 基于opencv的三维重建_OpenCV 三维景物恢复_09

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

./viewer/node_modules.sh

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

python3 viewer/server.py -d data/berlin

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

OpenCV 三维景物恢复 基于opencv的三维重建_深度学习_10

用虚拟机的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文件可以看到

OpenCV 三维景物恢复 基于opencv的三维重建_python_11

完成