利用SIFt特征点和RANSAC方法进行物体识别(利用openCV和vs2010实现)

来源:互联网 发布:淘宝全屏滚动海报代码 编辑:程序博客网 时间:2024/06/06 01:34

最近在学习物体识别方面的东西。在特征点的提取领域,SIFT特征点是非常经典的一个特征点提取算法。RANSAC算法,是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。

本文的步骤就是,先利用SIFT算法对训练图片和实验图片分别提取特征点,然后将两次提取的特征点进行匹配,这种单纯的匹配方式会产生很多错误的匹配。然后用RANSAC方法,求出变换矩阵,从而可以排除大部分的错误匹配,留下的基本上都是正确的比配,最终实现了物体的识别。


在特征点的匹配过程中,设定阈值T,比较训练数据与实验数据中的特征向量,为训练数据的每一个向量都在实验数据中选取一个距离最小的和一个次小的对应点,当最小的距离与次小的距离比值小于T时,则认为与最小的距离点为一个匹配。(该方法为sift作者Lowe在2004年的文章中采用的方法)

采用此种方法,得到的试验结果如下(选取阈值T为0.8):



从实验结果不难看出,确实还存在着很多的错误的匹配点。

于是,就该使用RANSAC来删选一下匹配点了。


RANSAC为RANdom SAmple Consensus的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。
一个物体,从实验数据到训练数据,可以看做是进行了一个仿射变换。仿射变换可以由一个3X3的矩阵表示。该矩阵是未知的,可以使用RANSAC算法,从众多既包含正确值也包含异常值的匹配中采用多次迭代的方法计算其变换矩阵,从而也就可以筛选出正确的匹配。下图为RANSAC算法的详细流程。

具体的算法流程如下:


通过此方法,可以大大的提高匹配的正确率,将不正确的匹配点筛出来,最终得到大部分正确的匹配点。

实验结果如下图



经过以上两步的实验,基本上算是完成了对鞋子这个物体的识别了。




2015年3月27日   西安交通大学

转载请注明出处。

0 0
原创粉丝点击