稠密重建CMVS在Windows下的使用

CMVS by Yasutaka Furukawa

CMVS的原开发环境是在Linux上,但有人在Windows下修改好了代码,并提供了编译好的可执行文件。

进入上面的链接,下载CMVS for Windows,在下载后的binariesWin-Linux文件夹下即可找到对应的可执行文件,按照自己电脑配置选择Win32或Win64。(我这里选择使用Win64里面的文件)。

使用

创建一个根文件夹,将Win64中的文件都拷贝到该文件夹内。

在根文件夹下创建一个名为pmvs的文件夹。该文件夹存放cmvs需要的输入文件及cmvs的输出结果。

稠密重建CMVS在Windows下的使用_第1张图片

pmvs下应有三个子文件夹和一个bundle.rd.out文件。

models:空文件夹,留给cmvs存放最终生成的ply格式点云。

txt:存放每个图片对应的矩阵文件,命名方式为00000000.txt,00000001.txt,以此类推。(n个图片对应n个文件)

visualize:存放重建使用的所有图片,命名方式为00000000.jpg,00000001.jpg,依次类推。图片顺序应与txt文件顺序对应,即名为00000000.jpg的图片的矩阵存放在00000000.txt中。

bundle.rd.out:按照bundler格式存放的sfm输出文件。

这里写图片描述

如果上述内容都齐全,即可使用cmvs进行稠密重建。

运行cmd,进入根文件夹所在的目录,依次执行:

cmvs pmvs/
genOption pmvs/
pmvs2 pmvs/ option-0000

注意:option-0000前有一个空格。

如果不用cmd,可以在vs下使用system()执行:
(两种方法本质上一样)

system("根文件夹路径\\cmvs.exe 根文件夹路径\\pmvs\\");
system("根文件夹路径\\genOption.exe 根文件夹路径\\pmvs\\");
system("根文件夹路径\\pmvs2.exe 根文件夹路径\\pmvs\\ option-0000");

之后便可以在models文件夹下看到重建好的ply文件,可以使用meshlab打开。

输入

cmvs需要的输入上述已经提到,下面主要介绍txt中存放的相机矩阵格式和bundle.rd.out内的文件格式。

1.txt

图片矩阵存储格式:

稠密重建CMVS在Windows下的使用_第2张图片

矩阵P:

稠密重建CMVS在Windows下的使用_第3张图片

CONTOUR : 文件头

P[3][4] :3*4的投影矩阵

[ x, y, z, 1 ] : 三维点的齐次坐标

[ u, v, 1 ] :图片投影点的二维齐次坐标

d: 点参考相机的深度

对应于相机坐标系和世界坐标系的关系:

稠密重建CMVS在Windows下的使用_第4张图片

不难发现,该矩阵P为内参矩阵与外参矩阵的乘积。

每个txt中存放的实际内容参考如下:

这里写图片描述

2.bundle.rd.out

文件格式:

稠密重建CMVS在Windows下的使用_第5张图片

1.# Bundle file v0.3 :文件头

2.总相机数(正常情况下等同于总的重建图片数) 总点数(sfm输出的稀疏点云点总数)

实际内容参考:

这里写图片描述

3.每个相机参数(一个相机参数由五行数据表示)

格式为:

这里写图片描述

第一行:焦距f 畸变参数k1 畸变参数k2

第二到四行:旋转矩阵R

第五行:平移量t

实际内容参考:

稠密重建CMVS在Windows下的使用_第6张图片

4.每个点参数(一个点参数由三行数据表示)

格式为:

这里写图片描述

第一行:三维点的坐标

第二行:该点的RGB颜色

第三行:该点的详细信息

第一个参数:能观察到该点的相机个数。之后以< camera > < key > < x >< y >四个参数参数为一组依次写入。

其中:< camera >为相机(图片)索引,< key >为keypoint序列索引,< x >< y >为该keypoint在图片上的二维坐标。

实际内容参考:

这里写图片描述

你可能感兴趣的:(点云库PCL学习,OpenCV学习,C++学习)