Bundler是Noah Snavely开发的一套基于SfM原理、能够利用无序图片重建三维模型的系统。CMVS+PMVS是Yasutaka Furukawa博士写的一套强大系统,能够以Bundler的输出作为输入,二者搭配使用,能够重建出稠密的点云模型。下面是我总结的这整套系统在实际编译、运行中的常见问题,并给出相应解决方法,希望对大家有所帮助。
(注:本文Bundler在cygwin下编译运行。)
问题1.
问题描述:编译时,在cygwin中执行make之后,bin目录下并没有生成bundler.exe, Bundle2PMVS.exe等可执行文件。
分析解决:一般都是cygwin安装不完全导致这个问题。只需要重新安装cygwin,安装到下图所示界面时,将All后面的Default改为Install即可。
cygwin下载地址(官网、百度云Cygwin离线包13.08.24.7z)
问题2如下图:
问题描述:无法找到相机CCD传感器宽度信息。初次使用自己拍摄的照片兴致勃勃测试程序效果的时候,一般都会遇到这个问题。而没有CCD宽度信息,就无法计算点云的三维坐标,再继续跑下去也是白搭。
解决方法:①先确定你的相机型号,然后到网上查找该相机的CCD参数。比如www.dpreview.com。需要注意的是,程序要求的CCD宽度并不是说只能用CCD相机,CMOS相机也是一样的,CMOS感应器宽度就是所需的CCD宽度。
② 查到CCD/CMOS宽度信息后,在bin目录下找到extract_focal.pl配置文件,使用notepad++之类的记事本程序打开,按照相应格式把你的相机传感器宽度信息加进去。注意格式要严格按照规定:
"[Camera make] [Camera model]" => [Sensor width]
(即"[相机制造商] [相机型号]" => [传感器宽度])。比如我们的相机是"NIKON CORPORATION NIKON D7100" => 23.5
另,至于如何确定相机制造商Camera make和型号Camera
model,可以把你拍摄的一张照片放到bin文件目录中,打开cmd控制台,通过jhead程序进行确认,如下图,我的照片是myphoto.jpg:
完成上述设定之后,就解决了这个问题。原则上来说,使用手机拍照也可以,只要能够找到传感器宽度并添加到配置文件中。
问题3如下图:
问题描述:提取特征点时出现Ran out of memory的错误,内存不足。
分析解决:这是因为你的照片尺寸太大了,建议安装
美图看看 修改图片尺寸,一般设置长为2000,保持宽度比即可。这时一般每幅图可以找到2000左右个keypoints。另外美图看看还能够批量修改图片名、图片文件格式等,能够节省不少功夫。
问题4如下图:
问题描述:在提取特征点时,无法找到 .pgm图片文件。
分析解决:SIFT程序在提取特征点时需要 .pgm格式的图片,因此需要安装软件
ImageMagick 。装好之后,bundler在进行特征点提取时,就会自动调用该程序,将 .jpg图片转换为 .pgm。
问题5如下图:
问题描述:为什么按照要求到/result/pmvs目录下,对prep_pmvs.sh文件中的 "BUNDLER_BIN_PATH"进行赋值之后,输入上述命令运行却出现如图所示的错误?
分析解决:修改prep_pmvs.sh要以下几点需要注意:
① 千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!
② 比如我的修改后为:BUNDLER_BIN_PATH=/cygdrive/e/bundle/bin,每个人放的位置不同需作相应调整。注意等于号后不留空格,使用cygwin运行程序的还要加上/cygwin/的前缀。
问题6如下图:
问题描述:使用多幅照片,执行时却只有寥寥几幅有效,只得到很少的点。
分析解决:这是因为拍摄的照片中,照片的差异过大,无法匹配。bundler,也就是SfM原理要求照片之间存在足够大的重叠部分,每一个点最好至少在3幅照片中可见。因此在拍摄照片时,每转过15°,至少拍摄一幅照片。另外,照片尽量拍好一些,要清晰明亮。
问题7. 运行正常,最终得到的模型却质量很差。
分析解决:同问题6,都是照片质量有待提高。
以上是我总结的几个问题,希望能帮到大家。大家若有其他问题,或针对上述问题有更好的解决方法,欢迎在下方留言,一起讨论。
附:
1. Snavely的Github页面也有不少提示信息,另外他也总结了一些常见问题,与本文互为补充,大家可以参考借鉴。
2. Bundler安装编译步骤可参考我另一篇博文。