一.环境配置
使用docker环境辅助环境配置。
1.拉取Docker镜像
sudo docker pull ubuntu:20.04
拉取的为ununtu16版本镜像,环境十分干净,可以通过以下命令查看容器列表
sudo docker images
如果想删除多余的docker image,可以使用指令
sudo docker rmi -f <id>
2.创建容器
sudo docker run -it -v /home/pc/docker/openmvs:/home/pc/docker/openmvs --name=openmvs --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" ubuntu:20.04 /bin/bash
基于ubuntu20.04建立容器,并开启GUI功能。
进入容器后,会在root命令下,到此我们便得到了一个纯净的ubuntu环境。
可以使用sudo docker ps查看正在运行的容器,sudo docker ps -a查看所有容器
当我想要退出时,输入exit退出容器,然后使用sudo docker stop openmvs来停止容器,当我想再次进入容器时,使用sudo docker start openmvs启动容器,再使用sudo docker exec -it openmvs bash进入容器
3.环境配置
3.1.colmap
功能: COLMAP 是一个集成的 SfM 和 MVS 工具,可以自动从多视图图像集中计算相机位姿并构建高精度的三维点云。
特点:
- 完整的 SfM 和 MVS 管道,自动化程度高。
- 支持密集点云重建。
- 强大的图形用户界面和命令行支持。
适用场景: 适合科研、文化遗产保护、建筑测绘等需要高精度三维重建的应用场景。(NeRF和3DGS都使用)
为什么记录腻,apt安装失败咯,源码搞起。
先安装依赖:
apt-get install \
git \
cmake \
ninja-build \
build-essential \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgtest-dev \
libsqlite3-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libceres-dev
拉取colmap,编译
git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
cmake .. -GNinja
ninja -j8
ninja install
编译安装完成之后,输入指令查看是否安装成功
colmap -h

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

安装vcg:
git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git #vcg只有头文件,不用编译
# 但要修改一处代码: HETYPE ht=*this; ==》 MTTYPE ht=*this;
遇到一处编译错误,更改代码即可:HETYPE ht=*this; ==》 MTTYPE ht=*this;

安装eigen3.4:
cd ~
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
tar -xzf eigen-3.4.0.tar.gz
cd eigen-3.4.0
mkdir build && cd build
cmake ..
sudo make install
安装glfw3 (可选):
sudo apt‐get install freeglut3‐dev libglew‐dev libglfw3‐dev
下载、编译openMVS:
git clone https://github.com/cdcseacave/openMVS
mkdir openMVS_build
cd openMVS_build
#Cmake 配置下
cmake .. -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT=../../vcglib/ -DEigen3_INCLUDE_DIR=/usr/local/include/eigen3 -DEIGEN3_INCLUDE_DIR=/usr/local/include/eigen3 -DCMAKE_PREFIX_PATH="/usr/local"
#make编译下:
make -j4
其中可能会缺少一些依赖:
apt-get install python3-dev
apt-get install libboost-iostreams-dev
apt-get install libopencv-dev
在make的时候也许会出现如下错误:
1.error: missing binary operator before token "(" 225 | #if defined(__has_builtin) && __has_builtin(__builtin_debugtrap)
直接定位错误,将原先的#if defined(__has_builtin) && __has_builtin(__builtin_debugtrap)改为

2.fatal error: CGAL/AABB_traits_3.h: No such file or directory 41 | #include <CGAL/AABB_traits_3.h>
经检查,是代码部分有误,应该为CGAL/AABB_traits.h,同样的错误还有下一行的CGAL/AABB_triangle_primitive.h
到此,编译结束。

把编译好的 `openMVS_build/bin` 下的全部二进制文件放入 `openMVS` 文件夹中。当前的文件结构为

其中code目录为重建代码目录,其他为辅助的下载的文件。现在就需要将openMVS/openMVS_build/bin 下的全部二进制文件放入 code/openMVS 文件夹中。
二.执行
当前code目录下的文件结构如:

还需要安装一些python以来,如
pip install open3d
pip install opencv-python
pip install trimesh
执行代码python3 colmap_mvs_reconstruction_v2.py遇到报错

解决方法:pip install --upgrade typing_extensions
之后即可顺利跑通代码。