Matlab图像处理学习笔记(六):基于sift特征点的人民币识别
2015-01-13 12:26
816 查看
本文记录如何利用sift特征点进行人民币的识别。本文给出的matlab源码识别了1元与100元人民币的面额,相同思路,可以对各种币值的人民币进行面额、正反面的识别。但由于本程序采用串行,模板数的增多会导致运行时间线性增长,具体应用时你可以采取并行的方法加以优化,本文只给出思路。
本文的sift特征提取源码采用的是David G. Lowe(sift提出者)提供的闭源程序。
本文涉及到知识点如下:
1、sift特征点提取。
2、基于欧式距离的特征点匹配。(作者加上了最近距离与次近距离的比例来进一步筛选)
我在查阅sift的资料时,参阅了这篇博文:http://blog.csdn.net/abcjennifer/article/details/7639681
本文源码的压缩包我已传至 我的博客资源,链接http://download.csdn.net/detail/u010278305/8356601点击打开链接
转载请注明出处:http://blog.csdn.net/u010278305
关于sift特征点的简要说明:
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation
的描述子得到特征并进行图像特征点匹配,获得了良好效果,SIFT特征不只具有尺度不变性,即使改变旋转角度,图像亮度或拍摄视角,仍然能够得到好的检测效果。
该算法流程如下:
1、读取所有模板,并将其存放在一个cell里。
2、读取第一个模板。
3、读取场景,并按不同比例进行缩放,缩放比例从小到大。
4、如果再继续增大图像,匹配点无明显变化,则取上一次匹配得到的匹配点数作为最终的匹配点数目。
5、如果最终的匹配点数目,大于模板关键点数目的十分之一,则认为已寻得匹配,跳出所有for循环,否则,读取下一个模板,重复上述过程。
本算法主要源代码(myapp.m)如下:
运行效果如下(只给出部分输出图片):
程序运行时的输出如下:
转载请注明出处:http://blog.csdn.net/u010278305
本程序源码已打包上传:链接http://download.csdn.net/detail/u010278305/8356601点击打开链接
本文的sift特征提取源码采用的是David G. Lowe(sift提出者)提供的闭源程序。
本文涉及到知识点如下:
1、sift特征点提取。
2、基于欧式距离的特征点匹配。(作者加上了最近距离与次近距离的比例来进一步筛选)
我在查阅sift的资料时,参阅了这篇博文:http://blog.csdn.net/abcjennifer/article/details/7639681
本文源码的压缩包我已传至 我的博客资源,链接http://download.csdn.net/detail/u010278305/8356601点击打开链接
转载请注明出处:http://blog.csdn.net/u010278305
关于sift特征点的简要说明:
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation
的描述子得到特征并进行图像特征点匹配,获得了良好效果,SIFT特征不只具有尺度不变性,即使改变旋转角度,图像亮度或拍摄视角,仍然能够得到好的检测效果。
该算法流程如下:
1、读取所有模板,并将其存放在一个cell里。
2、读取第一个模板。
3、读取场景,并按不同比例进行缩放,缩放比例从小到大。
4、如果再继续增大图像,匹配点无明显变化,则取上一次匹配得到的匹配点数作为最终的匹配点数目。
5、如果最终的匹配点数目,大于模板关键点数目的十分之一,则认为已寻得匹配,跳出所有for循环,否则,读取下一个模板,重复上述过程。
本算法主要源代码(myapp.m)如下:
%function: % 基于sift特征点的人民币识别 %注意: % 由于matlab没有自带sift特征提取,sift特征提取调用了该算法作者提供的底层调用。 % matlab新版已集成surf特征提取,surf特征是基于sift改进的,提高了速度,但个人感觉性能有所下降。(后续有可能给出测试) %referrence: % David G. Lowe,Distinctive Image Features from Scale-Invariant Keypoints %date:2015-1-13 %author:chenyanan %转载请注明出处:http://blog.csdn.net/u010278305 %清空变量,读取图像 clear;close all fprintf('/******************************\n**It''s writed by chenyn2014.\n******************************/\n'); %读取object1(模板1) object1= imread('images/object1.jpg'); object1=rgb2gray(object1); %读取object100(模板2) object100= imread('images/object100.jpg'); object100=rgb2gray(object100); %读取场景(你可以自行更换场景图片进行测试) scene= imread('images/scene100.jpg'); scene=rgb2gray(scene); %将所有的模板放在一个元胞数组中 object_cell={object1,object100}; %与所有模板做匹配(模板遍历) for i=1:2 fprintf('\nobjec[ %d]\n\n',i); %提取第i个模板 imwrite(object_cell{i},'tmp_images/obj_tmp.jpg'); match_last=1; %从小到大缩放场景图像,找到匹配数比较适合的缩放级别(缩放遍历) for scale=0.1:0.1:0.5 fprintf('\nscale[ %f]\n\n',scale); scene_tmp = imresize(scene, scale); imwrite(scene_tmp,'tmp_images/sce_tmp.jpg'); %匹配 [match_now,keypoint1,keypoint2]=match('tmp_images/sce_tmp.jpg','tmp_images/obj_tmp.jpg'); %如果没有找到关键点,继续增大场景图像 if(match_now==0) match_now=1; continue; end %如果本次增大场景图像后,本次寻得的关键点与上次比变化不大, %则认为上次寻找的关键点数为最终寻找到的关键点数,跳出缩放遍历 if(match_now/match_last<1.2&&scale>=0.2) match_num=match_last; break; end match_last=match_now; end %如果寻得的匹配点数大于模板关键点数的十分之一,则认为已寻得匹配,跳出模板遍历 if(match_num>0.1*keypoint2) %打印识别结果 fprintf('\nFound objec at objec[ %d]\n',i); break; end end
运行效果如下(只给出部分输出图片):
程序运行时的输出如下:
>> myapp /****************************** **It's writed by chenyn2014. ******************************/ objec[ 1] scale[ 0.100000] Finding keypoints... 543 keypoints found. Finding keypoints... 287 keypoints found. Found 7 matches. scale[ 0.200000] Finding keypoints... 1348 keypoints found. Finding keypoints... 287 keypoints found. Found 12 matches. scale[ 0.300000] Finding keypoints... 1898 keypoints found. Finding keypoints... 287 keypoints found. Found 16 matches. scale[ 0.400000] Finding keypoints... 2270 keypoints found. Finding keypoints... 287 keypoints found. Found 17 matches. objec[ 2] scale[ 0.100000] Finding keypoints... 543 keypoints found. Finding keypoints... 363 keypoints found. Found 18 matches. scale[ 0.200000] Finding keypoints... 1348 keypoints found. Finding keypoints... 363 keypoints found. Found 51 matches. scale[ 0.300000] Finding keypoints... 1898 keypoints found. Finding keypoints... 363 keypoints found. Found 43 matches. Found objec at objec[ 2]其中,最后一行为识别结果,表示与模板2匹配,结果正确。
转载请注明出处:http://blog.csdn.net/u010278305
本程序源码已打包上传:链接http://download.csdn.net/detail/u010278305/8356601点击打开链接
相关文章推荐
- Matlab图像处理学习笔记(六):基于sift特征点的人民币识别
- Matlab图像处理学习笔记(三):基于匹配的目标识别
- Matlab图像处理学习笔记(三):基于匹配的目标识别
- Matlab图像处理学习笔记(三):基于匹配的目标识别
- Matlab图像处理学习笔记(二):基于颜色的图像分割
- Matlab图像处理学习笔记(二):基于颜色的图像分割
- Matlab图像处理学习笔记(八):用广义霍夫变换筛选sift特征点
- Matlab图像处理学习笔记(九):获取叠加物体的数量并进行分割
- Matlab图像处理学习笔记(四):多边形检测
- matlab图像处理学习笔记(1):matlab中double、im2double、mat2gray区别
- 【转】matlab图像处理学习笔记-数学形态与二值图像操
- 【Matlab图像处理】学习笔记:提取图片的R,G,B分量
- matlab图像处理学习笔记-数学形态与二值图像操作
- 图像处理 基于Visual C++编程 学习笔记 (1)建立MFC工程,打开bmp文件
- matlab图像处理学习笔记1
- Matlab图像处理学习笔记(七):surf特征点
- Matlab图像处理学习笔记(五):Harris角点检测
- Matlab图像处理学习笔记(八):用广义霍夫变换筛选sift特征点
- MATLAB图像处理_学习笔记
- 关于MATLAB图像处理学习笔记20070929