1 简介
本文涉及图像识别处理领域,特别涉及基于模板匹配的OCR识别方法;将待识别图像文字切分成仅包含单个字符的子图片;将其中的数字,字母和标点符号,文字子图分别标记出来;根据待识别图像文字选择对应的字体制作特征图片;并对待识别子图片和对应类型的特征图片进行归一化处理.在此基础上,进行特征比对,将待识别的数字,字母和标点符号子图片以及文字字符子图片分别于对应类型的特征模板进行对比计算,在进对比计算时,采用相同像素位置的异或算法,统计误差频次;将误差频次最小的特征图片对应的标注作为识别结果进行输出.本发明方法实现的图像识别,计算过程简单,节省人力和物力,识别效率较高.
2 部分代码
% This code reads the 0-9 train data
% to train a backpropagation network
% and then recognize the digits on an
% image.
clc
clear all
close all
Symbols =['0' '1' '2' '3' '4' '5' '6' '7' '8' '9' '-'];
P3 = [];
Result = [];
path = 'C:\Users\lenovo\Desktop\23149049ocr\'; % working Path
ext = '_bold.bmp'; %Train Data Files Extension name
P = zeros(16,12,11);
% Read 0-9 digits data
for i = 0: 9
file = [path,char(48 + i) , ext]; % char(48) => '0'
P(:,:,i + 1) = imread(file);
P3 = [P3,P(:,:,i + 1)'];
end
% imshow(P(:,:,1));
i = i + 1;
% read other symbols
file = [path,'dash' , ext];
P(:,:,i + 1) = imread(file);
P3 = [P3,P(:,:,i + 1)'];
% figure
% for i = 1:11
% subplot( 11, 1, i );
% imshow( P(:,:,i) );
% end
P1 = reshape(P3, 12 * 16, 11);
T = zeros(11,11);
for i = 1:11
T(i,i) = 1;
end
[R,Q] = size(P1);
[S2,Q] = size(T);
S1 = 25;
net = newff(minmax(P1),[S1 S1 S2],{'logsig' 'logsig','logsig'},'traingdx');
net.performFcn = 'sse';
net.trainParam.goal = 0.05;
net.trainParam.show = 100;
net.trainParam.epochs = 5000;
net.trainParam.mc = 0.95;
[net,tr] = train(net,P1,T);
sept2 = []; %character segment start-end pos
Test1 =[];
file = [path,'test_bold2.bmp'];
a = imread(file);
figure;
subplot(3,24,1:24);
imshow(a);
j =1;
seg1 = a;
b = sum(seg1) ; % character segment, if the vertical projection is zero, means the space between characters.
b(find(b < 1) ) = 0;
c = find(b == 0);
d= find(b > 0);
e = find(c > d(1));
sept2 = [];
for k = 1:size(e,2) -1 % delete repeated zero position
if( c(e(k + 1)) - c(e(k)) > 1)
sept2 = [sept2, c(e( k ))];
sept2 = [sept2, c(e(k + 1))];
end
end
%figure
sept2 = [1, sept2];
chCount = size(sept2);
for k = 1: chCount(2) -1
Test1 = [];
tmp = zeros(16,1);
z = a(:,sept2(k)+1: sept2( k+1 ));
t1 = size(z);
if(t1(2)> 2)
tt1 = size(z);
% if( tt1(2) < 11)
% z = [z,tmp];
% end
tt1 = size(z);
% if( tt1(2) < 11)
% z = [tmp,z,tmp];
% end
3 仿真结果
4 参考文献
[1]景亮, 康青杨, 唐涔轩,等. 基于模板匹配的OCR识别方法:, CN106682698A[P]. 2017.
**部分理论引用网络文献,若有侵权联系博主删除。**
5 MATLAB代码与数据下载地址
见博客主页