发票识别基于matlab GUI模板匹配发票识别含Matlab源码 2337期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发票识别基于matlab GUI模板匹配发票识别含Matlab源码 2337期相关的知识,希望对你有一定的参考价值。
⛄一、模板匹配发票识别简介
随着当今社会信息化的飞速发展,数字在日常生活中发挥着巨大的作用,人们每天无时无刻不在使用数字,数字完全可以准确地表达出文字语言所要表达的含义.手机号、银行卡号和身体情况的各项参数等,这些数字信息都需要通过阿拉伯数字0~9这10个数字的不同组合来表示.因此,要想使数字的信息化时代可以更加安全稳定地发展,采用准确快速的数字识别方法是唯一有效的途径.光学字符识别(OCR)技术已经有几十年的发展历史,从刚开始的实验研究过程过渡到实际应用过程[1].经过几十年的研究发现数字字符识别的方法主要有两类:基于数字结构特征的数字识别方法[2,3,4]和基于数字统计特征的数字识别方法[5].应用比较广泛的识别方法包括:采用常规模板匹配方法进行数字识别[6,7]、基于神经网络方法的数字识别[8]、基于字符特征提取与模板匹配方法相结合的数字识别方法[9]、基于模板匹配和特征点匹配相结合的数字识别方法[10].
为了进一步提高识别率,本文根据发票号码图像的二值化特点,以Matlab为平台,提出了基于模板匹配的准确、高效的发票号码识别算法,并通过模板匹配算法对大量发票号码图像进行识别实验.
**1 数字图像预处理
- 1 数字图像采集**
本文采集的图像是利用相机拍摄的发票电子照片. 理论上,图像的分辨率越高,图像中所蕴含的数字信息量就越大,数字识别的准确率也就越高,但是由于分辨率的提高相应需要的计算量也就增加,导致识别时间减慢,系统的响应时间也就越大. 由于印刷体数字的结构比较简单,所以识别所需的信息量相对较少,利用相机拍摄取得的数字图像完全可以满足数字识别的要求.
**1. 2 图像预处理
-
- 1 图像去噪处理**
图像之所以会有噪声是因为在进行图像采集和传输的过程中传感器受到自身因素和外界环境因素的影响,比如传感器自身元器件的质量,采集时外界光照强度等诸多因素的共同影响. 图像的去噪就是为了将这些干扰因素去除而使图像更加清晰,得到更加真实的图像. 本文主要采用自适应中值滤波算法来去除图像噪声.
- 1 图像去噪处理**
中值滤波算法[11]是在1970年由Tukey提出的一种一维滤波器,该算法首先将一定实心邻域内的像素点根据其灰度值进行排序,选取这些灰度值中的中值并将这个灰度值赋给邻域中的所有像素点.中值滤波的步骤为:1)选取合适大小的滤波窗口;2)将选取出来的像素点根据其灰度值大小按照由小到大进行排序;3)选取像素点灰度值排列的中值作为中值灰度值;4)将滤波窗口中的所有像素点的灰度值改为中值灰度值.图3为中值滤波算法的实现过程.
中值滤波器是应用最广泛的统计滤波器,其不仅可以有效地消除掉图像中的噪声,而且可以不改变图像的边缘轮廓信息,弥补了线性滤波器处理图像过程中存在的缺陷与不足,自适应中值滤波器可以对较大概率的噪声进行处理,还可以在平滑非冲激噪声的同时保存细节.
1. 2. 2 图像二值化
图像二值化就是将256 色的灰度图像转化成像素值为仅由0 和1 表示的黑白图像,在本文中,对灰度化图像进行二值化转换后得到的图像中数字为白色,背景为黑色. 数字图像二值化是数字识别过程中非常重要的一个步骤,二值化后图像中的数字字符的边缘轮廓可以非常容易地被选取出来,可以准确地确定出字符的边缘,因此可以很容易地提取出数字的特征.
设定一随机值T’ = random( 0,255) . 以T为阈值,令T = T’,将图像分割成两部分G1、G2,然后计算两部分的平均灰度值u1、u2. 令T’ = ( u1+ u2) /2,如果T与T’之间的绝对值之差小于指定值,则图像最终灰度分割阈值定为T,否则再令T = T’,重新分割图像.
1. 2. 3 数字分割预处理
运用投影法对数字进行切割之前,要进行一些简要的处理,主要是噪声粘连区域修复针对具体的识别对象加入的特别处理环节. 由于数字区域有印章的痕迹较大,图像预处理很难全部滤除这些噪声,导致进行数字分割处理时,把面积较大的噪声粘连区域分割出来,这为后面的数字识别工作带来严重的干扰. 因此,必须想办法修复噪声粘连区域.
针对以上问题,本文首先通过统计求出数字的最小连通面积smax= 165,设置smax作为数字连通面积的阈值. 该阈值作为判断图片非数字的噪声区域的门限值,用于识别粘连噪声区域. 针对图像中连通面积低于165 的,判定为噪声粘连区域.对噪声粘连区域进行反色处理,从而消除分割过程中的噪声粘连区域和去噪环节无法去除的杂点,并进行正常的数字分割.
1. 2. 4 数字归一化
数字大小归一化是指对不同大小的数字字符做统一的几何变换,使其成为大小一致的数字字符. 归一化的要求是保持数字字符的拓扑结构不改变,保持字符的真实性,提高数字识别的准确率. 令f( x,y) 为原图像,g( x’,y’) 为归一化后的图像,归一化后的图像与原图像的坐标之间的映射关系为
式中: width、width’分别表示归一化之前数字字符的宽度和归一化之后数字字符的宽度; height和height’分别表示归一化之前数字字符的高度和归一化之后数字字符的高度. 归一化后( x’,y’) 点的灰度值为
2 数字识别
2. 1 基于左右轮廓特征的发票号码识别算法
左右轮廓特征的印刷体数字识别算法是模板特征匹配的一个典型应用,其主要思路是把单个数字水平分为6 部分,可以均匀分割也可以不均匀分割,根据字符字体的特征做出相应的调整. 在特征提取过程中,不再是扫描每一行的连续黑色像素点的个数,作为该行的左右轮廓特征. 取样的位置选择斐波那契数列进行取样,斐波那契数列为1,1,2,3,5,8,即在第1 部分和第6 部分靠近上下边缘处,第3 部分和第4 部分接近中间处开始的1 /8,2 /8,3 /8,5 /8,8 /8 的位置取样. 因为数字字符的右侧边缘与左侧边缘的特征比较相似,所以在对右侧边缘进行特征提取是只在第3 部分和第4 部分提取,则右侧边缘会抽取10 个特征,通过观察发现,根据数字“2”和数字“7”的特征比较,为了提高这两个数字的识别准确率增加了4 个特征,对第6 部分的1 /8,2 /8,3 /8,5 /8 进行采样,最终得到一个34 维的特征向量,这个特征向量充分描述了数字图像的左右边缘特征情况.
最后将提取的34 维特征向量通过使用欧几里德距离来比较特征向量之间的相似度. 计算待识别数字的特征向量与标准库中各个数字的标准模板特征向量的欧氏距离,选择距离最小的模板字符作为最后的识别结果.
- 2 基于数字结构特征的发票号码识别算法
基于数字结构特征的印刷体数字识别算法,利用多特征抽取和模板特征匹配的方法来实现印刷体数字的快速识别. 通过提取算法得到10 维特征向量,使用欧几里德距离来比较特征向量之间的相似度. 计算待识别数字的特征向量与标准库中各个数字的标准模板特征向量的欧氏距离,选择距离最小的模板字符作为识别结果.
根据发票号码结构特征,提取发票号码的3 类特征,即横竖线、过线数和横贯间隙. 其中,横竖线特征4 个,过线数2 个,横贯间隙4 个,总计10 个特征,由此组成10 维特征向量. 将发票号码根据这10 个特征进行特征抽取,得出的特征值
⛄二、部分源代码
function varargout = GUI(varargin)
% GUI MATLAB code for GUI.fig
% GUI, by itself, creates a new GUI or raises the existing
% singleton*.
%
% H = GUI returns the handle to a new GUI or the handle to
% the existing singleton*.
%
% GUI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in GUI.M with the given input arguments.
%
% GUI(‘Property’,‘Value’,…) creates a new GUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GUI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help GUI
% Last Modified by GUIDE v2.5 24-Apr-2022 19:37:18
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @GUI_OpeningFcn, …
‘gui_OutputFcn’, @GUI_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback = str2func(varargin1);
end
if nargout
[varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT
% — Executes just before GUI is made visible.
function GUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to GUI (see VARARGIN)
% Choose default command line output for GUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% — Outputs from this function are returned to the command line.
function varargout = GUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout1 = handles.output;
% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global I;
I=imread(‘image3.jpg’);
axes(handles.axes1);
imshow(I)
title(‘原图’)
figure
imshow(I)
title(‘原图’)
% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global I gray;
%灰度图转换
gray = rgb2gray(I);
axes(handles.axes2);
imshow(gray);title(‘灰度图’);
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]宁宫义山,王鹏.基于模板匹配的发票号码识别算法[J].沈阳工业大学学报 2015,37(06),673-678
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于发票识别基于matlab GUI模板匹配发票识别含Matlab源码 2337期的主要内容,如果未能解决你的问题,请参考以下文章
身份牌识别基于matlab GUI模板匹配身份牌识别含Matlab源码 1354期
车牌识别基于matlab GUI模板匹配车牌识别含Matlab源码 1215期
车牌识别基于matlab GUI模板匹配车牌识别含Matlab源码 1215期