跳转至

COLMAP

475 个字 67 行代码 预计阅读时间 2 分钟

Abstract

  • COLMAP 是一种通用的运动结构 (SfM) 和多视图立体 (MVS) 管道,具有图形和命令行界面。
  • 以下的实验环境:Ubuntu 20.04(宿主机 、Docker 11.8.0-cudnn8-devel-ubuntu22.04(镜像、CUDA 11.8

Installation

Dependencies

sudo 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 \
    libgmock-dev \
    libsqlite3-dev \
    libglew-dev \
    qtbase5-dev \
    libqt5opengl5-dev \
    libcgal-dev \
    libceres-dev

支持 CUDA(宿主机里docker run 的参数添加 --gpus

sudo apt-get install -y \
  nvidia-cuda-toolkit \
 nvidia-cuda-toolkit-gcc

Configure and Compile

git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
cmake .. -GNinja
ninja
sudo ninja install

nvcc fatal : unsupported gpu architecture ‘compute_native’

# 在 colmap/cmake/FindDependencies.cmake 中添加一句 `set(CMAKE_CUDA_ARCHITECTURES "80")`,如下所示:
set(CMAKE_CUDA_ARCHITECTURES "80")
if(CUDA_ENABLED AND CUDA_FOUND)
   if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
       set(CMAKE_CUDA_ARCHITECTURES "native")
   endif()

Experiment

  • 启动 COLMAP
colmap gui

  • 点击 Reconstruction > Automatic Reconstruction 进行一系列基本设置后,输出的结果会写在 workspace folder 中(如果图像在 path/to/project/images 中,那么就应该选择 path/to/project 作为workspace

  • 运行 Automatic Reconstruction 后,文件夹生成为
+── images
│   +── image1.jpg
│   +── image2.jpg
│   +── ...
+── sparse
│   +── 0
│   │   +── cameras.bin
│   │   +── images.bin
│   │   +── points3D.bin
│   +── ...
+── dense
│   +── 0
│   │   +── images
│   │   +── sparse
│   │   +── stereo
│   │   +── fused.ply
│   │   +── meshed-poisson.ply
│   │   +── meshed-delaunay.ply
│   +── ...
+── database.db

文件夹作用

  • path/to/project/sparse:重建得到的稀疏模型
  • path/to/project/dense:重建得到的稠密模型
  • fused.ply:可以加载到 COLMAP 图形界面,从 File > Import model from ...
  • 稠密的网格只能用外部查看器(MeshLab)可视化

生成的文件夹不能直接用于 NGP3DGS

3DGS

3DGS 中,有脚本转换

python convert.py -s location [--resize] #If not resizing, ImageMagick is not needed

将图片打包成如下再执行脚本

location
|---input
  |---<image 0>
  |---<image 1>
  |---...

如果是视频,先用 ffmpeg 抽帧

ffmpeg -i ./data/data_classroom/classroom.mov -qscale:v 1 -qmin 1 -vf fps=8 /path/to/data/input/%04d.jpg

instant-NGP

instant-NGP 中,有脚本转换

python scripts\colmap2nerf.py --video_in [mp4]  --run_colmap --colmap_db data\data_classroom\colmap.db --text data\data_classroom\text_colmap   --aabb_scale 16 --out data\data_classroom\transforms.json  --colmap_matcher exhaustive  --video_fps 8

Picture Capture Process

  • 拍摄的图片应具有丰富的纹理。最好避免纹理特别少的图片如一张白墙或空桌图片。通过加入一些物品来丰富纹理
  • 具备相似的光照情况。避免 high dynamic range scenes(如有太阳有影子,穿过门或窗拍摄。避免镜面反射
  • 具有高度视觉重叠的图片。确保一个物体至少有三张图片,尽量多一点
  • 多视图拍摄。不要通过平移旋转相机来从同一个方向拍摄。但确保相似视角有少且精的图片,并不是越多越好。如果是视频,请减少帧率。

Reference


最后更新: 2024年9月26日 21:01:35
创建日期: 2024年9月25日 20:06:19
回到页面顶部