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联系博主