本文记录如何利用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)如下:

%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人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...相关推荐

  1. 数字图像处理学习笔记 六 彩色图像处理

    目录 (一)彩色模型介绍 1.1 RGB模型 1.2 CMY.CMYK模型 1.3 HSI彩色模型 1.4 HSV模型 1.5 YCbCr 彩色空间 (二)伪彩色图像处理 (三)全彩色图像处理及彩色变 ...

  2. 【交通标志识别】基于SIFT特征实现交通标志识别matlab代码

    1 简介 为了适应日益恶化的交通环境,本文提出了一种基于SIFT(Scale Invariant Feature Transform)算法的交通标志识别方法,利用SIFT算法构建仿射不变的特征子空间, ...

  3. matlab多边形检测_Matlab图像处理学习笔记(四):多边形检测

    本文用matlab实现了基本多边形的检测.提取. 本文涉及到的知识点如下: 1.Canny边缘检测.bw = edge(gray,'canny',[0 , 50/256]); 2.细化操作.im=bw ...

  4. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)

    高阶绘图 前言 一.进阶二维绘图 1. 对数图 2.一图双y轴 3. 直方图 4. 条形图 5. 饼状图 6. 极坐标图 7. 阶梯图与取样图 8. 箱线图以及误差线图 9. 填充图 二.配色 1.R ...

  5. matlab bwmorph spur,matlab图像处理学习笔记-数学形态与二值图像操作

    matlab图像处理学习笔记-数学形态与二值图像操作 数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单. 9.1 数学形态学图像处理 基本思想:利用一个称作结构元素(structurin ...

  6. 数字图像处理学习笔记(六)——数字图像处理中用到的数学操作

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  7. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  8. 美赛整理之Matlab的工程数学计算学习笔记(高等数学)

    美赛整理之Matlab的工程数学计算学习笔记(高等数学) 1.极限的定义和判别: 2.绘制特殊曲面 3.求两个空间曲面的交线 4.定积分的计算 5.多重积分的计算 1.截面法: 2.定义法 (1)先画 ...

  9. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

最新文章

  1. 【python】命令行解析工具getopt用法
  2. 干掉菜鸟?微信又推出新功能:一键寄快递
  3. Java Servlet监听器的分类
  4. Linux入门(10)——Ubuntu16.04使用pip3和pip安装numpy,scipy,matplotlib等第三方库
  5. Java8函数式编程(2)--流与管道
  6. 从getmemery()函数看内存管理、函数传参等一系列问题
  7. 外媒:下代iPad Pro将同时具备无线充电和反向无线充电功能
  8. 深浅拷贝的使用场景分析
  9. ORB_SLAM2探秘 第二章
  10. 操作系统实验报告 实验3存储管理实验(答案全)
  11. appdata文件太大了可以删除吗?
  12. 智能音箱---TAS5754M 音频DSP 到Android
  13. 游戏公司游戏策划面试笔记
  14. iOS8新功能新特性
  15. python unpacking_Python在unpacking上的一个小陷阱
  16. 学习日记之三:RFC2198文档阅读
  17. 微积分——什么是导数
  18. Flink新特性之非对齐检查点(unaligned checkpoint)简介
  19. spring事物管理
  20. 医院临床路径管理系统源码 医院管理系统源码

热门文章

  1. C#运算符重载(操作符重载)
  2. python装饰器系列(五)
  3. Raid学习——raid0、raid1、raid5、raid0+1、raid1+0
  4. Codility:Titanium 2016 challenge:BracketsRotation
  5. 配置Servlet3.0的方式和注意事项!
  6. 从图片搜索到人脸识别,CV正在成为“互动营销”领域的【硬核技术】
  7. ECCV 2020,一种灵活高效的权重生成网络框架
  8. CVPR 2020|打脸SOTA!不能忍,谷歌发起图像匹配挑战赛
  9. android 购票代码,android完美电影购票源码
  10. java referencequeue_java源代码 Reference和ReferenceQueue分析