SfM执行流程

整个过程根据脚本执行过程来分析。

首先我们看到RunBundler.sh,这个shell脚本。

1、定义参数

BASE_PATH="/cygdrive/e/ProjectBefore/LearnCUDA/bundler_sfm-master";

if [ $BASE_PATH == "TODO" ]
then
    echo "Please modify this script (RunBundler.sh) with the base path of your bundler installation.";
    exit;
fi

EXTRACT_FOCAL=$BASE_PATH/bin/extract_focal.pl

OS=`uname -o`

if [ $OS == "Cygwin" ]
then
    MATCHKEYS=$BASE_PATH/bin/KeyMatchFull.exe
    BUNDLER=$BASE_PATH/bin/Bundler.exe
else
    MATCHKEYS=$BASE_PATH/bin/KeyMatchFull
    BUNDLER=$BASE_PATH/bin/bundler
fi

TO_SIFT=$BASE_PATH/bin/ToSift.sh

IMAGE_DIR="."

2、Rename ".JPG" to ".jpg"

用到了正则表达式egrep跟替换sed

3、Create the list of images

这样这个就执行到了perl脚本,脚本中给出了常见相机的ccd尺寸。

这个ccd的尺寸也就是感光器件的面积大小。目前主要尺寸有2/3英寸、1/1.8英寸、1/2.7英寸、1/3.2英寸等

举一个例子,标称1/2.7英寸的感光器件,实际上是把感光器件的全部面积(包括有效和无效的部分),连同其固定支架、电子快门、辅助输出接口等等一股脑都“用一个圆包起来”,这个
圆的直径才是1/2.7英寸,即9.407mm! 而实际参与成像的“CCD感光区”尺寸,只有5.27mm×3.96mm!

其它常见的小CCD实际尺寸如下:     1/2.5英寸:5.38x4.39mm;     1/1.8英寸:7.178x5.319mm;     2/3英寸:8.8x6.6mm;

作者将ccd的尺寸转换成了CCD的感光区域的宽。如果相机的中心点在感光区域的中心的话,这样我们就可以得到相机的内参的中心点。

然后通过jhead来获取照片的exif信息,如下:

image

另外并不是所有的相机照片都会有上述信息,如下:

image

这个脚本的目的也就是为了获得可以通过jhead获得的相机参数

4、接下来在看RunBundler.sh,就是特征提取执行ToSift.sh脚本

Run the ToSift script to generate a list of SIFT commands

5、Execute the SIFT commands

sift使用了siftWin32.exe

6、Match images (can take a while)

7、Generate the options file for running bundler

8、Run Bundler

 

主要流程如上,对于下面重点分析Run Bundler。

 

 
posted @ 2014-03-12 13:47  越影&逐日而行  阅读(1641)  评论(1编辑  收藏  举报