Sift特征点的提取方法,这里简单做个介绍。
作为一种匹配能力较强的局部描述算子,SIFT算法的实现相当复杂,但从软件开发的角度来说,只要会使用其中几个比较重要的函数就行了。这里要感谢David Lowe这个大牛,不但提供了一种强悍的特征匹配算法,还给出了C++的实现代码,后来有人用C#实现了这个算法,需要的朋友可到网上自行下载。
关键函数一:
int sift_features( IplImage* img, struct feature** feat )
这个函数就是用来提取图像中的特征向量。参数img为一个指向IplImage数据类型的指针,用来表示需要进行特征提取的图像。IplImage是opencv库定义的图像基本类型(关于opencv是一个著名的图像处理类库,详细的介绍可以参见http://www.opencv.org.cn)。参数feat 是一个数组指针,用来存储图像的特征向量。函数调用成功将返回特征向量的数目,否则返回-1.
关键函数二:
int _sift_features( IplImage* img, struct feature** feat, int intvls,double sigma, double contr_thr, int curv_thr, int img_dbl, int descr_width, int descr_hist_bins )
这个函数是函数一的重载,作用是一样的,实际上函数一只不过是使用默认参数调用了函数二,核心的代码都是在函数二中实现的。下面将详细介绍一下其他的几个参数。
intvls: 每个尺度空间的采样间隔数,默认值为3.
sigma: 高斯平滑的数量,默认值1.6.
contr_thr:判定特征点是否稳定,取值(0,1),默认为0.04,这个值越大,被剔除的特征点就越多。
curv_thr:判定特征点是否边缘点,默认为6.
img_dbl:在建立尺度空间前如果图像被放大了1倍则取值为1,否则为0.
descr_width:计算特征描述符时邻域子块的宽度,默认为4.
descr_hist_bins:计算特征描述符时将特征点邻域进行投影的方向数,默认为8,分别是0,45,90,135,180,215,270,315共8个方向。
Sift特征匹配算法主要包括两个阶段,一个是Sift特征的生成,即从多幅图像中提取对尺度缩放、旋转、亮度变化无关的特征向量;第二阶段是Sift特征向量的匹配。
Sift特征的生成一般包括以下几个步骤:
1、构建尺度空间,检测极值点,获得尺度不变性;
2、特征点过滤并进行精确定位;
3、为特征点分配方向值;
4、生成特征描述子。
以特征点为中心取16*16的邻域作为采样窗口,将采样点与特征点的相对方向通过高斯加权后归入包含8个bin的方向直方图,最后获得4*4*8的128维特征描述子。示意图如下:
当两幅图像的Sift特征向量生成以后,下一步就可以采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图1的某个关键点,通过遍历找到图像2中的距离最近的两个关键点。在这两个关键点中,如果次近距离除以最近距离小于某个阙值,则判定为一对匹配点。
分享到:
相关推荐
### 指纹识别技术与SIFT算法综述 #### 一、指纹识别技术概述 指纹识别技术是一种基于人体指纹的独特性来进行身份验证的技术。它主要依赖于每个人指纹的唯一性和稳定性,即使是在同一个人的不同手指之间也存在差异...
在这个名为"java指纹识别-图片识别技术"的项目工程中,开发者可能利用Java语言实现了指纹图像的处理和比对功能。下面将详细阐述这两个技术以及它们在Java环境中的应用。 首先,我们来看指纹识别技术。指纹是人类...
Java作为一种跨平台的编程语言,也提供了实现指纹识别的可能性。本篇文章将深入探讨Java如何进行指纹识别,以及与图片匹配相关的技术。 首先,我们要了解指纹识别的基本原理。指纹识别主要依赖于指纹的独特性,每个...
Windows64位环境下: 1. 安装python3.6.5 2. pip install numpy 3. pip install matplotlib 4. pip install opencv-python 5. 安装opencv-conrib(https://download.csdn.net/download/u012442083/10809277)
《Visual C++指纹模式识别系统算法与实现》第二篇涵盖了生物特征识别技术中的一个重要领域——指纹识别。在当今的信息安全领域,指纹识别以其独特性和稳定性,成为身份验证和访问控制的常见手段。以下是对该主题的...
在本项目中,我们将讨论如何使用MATLAB这一强大的编程环境来实现指纹识别算法。MATLAB以其丰富的数学函数库和友好的交互界面,成为了进行图像处理和模式识别的理想选择。 一、指纹图像预处理 1. 图像获取:首先,...
### 基于SIFT的伪拼接部分指纹识别算法 #### 概述 随着指纹识别技术在公共基础设施中的广泛应用,对于指纹识别的研究也日益深入。传统的指纹识别系统主要针对正常大小(通常尺寸为1"×1"或更大)的指纹进行识别。...
此外,现代指纹识别系统还可能涉及到更复杂的算法,如神经网络、深度学习技术,以提高识别的准确性和效率。 需要注意的是,由于技术限制,文档中的文字可能会有识别错误,如“biolab.csr.unibo.it”应该是“***”,...
总结来说,基于Matlab的指纹识别程序利用了Matlab强大的图像处理能力和算法库,实现了从图像采集、预处理、特征提取到匹配的全过程。这一技术在安全领域有着广泛应用,如门禁系统、手机解锁、支付验证等,极大地提高...
在这个项目中,开发者使用VC++来实现指纹识别的算法,因为它提供了方便的图形用户界面(GUI)设计工具,强大的调试功能,以及对Windows API的直接支持,非常适合开发桌面应用程序。 5. **源码**:源码是程序员用...
在本项目"基于MATLAB的指纹识别全部程序"中,主要涵盖了数字图像处理技术在指纹识别领域的应用。这个程序由三人协作完成,旨在为初学者提供一个完整的、易理解的指纹识别流程,从图像预处理到最终的图像匹配,包含了...
本压缩包包含两套指纹识别算法的源代码,一套是用C语言编写的,另一套则是用VC++(Visual C++)编写的。这些源代码涵盖了指纹识别的核心步骤,包括图像预处理、指纹特征提取和比对匹配,对于理解和学习指纹识别算法...
指纹识别之所以能在众多生物识别技术中脱颖而出,得益于它独特的生物特性——每个人指纹的唯一性。正是这种唯一性,确保了指纹识别技术在考勤系统中的高安全性。为了实现这一点,考勤系统中的指纹识别首先需要对采集...
标题“85375542LINGO.rar_fingerprint_指纹_指纹识别”暗示我们这里讨论的是一个与LINGO软件相关的项目,可能涉及使用LINGO来优化或解决与指纹识别算法相关的问题。LINGO是一款强大的数学建模语言,常用于求解线性、...
总的来说,本项目展示了VC++6.0在开发指纹考勤系统中的应用,涵盖了从底层的指纹识别算法到上层的用户界面设计,以及中间的数据库管理和安全性控制等多个方面,为学习者提供了全面了解和实践生物识别技术的机会。
这个名为"基于Java语言实现的,相似图像识别,基于直方图比较算法"的项目,是利用Java编程语言来构建的图像识别系统,其核心是直方图比较策略,相比指纹算法,它在准确性上有一定的优势。 直方图是描述图像颜色分布...
指纹识别技术是生物特征识别领域中的重要组成部分,它利用人的指纹独一无二的特性来验证或识别个体身份。在本文中,我们将深入探讨指纹识别系统的基本原理、实现过程以及相关的编程技术。 首先,指纹识别的核心概念...
通过使用MATLAB,研究者和工程师能够快速地探索新的指纹识别算法,并为实际的安全应用提供强有力的技术支持。在"matlab.rar"这个压缩包中,可能包含了实现上述流程的MATLAB代码,对于学习和理解指纹识别技术具有很高...
在MATLAB中实现SIFT算法,可以方便地对图像进行特征提取,进而进行后续的图像分析工作。 SIFT算法的核心步骤包括以下几个部分: 1. **尺度空间极值检测**:SIFT算法首先通过高斯金字塔对图像进行多尺度处理,寻找...
指纹识别技术是生物特征识别领域中的重要组成部分,它基于每个人独一无二的指纹图案进行身份验证。在本项目"指纹识别系统原程序vc++6.0"中,开发者利用Visual C++ 6.0这一经典的编程环境,构建了一个能够处理和分析...