CMVS by Yasutaka Furukawa
CMVS的原开发环境是在Linux上,但有人在Windows下修改好了代码,并提供了编译好的可执行文件。
进入上面的链接,下载CMVS for Windows,在下载后的binariesWin-Linux文件夹下即可找到对应的可执行文件,按照自己电脑配置选择Win32或Win64。(我这里选择使用Win64里面的文件)。
创建一个根文件夹,将Win64中的文件都拷贝到该文件夹内。
在根文件夹下创建一个名为pmvs的文件夹。该文件夹存放cmvs需要的输入文件及cmvs的输出结果。
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
图片矩阵存储格式:
矩阵P:
CONTOUR : 文件头
P[3][4] :3*4的投影矩阵
[ x, y, z, 1 ] : 三维点的齐次坐标
[ u, v, 1 ] :图片投影点的二维齐次坐标
d: 点参考相机的深度
对应于相机坐标系和世界坐标系的关系:
不难发现,该矩阵P为内参矩阵与外参矩阵的乘积。
每个txt中存放的实际内容参考如下:
2.bundle.rd.out
文件格式:
1.# Bundle file v0.3 :文件头
2.总相机数(正常情况下等同于总的重建图片数) 总点数(sfm输出的稀疏点云点总数)
实际内容参考:
3.每个相机参数(一个相机参数由五行数据表示)
格式为:
第一行:焦距f 畸变参数k1 畸变参数k2
第二到四行:旋转矩阵R
第五行:平移量t
实际内容参考:
4.每个点参数(一个点参数由三行数据表示)
格式为:
第一行:三维点的坐标
第二行:该点的RGB颜色
第三行:该点的详细信息
第一个参数:能观察到该点的相机个数。之后以< camera > < key > < x >< y >四个参数参数为一组依次写入。
其中:< camera >为相机(图片)索引,< key >为keypoint序列索引,< x >< y >为该keypoint在图片上的二维坐标。
实际内容参考: