【发票识别】基于图像形态学处理的发票数字识别的MATLAB仿真

1.软件版本

matlab2021a

2.部分核心代码

clc;
clear;
close all;
warning off;
addpath 'func\'

alpha = 0.9;
LL    = 3;
%下面的参数需要做略微调整
% 1  :33
% 2  :48 
% 3  :28 
% 4  :31 
% 5  :32 
% 6  :32 
% 7  :29 
% 8  :26
% 9  :25
% 10 :44
% 11 :49
% 12 :54
% 13 :54
% 14 :48
LEN   = 48;

%%
%读取发票图片
%数据格式一
SEL= 1;
I0 = imread('TICKET\14.png');
figure;
subplot(221);
imshow(I0);
title('原始图像');

%%
%数字提取
%区域定位
[I1,I2,I3,I4] = func_area_find(I0,alpha);
subplot(222);
imshow(I2,[]); 
title('待检测区域定位后图像');
subplot(223);
imshow(I3,[]); 
title('待检测区域定位后图像灰度图');
%分区域进行二值化
subplot(224);
imshow(I4,[]);
title('分区域进行二值化'); 

%提取需要检测的车号,日期,上车时间1,3,4行
[Car_Num,DATE,DONE_Num] = func_position(I4,I2);
figure;
subplot(311);
imshow(Car_Num,[]);
title('车号'); 
subplot(312);
imshow(DATE,[]);
title('日期'); 
subplot(313);
imshow(DONE_Num,[]);
title('上车时间'); 

%将字符字母数字进行分割
[Car_Nums,DATEs,DONE_Nums] = func_segment(Car_Num,DATE,DONE_Num,LEN,LL);

%%
%数字识别
%二值
[Car_Nums1,DATEs1,DONE_Nums1] = func_im2bw(Car_Nums,DATEs,DONE_Nums);

[Car_Nums2,DATEs2,DONE_Nums2] = func_im2bw2(Car_Nums1,DATEs1,DONE_Nums1,SEL);


%识别
OUT1 = func_reg(Car_Nums2);
OUT2 = func_reg(DATEs2);
OUT3 = func_reg(DONE_Nums2);
OUT1
OUT2
OUT3
OUT{1}  = OUT1;
OUT{2}  = OUT2;
OUT{3}  = OUT3;
%保存
fid = fopen('save.txt','wt');
for i = 1:3
    for j = 1:length(OUT{i})
        tmps = cell2mat(OUT{i}(j));
        fprintf(fid,'%c ',tmps);    
    end
    fprintf(fid,'\n\n');
end
fclose(fid);

 

3.操作步骤与仿真结论

        对于任何发票图片,对进行分割,识别,并提取3行数据 (车号,日期,上车时间)并输出。为方便起见,车号统一为6位数字字母组合,日期输出为月日年的8位数字,上车时间为4位数字。准确率:在照片清晰情况下,能保证能输出正确,有点倾斜和模糊的情况下能保持80%或能展示即可。

        这里,数字定位的仿真效果如下所示:

        这里,数字提取的仿真效果如下所示:

        这里,目标数字分割效果如下所示:

        这里,数字字母识别效果如下所示:

4.参考文献 

[1]王佳. 发票印刷体数字识别方法的研究[J].  2016.

A09-38

5.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124224391