本文来自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内操作了。
先来看看本文代码实现的效果:


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计算特征点,最后再把两幅图的特征点做匹配,并把匹配结果绘制出来:
分享到:
相关推荐
ASIFT是对SIFT算法的改进,旨在增强其在大角度视角变化下的鲁棒性。ASIFT算法不仅保留了SIFT的基本特性,还引入了两个新的空间特征描述参数:经度和纬度。这两个参数能够量化仿射形变,定义了绝对倾斜(absolute ...
ASIFT则是对SIFT的一种优化,它通过适应性地调整图像的尺度空间和角度,能够在不同的视角和光照条件下实现特征匹配。ASIFT的关键改进包括: 1. **多视角预处理**:ASIFT通过对输入图像进行一系列旋转,生成多个不同...
ASIFT(Adaptive SIFT)是一种改进的尺度不变特征变换(Scale-Invariant Feature Transform),它在标准SIFT算法的基础上进行了优化,以适应不同光照、尺度和角度的变化。这个压缩包"ASIFT vs2010"包含的是ASIFT源...
综上所述,Asift算法通过对SIFT算法的改进,有效地解决了因相机视角变化导致的特征匹配问题。它不仅提高了匹配的准确性,而且在计算效率上也有较好的表现。Asift算法为图像匹配领域提供了一种新的解决方案,尤其是在...
ASIFT则在SIFT的基础上引入了自适应对齐的概念,使得算法能够处理更大范围的视角变化,提高了匹配的鲁棒性。 源码"asift源码2008版本"是ASIFT算法的实现,适用于Visual Studio 2008(VS2008)开发环境。这个版本的...
ASIFT扩展了SIFT的能力,使其不仅对尺度变化具有不变性,还能够处理由于视角变化导致的仿射变形,从而在图像识别中具有更好的鲁棒性和可靠性。 2. 人脸识别技术: 人脸识别是生物识别技术的一种,它通过分析人的...
ASIFT(Affine-SIFT)是一种自动图像配准算法,它是对传统的Scale-Invariant Feature Transform(SIFT)特征匹配算法的扩展,增加了对仿射变换的鲁棒性。SIFT算法由David Lowe在1999年提出,是图像处理领域中的一个...
3. **方向分配**:ASIFT会为每个关键点分配多个方向,以确保在旋转变化后仍能正确匹配特征。 4. **描述符生成**:在确定了关键点的位置和方向后,ASIFT将计算出描述符,这些描述符用于特征点的匹配。ASIFT可能使用...
总之,"demo_ASIFT_src.tar.gz_DEMO_asift_sift 匹配"是一个关于使用ASIFT进行图像匹配的实践案例,它涉及了SIFT和ASIFT特征提取、关键点匹配以及仿射不变性的概念,这些技术广泛应用于图像识别、三维重建和视觉导航...
这样,ASIFT可以在一个更广泛的仿射变化范围内找到稳定的特征点,提高了特征匹配的鲁棒性。C++实现的ASIFT库提供了高效的计算和内存管理,使得算法能在实际应用中快速运行。 MATLAB是一个广泛用于数值计算和数据...
3. **多方向检测**:不同于SIFT只在四个主方向上检测关键点,ASIFT可能使用更多的检测方向,以增强对不同视角的适应性。 4. **关键点定位与描述符提取**:在确定了尺度和方向后,ASIFT会像SIFT一样,计算关键点的...
ASIFT则通过构建一组仿射变换的图像金字塔来弥补这一缺陷,从而可以在更广泛的几何变化下保持特征的稳定性。 ASIFT的工作原理是,首先对原始图像进行一系列的仿射预变换,形成多个不同几何形状的图像版本。这些预...
ASIFT+OpenCV图像特征匹配实战VC工程源码 OpenCV包含头文件: #include "cv.h" #include "highgui.h" #include "cxcore.h" 核心代码如下: if (!m_pImage1||!m_pImage2) { AfxMessageBox("please,select 2...
它可以更准确地处理大角度视角变化下的图像特征匹配问题,无论是在平移、旋转还是尺度变换的情况下,都能保持较高的匹配精度和鲁棒性。这使得ASIFT在多种场景下,如图像识别、三维重建、目标跟踪和机器人定位等领域...
其匹配能力较强,可以处理两幅图像之间发生平移、旋转、仿射变换情况下的匹配问题,甚至在某种程度上对任意角度拍摄的图像也具备较为稳定的特征匹配能力。
由于ASIFT在特征提取阶段已经考虑了仿射变换,因此匹配结果更准确,特别是在存在透视变换的场景中。 C++实现ASIFT的主要挑战在于优化计算效率,因为需要处理多个仿射视图和大量的图像数据。通常,为了提高性能,会...
因此,ASIFT能够有效地处理光照变化和目标旋转的情况,提高特征的鲁棒性。 特征匹配是通过ASIFT算法实现的,它能够在前后两帧序列图像间实现精准匹配,为目标跟踪提供准确的定位信息。最后,利用CamShift算法进行...
ASIFT则通过在多个预定义的仿射变换下检测特征,增强了对图像几何变形的不变性,从而在复杂场景中能更准确地识别和匹配特征点。 SIFT算法主要包括以下几个步骤: 1. **尺度空间极值检测**:通过高斯差分金字塔寻找...