下载CMVS-PMVS点击打开链接
一。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Yasutaka Furukama网站上提供的CMVS是基于Linux上的比较。好在有个人将它转成了可以在Windows下运行的文件,见http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html。
(1) 下载CMVS-PMVS并解压缩。发现里面有一个binariesWin-Linux文件夹,里面有配置好的基于Linux,Win32,和Win64的可执行程序(多么的人性化呀)。
(2) 进入/Win64-vs2010文件夹,建一个文件夹叫ET。将上面配置好的文件夹/pmvs考到这个ET里面。下面执行3行命令行就可以生成我们最后想要得到的稠密网格模型啦(坚持就是胜利)。可以参考/Win64-vs2010里面的Readme.txt。
>cmvs.exe ET/pmvs/ maximage[=100] CPU[=4]
>genOption.exe ET/pmvs/
>pmvs2.exe ET/pmvs/ option-0000
(注意地址后面要加/)
这样,我们发现/pmvs/models/文件夹多了几个文件,其中*.ply文件为3D模型文件用下面的软件可以查看。
强烈建议使用MeshLab:http://meshlab.sourceforge.net/,GUI做的很好。非常方便使用。
(1) 创建一个新的New Empty Project。
(2) File->InputMesh,进入/ET/pmvs/models(没有忘记这个文件夹怎么来的吧?),读入里面的模型文件就大功告成啦!
发一张结果图:
由这几张图片
生成
二。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
. CMVS
Clustering Views for Multi-view Stereo (CMVS)也是 Yasutaka Furukawa (博士后时期)写的,它包含了PMVS2的内容,提升的地方在于:更高的性能,更好的效果。CMVS将SFM的输出分成一个个小的图片簇,然后独立并行的重建。几者的关系的关系:
Bundler->CMVS->PMVS2
ske.dat:包含集群信息;
vis.dat:可见性信息;
centers-%04d.ply:各个图片簇的相机位置;
centers-all.ply:所有的相机位置信息;
option-%04d:PMVS2配置文件;
pmvs.sh or pmvs.bat:用于执行PMVS2;
这里以 Pierre Moulon 开发的Windows版本 CMVS + genOption + PMVS2 为例说明(链接,github)。
首先,代码中包含自带的已经编译好的程序,目录:./binariesWin-Linux/Win64-VS2010
。以下是自己编译的过程:
使用CMake生成VS工程,CMake文件是 ./program/CMakeLists.txt
,打开CMake GUI,选择源码路径为program,配置好,点击生成,最后会生成一个叫做 CMVS-PMVS2.sln
的VS工程。
打开工程,使用VS编译,当然,一般都会报几个错误:
命令行 error D8016: “/O1”和“/RTC1”命令行选项不兼容:将 项目->C/C++->代码生成->基本运行时检查设置为default,问题解决(参考)。
解决了这个问题之后就没有遇到其他问题了!接下来就是将要用到的输出copy出来运行(在main的Debug目录下)。
运行bundler:cd到example下的ET或者kermit目录下,运行 ../../RunBundler.sh
,参数默认的就行,成功后会生成./bundle
目录,成功的话会有 bundle_XXX.out 和 pointsXXX.ply 文件;
转换bundler输出为PMVS所需格式:cd 到 kermit 目录下,运行:../../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out
,得到结果如下(可见的结果就是生成了一个pmvs的目录):
[ReadBundleFile] Bundle version: 0.300
[ReadBundleFile] Reading 11 images and 671 points...
[GetJPEGDimensions] File ./kermit000.jpg: ( 640 , 480 )
......
@@ Conversion complete, execute "sh pmvs/prep_pmvs.sh" to finalize
@@ (you will first need to edit prep_pmvs.sh to specify your bundler path,
@@ so that the script knows where to find your
@@ RadialUndistort and Bundle2Vis binaries)
运行pmvs目录下的prep_pmvs.sh
校正和生成vis.dat文件:先修改prep_pmvs.sh
中BUNDLER_BIN_PATH
的值,我是在kermit路径下运行的,所以改为:"../../bin"
。
> 这里遇到一个bug:提示无法找到“XXXXX.rd.jpg”,实际pmvs目录下生成的图像不带“rd”。看了哈源代码,是**RadialUndistort.cpp**中出的问题,大概是C字符串和string转换造成的吧,将`file[i].rfint('.')`改成`file[i].fint('.',1)`,**file[i]**为list.txt下的一行,后面带的数字中有小数点,导致源代码提取basename出错。
执行CMVS:先执行CMVS prefix 20 2
,这里已经到了cmvs的部分了,需要先把编译好的三个文件copy过来(cmvs.exe
,genOption.exe
,pmvs2.exe
),参数的含义可以看cmvs自带的release路径下的readme。
生成pmvs的参数文件:经过cmvs之后,原来的图片被分成一个个的图片簇(如果你的图片较少则只会有一个簇),所以相应的pmvs参数也要改变,这正是这一步的意义。命令:genOption path
,这里的path建议和上一步的path一致。
生成稠密点云:最后执行pmvs.bat
生成稠密点云,运行前可能需要修改路径
三。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
At first, you need install bundler and cmvs correctly, the install reference as follow:
(a) http://www.cnblogs.com/weizhoupan/archive/2011/03/08/1977366.html----(bundler setup)
(b) https://github.com/pmoulon/CMVS-PMVS----(download cmvs-pmvs and build it,there is need install gsl)
Then, the follow step is for run:
1) mkdir a directory "result"
(a) copy the execute file "cmvs","genOption","pmvs2" to this "result" directory
(b) change current directory to "result" in terminal
2) $ ../RunBundler.sh [dataset path] //for example: ../RunBundler.sh ../examples/ET
$ ../bin/Bundle2PMVS list.txt bundle/bundle.out
3) there is generate a folder "pmvs" and a file "prep_pmvs.sh", edit "prep_pmvs.sh" as follow:
(a) change the BUNDLER_BIN_PATH as "../bin"
(b) and change the move image source filename as follow:
mv pmvs/../examples/Kermit/kermit000.rd.jpgpmvs/visualize/00000000.jpg
-->mv pmvs/kermit000.rd.jpgpmvs/visualize/00000000.jpg
4) $ pmvs/prep_pmvs.sh
5) change the options.txt as follow: (optional)
--match_table matches.init.txt
--output bundle2.out //change
--output_all bundle_
--output_dir bundle
--variable_focal_length
--use_focal_estimate
--constrain_focal
--constrain_focal_weight 0.0001
--estimate_distortion
--rerun_bundle
--bundle bundle/bundle.out //add
6) $ ../bin/bundler list.txt --options_file options.txt (optional)
7) $ ./cmvs pmvs/
$ ./genOption pmvs/
$ ./pmvs2 pmvs/ option-0000
文件夹中.ply是重构后的图像,可用meshlab打开。
另外说一句,我在gcc4.9版本下无法编译通过,是切换到gcc4.8下编译通过的(如果后续有人编译时有问题,可能需要先检查下gcc版本)。 如果你安装了多个gcc版本,可用以下指令来方便地切换当前的gcc版本: sudo update-alternatives --config gcc
四。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
三.PMVS(CMVS)的下载与安装