一、简介

本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理、图像分割以及序列号识别等过程。

1 图像预处理
人民币图像总体上来说灰度偏高, 灰度值基本上都大于150 (对8位256灰度级而言) , 所以为了突出特征模块 (人民币序列号部分) , 处理时常常采用规定化处理, 首先判断整幅图像的灰度分布情况 (偏白或偏暗) , 然后将所需图像的灰度直方图进行变换.

本系统以较复杂的人民币纸币序列号识别功能实现过程为研究模型, 以人民币正面正向左下角双色异形横号码区作为特征模块来介绍后续的图像处理与识别处理过程.首先识别出纸币的正面正向 (由磁性传感器检测信号识别) , 然后将左下角包含序列号的一个大体区域P0提取出来, 以后的图像处理工作就以P0为对象, 从而减少了所需处理的数据量.
图1 获取的灰度图像
图2 序列号特征区域
然后利用图像增强技术处理序列号区域P0, 由于其较小, 像素数量不多, 可采用空间域图像增强的方法, 主要在以下两方面对P0进行增强处理:一是采用灰度修正的方法突出图像中的序列号部分, 二是去除图像中边缘部分的噪声和内部的孤立点噪声, 以达到增强的目的.

步骤1序列号模块的灰度修正

针对流通人民币新旧程度的差异, 首先对P0进行灰度统计, 然后根据总体灰度的不同来设置不同的灰度变换域值, 从而通过灰度修正达到对P0部分进行增强的目的.

步骤2序列号模块的噪声去除

因为噪声一般频率都比较高, 在频率域内用低通滤波器进行图像平滑, 空域滤波是通过模板运算进行的.线性平滑滤波器对去除高斯噪声有很好的效果, 且在大多数情况下, 对其它类型的噪声也有很好的效果, 但由于均值滤波中要求取各像素灰度的平均值, 因此滤波后会使图像中的尖锐处、边缘处、不连续的点和细节部分变得模糊, 造成了图像信息的丢失.

在图像不连续的边缘部分, 图像存在灰度值的跳跃与突变, 本文采用改进的均值滤波的思想是:通过微分算子求出图像的不连续点, 在滤波后, 把这些点的灰度值恢复到平滑滤波前, 其它部分平滑滤波处理后的值不改变, 也就是只平滑图像非边缘部分, 边缘部分像素灰度值保持不变.改进后的均值滤波算法如下:
(1) 先对原图进行局部均值滤波, 得到原图均值滤波图像.
(2) 对原图进行锐化处理.木文选用拉普拉斯模板对图像进行锐化, 求取原图较细的边缘.
(3) 对锐化图像进行简单的二值化, 得到边缘二值图像.采用比较类别方差法选取阈值.
(4) 去除边缘二值化图像的孤立点.
孤立点:在M×N的模板内 (M、N分别为模板的长和宽) , 如果其内含的位置居中的 (M-1) × (N-1) 子模板内存在像素点, 且此子模板外、M×N模板内没有像素点, 即认为此子模板内的点为孤立点.
(5) 利用去除孤立点后的边缘二值化图像信息, 把在第 (1) 步中均值滤波后图像的边缘点的灰度值恢复到滤波前.
在对灰度修正后的噪声图像去除噪声之前, 应对其进行二值化变换, 其中二值化的域值应根据步骤 (1) 中统计的P0灰度作相应改变.
经过灰度修正与去噪后的效果图如图3、图4所示.
图3 灰度修正效果图
图4 去噪后的二值化图像

2 图像分割
图像分割的目的是把图像空间分成一些有意义的区域, 最常用的分割方法是把图像灰度分成不同的等级, 然后用设置灰度门限的方法确定有意义的区域或欲分割的物体之边界.其中, 一种最简单实用的方法是对灰度修正后的图像进行二值化变换, 突出所关心的区域, 即进行如下变换:
其中, f (x, y) 为变换前图像, f1 (x, y) 为变换后图像, T为所选取的域值.在此, 图像分割的目的是获得一个个的字符模块, 作为后续的识别对象.其分割步骤如下:

  1. 将包含序列号的区域 (即上述提取的特征模块) 进行二值化处理, 突出字符序列;
  2. 对二值化后的图像进行去噪处理, 包括边缘噪声和内部非字符点噪声;
  3. 字符分割:搜索字符序列右上角起点, 然后根据所规定的数字模块和字母模块的大小, 得到字符相对起点的偏移量, 从而提取出最右边的一个字符;
  4. 针对上一步所提取的最右边第一个字符后的图像, 循环执行3) , 直到所有字符分割完毕, 处理过程如图5所示.

    图5 序列号字符分割过程
    3 序列号的SVM识别过程
    将次序最小优化算法构建的支持向量机用于序列号识别的步骤如下:
  5. 给定满足超立方体约束和超线性约束的拉格朗日乘子初始值, 一般取αi=0.
  6. 从第一个训练样本开始.
  7. 计算训练样本的KKT条件, 找到违反KKT条件的样本点对应的拉格朗日乘子, 将其作为两个拟优化的拉格朗日乘子之一.
  8. 第二个拉格朗日乘子的挑选根据最大优化步数来定, 即在原样本集中满足max f (x1) -f (x2) +y1-y2的样本点对应的拉格朗日乘子.至此, 拉格朗日乘子α1、α2挑选完毕, 在保持其余拉格朗日乘子不变的情况下, 形成一个最小规模的二次规划问题 (只含两个拉格朗日乘子) , 求解上述二次优化问题, 得到一对新的α1new、α2new.
  9. 最后一个样本计算结束, 进行下一步;否则, 返回3) , 计算下一个样本.
  10. 将0<α<C所对应的样本构成一个新的样本集, 遍历这个新的训练样本集, 不存在违反KKT条件的样本, 则得到整个问题的最优解, 进行下一步;否则, 针对新的样本集进行优化计算, 转2) .
  11. 得最优分类规则函数.
    次序最小优化算法实现简单、收敛速度快、内存需求小, 是目前最好的支持向量机训练算法之一.

二、部分源代码

function varargout = untitled1(varargin)gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @untitled1_OpeningFcn, ...'gui_OutputFcn',  @untitled1_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
endfunction untitled1_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = untitled1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function pushbutton1_Callback(hObject, eventdata, handles)function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction pushbutton2_Callback(hObject, eventdata, handles)function pushbutton3_Callback(hObject, eventdata, handles)axis off  %%关闭坐标轴显示[filename, pathname] =uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png'}, '选择图片');
% % 没有图像内容if filename ==0return;end
im1 = imread ([pathname, filename]);
imwrite(im1,'C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\0.jpg');axes(handles.axes4);
imshow(im1); function pushbutton4_Callback(hObject, eventdata, handles)function uibuttongroup1_SizeChangedFcn(hObject, eventdata, handles)function pushbutton5_Callback(hObject, eventdata, handles)function pushbutton6_Callback(hObject, eventdata, handles)  %向左旋转90度A1=imread('C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\0.jpg');
J1=imrotate(A1,90,'bicubic','loose');   %设置旋转角度,实现向左(逆时针)旋转
imwrite(J1,'C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\0.jpg');
axes(handles.axes4);
imshow(J1); function pushbutton7_Callback(hObject, eventdata, handles)function pushbutton8_Callback(hObject, eventdata, handles)function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles)function pushbutton9_Callback(hObject, eventdata, handles) %向右旋转A2=imread('C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\0.jpg');
J2=imrotate(A2,-90,'bicubic','loose');   %设置旋转角度,实现向左(逆时针)旋转
imwrite(J2,'C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\0.jpg');
axes(handles.axes4);
imshow(J2);
function OCR1()warning off %#ok<WNOFF>
addpath('C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\')if(exist('text1.txt','file')==2)delete('text1.txt')
endimagen=imread('C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\1.jpg');imshow(imagen);title('INPUT IMAGE WITH NOISE');pause(0.5);if size(imagen,3)==3 %RGB imageimagen=rgb2gray(imagen);endthreshold = graythresh(imagen);imagen =~im2bw(imagen,threshold);imagen = bwareaopen(imagen,30);word=[ ];re=imagen;fid = fopen('text1.txt', 'a');load templatesglobal templatesnum_letras=size(templates,2);while 1[fl re]=lines(re);imgn=fl;[L Ne] = bwlabel(imgn);    for n=1:Ne[r,c] = find(L==n);n1=imgn(min(r):max(r),min(c):max(c));  img_r=imresize(n1,[42 24]);letter=read_letter(img_r,num_letras);word=[word letter];endfprintf(fid,'%s\n',word);word=[ ];if isempty(re) breakend    endfclose(fid);copyfile text1.txt 'C:\Users\lenovo\Desktop\www.dssz.com_ba30784c0af0816644cbf1722cf2\Matlab练习\';winopen('text1.txt');

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]李文宏,田文娟,王霞,骆科学.基于支持向量机的人民币纸币序列号识别方法[J].信息与控制. 2010,39(04)

【人民币识别】基于matlab GUI人民币序列号识别【含Matlab源码 908期】相关推荐

  1. 【Matlab青草识别】形态学马唐草+牛筋草识别【含GUI源码 908期】

    一.代码运行视频(哔哩哔哩) [Matlab青草识别]形态学马唐草+牛筋草识别[含GUI源码 908期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  2. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  3. 【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】

    ⛄一.简介 本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理.图像分割以及序列号识别等过程. 1 图像预处 ...

  4. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  5. 基于SSM的仓库管理系统(含完整源码+论文)

    后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...

  6. 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】

    ⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...

  7. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  8. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  9. 虹膜识别算法 matlab,基于MATLAB GUI 的虹膜识别算法测试平台

    基于MATLAB GUI 的虹膜识别算法测试平台 田启川;潘泉;程咏梅;张洪才 [期刊名称]<计算机仿真> [年(卷),期]2006(023)002 [摘要]虹膜识别是一种重要的利用生物学 ...

  10. 【大米粒计数】基于matlab GUI形态学大米粒颗粒识别【含Matlab源码 915期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[大米粒计数]基于matlab GUI形态学大米粒颗粒识别[含Matlab源码 915期] (https://download.csdn. ...

最新文章

  1. 运行Python的三种方法
  2. python入门是哪个包_python入门(十):模块、包
  3. docker helowin 迁移_docker-compose 安装 oracle_11g_r2 并实现数据持久化
  4. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )
  5. 跨年过程中因日期格式化引发的生产故障:格式化方式YYYYMMdd和yyyyMMdd的区别
  6. LVS NAT/DR
  7. Spring MVC HelloWorld入门及运行机制 (一)
  8. c++ primer 练习题4.34:
  9. 自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理
  10. 浩鲸科技与帆软达成战略合作,重磅推出数据中台联合解决方案
  11. 决定成败的人生细节(转)
  12. 甘肃自考计算机技术,甘肃自考计算机与网络技术基础课程考试说明
  13. stm32 iic 从机模式 时钟低电平问题
  14. 将文本中的各个单词的字母顺序翻转(Java)
  15. listview增大条目间距
  16. 适合 Ubuntu的8款最佳录屏软件
  17. docker部署博客项目
  18. MP4视频测试URL地址,亲测有效
  19. PCL:compute3DCentroid ❤️ 计算点云质心
  20. 【摄影基础】光圈的作用

热门文章

  1. RequestMapping manager问题
  2. Linux课程笔记 Day05 命令总结
  3. libav(ffmpeg)简明教程(1)
  4. axis2 调用.net基于https的WebService接口
  5. 无法打开预编译头文件的解决方法及预编译头原理[ZZ] 转
  6. 1038. Recover the Smallest Number
  7. 拉里·佩奇 密歇根大学演讲
  8. 内联初始化字段与类实例构造器
  9. 190425每日一句
  10. Atitit 软件设计中的各种图纸 uml 之道 1. 常见设计成果与图纸 1 1.1. ui原型图与html 1 1.2. 业务逻辑 伪代码 各种uml图 1 1.3. 业务逻辑 流程图 ns