GDAL中的SURF算法

在去年的时候,在GDAL的邮件列表中发现有人提出要在GDAL中添加自动提取匹配点(GCP)的算法,在经过了将近半年的时间,GDAL中的匹配算法终于有了实质性的进展。在目前GDAL的开发版本(GDAL1.10beta)中已经提交,该匹配算法是基于SURF算法来实现的。

实现该算法的人叫Andrew Migal,邮件地址为:migal.drew@gmail.com。同时在实现SURF算法的时候,Andrew通过博客记录了所有的过程,有兴趣的童鞋可以访问这里看看:http://correlatorgsoc2012.blogspot.com。

在Andrew研究SURF的时候,最初写了一个C#版本的程序,代码挂靠在github上,下载地址为:https://github.com/migal-drew/SimpleSURF_csharp。之后又写了一个基于GDAL库的C++代码,代码下载地址为:https://github.com/migal-drew/GDAL-correlator。不过我记得这个C++版本的好像需要FLANN的库才能编译过去,不知道之后有没有修改。最后在GDAL库中也有相关的代码,有兴趣的童鞋可以更新开发版本的GDAL看看源代码。

目前比较遗憾的是,对于SURF算法,还不支持大图像处理,看来处理的时候只能自己分块来处理了。

下面是用andrew的C#版本程序处理了一下,感觉速度很快,比SIFT要快不少。对比的SIFT库是Rob Hess维护的SIFT库,同时测试数据也是使用Rob Hess库中里面的beaver和beaver_xform。


beaver


beaver_xform

上面两个图像找到的特征点如下图所示,使用SURF阈值为0.001,分别找到了57个和59个特征点。如下图所示:


接下来使用匹配阈值为1,进行匹配,发现只剩下了7对点,其中有一个明显是错误的(尾巴上的最右侧的那个点),如下图所示:


点匹配的结果如下图所示。通过简单的直观感觉,SURF确实要比SIFT快很多,(通过这两个库可以比较一下,SIFT是C++的库,SURF是C#的库,C#的运行效率肯定不及C++的高),尤其是在查找特征点的时候,SURF的速度要比SIFT快很多,当然由于两者的参数没有进行相同的设置,可能也会影响速度。


原文地址:https://www.cnblogs.com/xiaowangba/p/6313965.html