基于matlab的三种面值人民币的自动识别(燕山大学).doc
《基于matlab的三种面值人民币的自动识别(燕山大学).doc》由会员分享,可在线阅读,更多相关《基于matlab的三种面值人民币的自动识别(燕山大学).doc(18页珍藏版)》请在冰豆网上搜索。
![基于matlab的三种面值人民币的自动识别(燕山大学).doc](https://file1.bdocx.com/fileroot1/2022-10/19/81791be2-65d8-44af-9aa2-bde350c8c77e/81791be2-65d8-44af-9aa2-bde350c8c77e1.gif)
工业自动化仪表3班刘光冉邵爱刚刘红丹杨秋怡
基于matlab的三种面值人民币的自动识别
所在学校燕山大学
所在学院电气工程学院
姓名邵爱刚刘光冉刘红丹杨秋怡
指导教师赵彦涛
日期2013年12月10日
2012年12月
摘要
本文通过分析第五版人民币自身特征,分别利用主色调提取、长宽比提取、中值滤波特征图像提取、特征数字提取等四种方法,通过matlab软件来实现对第五套人民币100元、50元、和20元这三个不同面值的纸币进行自动识别。
大致思路如下:
通过纸币图像特征区域内,不同面值人民币颜色分量比值数不同;不同面值纸币的长宽比不同;不同面值纸币左下角特征图案不同;纸币中间部分面额数字不同,利用不同的数字特征来分别区分出不同面额的纸币。
关键词:
第五套人民币主色调长宽比特征图案自动识别
前言:
随着科技的发展,很多行业都出现了基于人民币纸币识别技术的智能化无人收费系统,节省大量人力资源。
人民币纸币的识别技术不仅可以应用在自动售货售票上,也可以应用到银行的自动存取款机,手机营业厅的自动交费机等。
目前已有的识别方法主要是利用统计方法进行识别,如尺寸比较法、模板匹配、人工神经网络等。
以不同面值人民币自动识别方法的应用日益广泛为背景,本小组提出多种通过利用matlab软件、图像处理技术,实现对第五版人民币20元、50元、100元这三个不同面值纸币,进行简易、快速的自动识别方法,并能够在保证识别准确率的情况下,实现对纸币的快速自动识别。
本小组四名成员刘光冉、邵爱刚、杨秋怡、刘红丹同学,经过共同商讨,确立了特征区域图像主色调不同、纸币长宽比不同、特征图像不同、不同币值特征数字这四个方向。
并分别从四种不同方向入手,查阅大量相关资料,明确各种方法的实现步骤,共同努力实现程序编写及论文和答辩的准备。
正文
本文主要介绍通过matlab软件对所采集的图像进行四种不同方法处理,利用不同面值人民币的特征点,分别实现对第五套人民币20元、50元、100元这三个不同面值纸币进行准确的识别的方法。
纸币识别具体过程如下:
1、读取图像,将所需的图像放在一定的文件中储存以备所用。
2、滤波降噪,为了减少图像噪点,为了便于以后的图像的相关处理,便于区分与识别。
3、纸币摆正,针对纸币可能出现的不同的情况需要对纸币进行校正处理,如若倾斜则进行校正处理,如若不倾斜直接进行下一步。
4、采用相应的方法剔除背景,只提取纸币部分,避免背景造成的相关的干扰,便于准确快速的识别纸币的不同面值。
5、具体的实施思路有四种方法,分别是主色调、图像轮廓长宽比、特征部位(左下角)、特征数字(中间部位),具体部位如下图
(1)
(2)(3)(4)所示,然后针对不同的思路设计出相应的程序并分别进行处理比对,最后准确快速的识别出不同的纸币面值。
(一)、主色调识别
首先将纸币的图像从相应的背景下提取出来,然后找到一个色调集中的部分,如图
(1)所示。
分别提取该部分图像的RGB三色分量。
以面值为100的为例,该部分面积比较大且容易提取与区分。
图像的相应的该部分提取出来后,利用R、G、B分量灰度值累加后的R/G比值确定某一个范围,并通过多次实验确定区间阈值,以此来区分100、50、20的面值,具体程序代码以及相应的结果分析如下:
图
(1)
%颜色判别
%只取头像部分
function[val_color,IM_pic_real_head]=yanse(IM_pic,left,right,up,down)
%提取彩色纸币部分
IM_pic_real=IM_pic(up:
down,left:
right,:
);
%提取头像部分
[h,l,g]=size(IM_pic_real);
IM_pic_real_head=IM_pic_real(round(0.07*h):
round(0.87*h),round(0.6*l):
round(0.8*l),:
);
IM_rgb=squeeze(sum(sum(IM_pic_real_head,1),2));
r_g=IM_rgb
(1)/IM_rgb
(2);
ifr_g>=1.41
val_color=100;
elseifr_g<=0.94
val_color=50;
else
val_color=20;
end
%100
%3892554
%2519328
%2810818
%r/g=1.5451[1.41,]
%50
%10232415
%11418984
%9625793
%r/g=0.8961[,0.94]
%20
%12417005
%10030369
%7692525
%r/g=1.2379[0.95,1.40]
(二)、基于边缘提取的长宽比例识别
首先必须将图像读入,进行滤波处理。
依据边缘提取原理依次将100、50、20的相关的边缘即整个图像的整体轮廓提取出来。
以面值为100的为例如图
(2),计算出长度与宽度的比值,以此相应的三个值,设置相应阈值为判断面值的依据。
来区分100、50、20的不同的面值。
具体程序代码以及相应的结果分析如下:
图
(2)
%长宽比确定币值
function[val_ckb]=changkuanbi(left,right,up,down)
%确定图片的长宽比例
A=(right-left)/(down-up);
ifA<2.0000
val_ckb=100;%1.97961.97781.97961.97961.9796
elseifA<2.0600
val_ckb=20;%2.04212.03682.03682.02862.0421
elseifA<2.2000
val_ckb=50;%2.09192.09482.09192.09092.0948
else
val_ckb=0;
end
(三)、基于中值滤波的特征部位(左下角)的图像识别
本方法是基于左下角图示区域的图案差别来区分。
100和50的分别为相应的阿拉伯数字,而20则为一定的图案。
根据实物所对应的图案位置进行计算,确定出各面值纸币所对应的位置区域,将上述三种面值纸币的取并集,以确保提取特征信息无丢失,如图所示。
其次进行中值滤波降噪,然后锁定左下角的位置,二值化,将区域灰度值沿X坐标向下投影,确定图案对应的投影的左右起点和终点横坐标差值即为图案的长度,以图案的长度除以提取区域的长度为特征值,设定相应的阈值,以此来辨别不同的面值。
具体程序代码以及相应的结果分析如下:
图(3)
function[val_left,FFv_bw]=zuoxia(FF,m,n)
%提取纸币特定部位(左下角)
FFv=FF(round(0.80*m):
round(0.94*m),round(0.03*n):
round(0.15*n));
FFv=medfilt2(FFv,[4,4]);%进行中值滤波;
FFv=FFv(2:
(end-4),2:
(end-4));
FFv_bw=im2bw(FFv,0.6);%二值化
[mt1,nt1]=size(FFv);
Ty=find((sum(FFv_bw)<=(mt1-2))==1);
try
rat1=(Ty(end)-Ty
(1))/nt1;
ifrat1>=0.75
val_left=100;
elseifrat1>=0.4
val_left=50;
else
val_left=20;
end
catch
val_left=20;
end
%1000.82260.82260.80950.80950.8000
%500.67350.66670.69230.69090.6724
%200.02630.0351
(四)、基于中值滤波的特征数字(中间部位)的识别
本方法是基于中央位置,即数字部分来进行区分。
首先提取出纸币图像,然后确定中央带有特征数字的区域,然后进行中值滤波即降噪处理。
其次,将提取的部分进行二值化处理,使其成为只具有黑白两色的图像,将此图像显示出来。
从数字的最左边及最右边分别开始以第一个黑点为界计算出数字的宽度,然后计算出此宽度占截取部分比例的大小,中央数字宽度最大的图片即为面值为100的人民币,实现将100元纸币首先区分出来。
因50和20的宽度相当,进一步选取特征数字5和2左上角区域,从左向右取五列图像的宽度,计算出每列图像黑点与白点的比值,进而实现对20元和50元两个面值人民币的区分。
体程序代码以及相应的结果分析如下:
图(4)
function[val_mid,FFv2_bw]=zhongyang(FF,m,n)
%提取纸币特殊部位(中央数字)
FFv2=FF(round(0.24*m):
round(0.50*m),round(0.25*n):
round(0.52*n));
FFv2=medfilt2(FFv2,[4,4]);%进行中值滤波;
FFv2=FFv2(2:
(end-4),2:
(end-4));
[mt2,nt2]=size(FFv2);
FFv2_bw=im2bw(FFv2,0.5);%二值化
%判断是否为100
Ty_100=logical(sum(FFv2_bw)<=(mt2-2));
Ty_100_l=find((Ty_100==1));
rat_100=(Ty_100_l(end)-Ty_100_l
(1))/nt2;
ifrat_100>=0.8
val_mid=100;
else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%↓(下面求取2050)
%求取第二象限,出现黑点的列(下面求取2050)
lie_f=0;
forj=1:
(nt2/2)
fori=1:
(mt2/2)
if~(FFv2_bw(i,j)+lie_f)
lie=j;
lie_f=1;
end
end
end
%向当前列后2——6共5列,取黑白行数
FFv2_bw_f=FFv2_bw(:
(lie+2):
(lie+6));
hang(3,:
)=mt2;
forj=1:
5
fori=1:
(mt2-2)
if~(FFv2_bw_f(i,j)+FFv2_bw_f(i+1,j)+FFv2_bw_f(i+2,j))