WindowsMobile上使用ASIFT实现对视角变化更鲁棒的特征匹配

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

最近听CV领域的朋友说起ASIFT,后来搜索了一下,发现ASIFT比SIFT更能适应视角变化,并且开源了(网址:http://www.ipol.im/pub/algo/my_affine_sift/),真的要感谢Jean-Michel Morel和Guoshen Yu两位大牛的无私奉献,让我这个超菜的业余爱好者也能玩上ASIFT。

my_affine_sift项目提供ASIFT的源码是基于C++并大量使用了STL,对于有C++经验的开发者来说不难使用。本文主要把ASIFT的源码封装成DLL,利用.NET/.NET CF平台丰富的图像编解码类库,更简便地在Windows和WindowsMobile平台上使用ASIFT。

PS:由于C#与C++编译的DLL之间不能传递STL对象,因此包含STL对象部分的处理都放在在DLL内操作了。

先来看看本文代码实现的效果:

WindowsMobile上使用ASIFT实现对视角变化更鲁棒的特征匹配WindowsMobile上使用ASIFT实现对视角变化更鲁棒的特征匹配

ASIFT算法运行起来比较慢,比上次介绍的Opencv的SURF还慢,因此在移动设备上使用,就必须牺牲点准确率来换取速度了,左图是设定的识别率最低的匹配结果,右图是设定的识别率较低的结果。

本文的代码可以到这里下载:http://www.pudn.com/downloads312/sourcecode/windows/csharp/detail1387079.html

下面是DLL端的ASIFT_Dll.cpp的部分源码:

PS:由于不能传递STL对象,因此初始化第一张图片时就把第一张图片的特征点集合和其他长宽数据作为静态数据保存.......int num_of_tilts是控制识别率的参数,等于1时识别率最低。

以下是C#端的部分源码,在C#端把图像(jpg/bmp/png等)转为灰度图(8bit的数组),然后传给DLL计算特征点,最后再把两幅图的特征点做匹配,并把匹配结果绘制出来:

你可能感兴趣的:(windows)