-
先决条件
【3DGS】Ubuntu20.04系统搭建3D Gaussian Splatting及可视化环境_ubuntu 3dgs安装-CSDN博客
【Azure Kinect】配置Azure Kinect SDK,验证并保存流传输-CSDN博客
-
利用ffmpeg从视频中获得图像
在gaussian splatting源码中创建一个mydata文件夹,存入从Azure Kinect DK采集到的output.mkv。同时在mydata文件夹下创建input文件夹,将图片存入:
注:后续运行convert.py文件时,--image_path 被设置为 args.source_path + "/input",即输入图像应该放在名为 "input" 的子目录下。
ffmpeg -i output.mkv input/input_%04d.png
-
安装COLMAP
官网:GitHub - colmap/colmap: COLMAP - Structure-from-Motion and Multi-View Stereo
#安装依赖
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 libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev
#进入文件夹
cd colmap
#创建并进入build文件夹
mkdir build
cd build
#构建安装
cmake .. -GNinja #CMake预处理,生成Ninja构建系统所需的文件
ninja #默认使用系统最大可用cpu核心数进行编译,如果系统cpu有32个核,等效与ninja -j32
sudo ninja install
在这个过程中遇到了ffmpeg版本不兼容的问题,尝试过下面的命令,但是好像不起作用:
// 删除所有安装的 ffmpeg
sudo apt-get remove ffmpeg
sudo apt-get purge ffmpeg
// 删除 Anaconda ffmpeg 模块
conda remove ffmpeg
重新安装
sudo apt-get install ffmpeg
然后我就把错误信息发给chatgpt,哈哈哈我是懒子,让它帮我分析并提出解决办法,不知这么怎么的就由源码安装了ffmpeg3.4.13版本,然后就成功了哈哈哈哈:
在MobaXterm下运行colmap:
colmap gui
将官方数据File->Import model->data->truck->sparse->0导入看看:
-
使用convert.py文件生成点云
即调用colmap生成点云。
python convert.py -s mydata
第一次采集的output.mkv大概有7秒,从中获得了220+张图片,但是在生成点云的过程中遇到了图像配准过程多次失败的问题,导致最后只有2张图片符合要求,送入images文件夹。
所以在第二次采集的时候,缓慢移动相机,也采集久了一点,确保相邻图像之间有足够的重叠区域,大概是30秒,800+张图片(转换了还挺久的)。转换后的mydata文件夹如下:
-
使用ImageMagick进行图像下采样
第二次采集的图片在在训练的时候遇到了宽度大于1600像素的输入图像,在处理时可能导致内存不足或溢出:
因此,使用 ImageMagick 来调整无畸变图像的大小,即在对应文件夹中创建原始分辨率的 1/2、1/4 和 1/8 的图像。
#获取ImageMagick压缩包
wget https://imagemagick.org/archive/ImageMagick.tar.gz
#解压
tar xzvf ImageMagick.tar.gz
#进入文件夹
cd ImageMagick-7.1.1-33
#安装
sudo ./configure
sudo make
sudo make install
sudo ldconfig /usr/local/lib
检查是否安装成功:
还是使用convert.py文件:
python convert.py -s mydata --resize
然后就会有images-2/images-4/images-8文件夹:
-
使用train.py文件进行重建
开始用images_8训练,接下来等待训练完即可:
python train.py -s mydata -i images_8 -m mydata/output
-
评估渲染质量
python train.py -s mydata -i images_8 -m mydata/output --eval
python render.py -m mydata/output
python metrics.py -m mydata/output
结果如下:
- SSIM 用于衡量两幅图像之间的相似性,取值范围在 0 到 1 之间。值越接近 1,表示两幅图像越相似。0.9518 表示两幅图像具有很高的结构相似性,质量非常好。
- PSNR 是用来衡量图像重建质量的常用指标,单位为分贝 (dB)。值越高,表示重建图像与原始图像之间的差异越小。32.75 dB 是一个较高的值,表示重建图像与原始图像之间的误差较小,质量较好。
- LPIPS 是一种基于深度学习的感知相似性指标,值越低,表示图像之间的感知差异越小。0.1045 表示重建图像与原始图像之间的感知差异较小,质量较高。
-
重建结果可视化
在gaussian-splatting/SIBR_viewers/install/bin文件夹下运行:
./SIBR_gaussianViewer_app -m (your path)/mydata/output