How to read special characters using MATLAB in OCR ?

How to read special characters using MATLAB in OCR ? Special characters like + , / | etc.
or
We can say that how to modify read_letter function which is used to read letters in OCR?
Please help me... Thanks

2 Comments

%CREATE TEMPLATES
%Letter
clc;
close all;
A=imread('letters_numbers\A.bmp');B=imread('letters_numbers\B.bmp');
C=imread('letters_numbers\C.bmp');D=imread('letters_numbers\D.bmp');
E=imread('letters_numbers\E.bmp');F=imread('letters_numbers\F.bmp');
G=imread('letters_numbers\G.bmp');H=imread('letters_numbers\H.bmp');
I=imread('letters_numbers\I.bmp');J=imread('letters_numbers\J.bmp');
K=imread('letters_numbers\K.bmp');L=imread('letters_numbers\L.bmp');
M=imread('letters_numbers\M.bmp');N=imread('letters_numbers\N.bmp');
O=imread('letters_numbers\O.bmp');P=imread('letters_numbers\P.bmp');
Q=imread('letters_numbers\Q.bmp');R=imread('letters_numbers\R.bmp');
S=imread('letters_numbers\S.bmp');T=imread('letters_numbers\T.bmp');
U=imread('letters_numbers\U.bmp');V=imread('letters_numbers\V.bmp');
W=imread('letters_numbers\W.bmp');X=imread('letters_numbers\X.bmp');
Y=imread('letters_numbers\Y.bmp');Z=imread('letters_numbers\Z.bmp');
%lower case letters
a=imread('letters_numbers\a.png');b=imread('letters_numbers\b.png');
c=imread('letters_numbers\c.png');d=imread('letters_numbers\d.png');
e=imread('letters_numbers\e.png');f=imread('letters_numbers\f.png');
g=imread('letters_numbers\g.png');h=imread('letters_numbers\h.png');
i=imread('letters_numbers\i.png');j=imread('letters_numbers\j.png');
k=imread('letters_numbers\k.png');l=imread('letters_numbers\l.png');
m=imread('letters_numbers\m.png');n=imread('letters_numbers\n.png');
o=imread('letters_numbers\o.png');p=imread('letters_numbers\p.png');
q=imread('letters_numbers\q.png');r=imread('letters_numbers\r.png');
s=imread('letters_numbers\s.png');t=imread('letters_numbers\t.png');
u=imread('letters_numbers\u.png');v=imread('letters_numbers\v.png');
w=imread('letters_numbers\w.png');x=imread('letters_numbers\x.png');
y=imread('letters_numbers\y.png');z=imread('letters_numbers\z.png');
%Number
one=imread('letters_numbers\1.bmp'); two=imread('letters_numbers\2.bmp');
three=imread('letters_numbers\3.bmp');four=imread('letters_numbers\4.bmp');
five=imread('letters_numbers\5.bmp'); six=imread('letters_numbers\6.bmp');
seven=imread('letters_numbers\7.bmp');eight=imread('letters_numbers\8.bmp');
nine=imread('letters_numbers\9.bmp'); zero=imread('letters_numbers\0.bmp');
%*-*-*-*-*-*-*-*-*-*-*-
letter=[A B C D E F G H I J K L M...
N O P Q R S T U V W X Y Z];
number=[one two three four five...
six seven eight nine zero];
lowercase = [a b c d e f g h i j k ...
l m n o p q r s t u v w x y z];
character=[letter number lowercase];
templates=mat2cell(character,42,[24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24]);
save ('templates','templates')
clear all
i am facing problem while load .bmp files
can you please help me
What leads you to suspect that you are having trouble loading bmp files?
Are you using MS Windows? Do you have a directory named letters_numbers in your current folder? Do the noted files exist inside that folder?
The code given is not suitable for Mac or Linux: for those, all of the \ inside the file names should be changed to / . MS Windows supports / as well as \ so the code would be more general if / were to be used. But better yet would be to convert to use a named directory and fullfile()

Sign in to comment.

Answers (3)

You can check for "OCR.." in the "file exchanger", or you can simply try the code;
%CREATE TEMPLATES
%Letter
clc;
close all;
A=imread('letters_numbers\A.bmp');B=imread('letters_numbers\B.bmp');
C=imread('letters_numbers\C.bmp');D=imread('letters_numbers\D.bmp');
E=imread('letters_numbers\E.bmp');F=imread('letters_numbers\F.bmp');
G=imread('letters_numbers\G.bmp');H=imread('letters_numbers\H.bmp');
I=imread('letters_numbers\I.bmp');J=imread('letters_numbers\J.bmp');
K=imread('letters_numbers\K.bmp');L=imread('letters_numbers\L.bmp');
M=imread('letters_numbers\M.bmp');N=imread('letters_numbers\N.bmp');
O=imread('letters_numbers\O.bmp');P=imread('letters_numbers\P.bmp');
Q=imread('letters_numbers\Q.bmp');R=imread('letters_numbers\R.bmp');
S=imread('letters_numbers\S.bmp');T=imread('letters_numbers\T.bmp');
U=imread('letters_numbers\U.bmp');V=imread('letters_numbers\V.bmp');
W=imread('letters_numbers\W.bmp');X=imread('letters_numbers\X.bmp');
Y=imread('letters_numbers\Y.bmp');Z=imread('letters_numbers\Z.bmp');
%lower case letters
a=imread('letters_numbers\a.png');b=imread('letters_numbers\b.png');
c=imread('letters_numbers\c.png');d=imread('letters_numbers\d.png');
e=imread('letters_numbers\e.png');f=imread('letters_numbers\f.png');
g=imread('letters_numbers\g.png');h=imread('letters_numbers\h.png');
i=imread('letters_numbers\i.png');j=imread('letters_numbers\j.png');
k=imread('letters_numbers\k.png');l=imread('letters_numbers\l.png');
m=imread('letters_numbers\m.png');n=imread('letters_numbers\n.png');
o=imread('letters_numbers\o.png');p=imread('letters_numbers\p.png');
q=imread('letters_numbers\q.png');r=imread('letters_numbers\r.png');
s=imread('letters_numbers\s.png');t=imread('letters_numbers\t.png');
u=imread('letters_numbers\u.png');v=imread('letters_numbers\v.png');
w=imread('letters_numbers\w.png');x=imread('letters_numbers\x.png');
y=imread('letters_numbers\y.png');z=imread('letters_numbers\z.png');
%Number
one=imread('letters_numbers\1.bmp'); two=imread('letters_numbers\2.bmp');
three=imread('letters_numbers\3.bmp');four=imread('letters_numbers\4.bmp');
five=imread('letters_numbers\5.bmp'); six=imread('letters_numbers\6.bmp');
seven=imread('letters_numbers\7.bmp');eight=imread('letters_numbers\8.bmp');
nine=imread('letters_numbers\9.bmp'); zero=imread('letters_numbers\0.bmp');
%*-*-*-*-*-*-*-*-*-*-*-
letter=[A B C D E F G H I J K L M...
N O P Q R S T U V W X Y Z];
number=[one two three four five...
six seven eight nine zero];
lowercase = [a b c d e f g h i j k ...
l m n o p q r s t u v w x y z];
character=[letter number lowercase];
templates=mat2cell(character,42,[24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 24 ...
24 24]);
save ('templates','templates')
clear all

4 Comments

hello..
Thanks for the reply..
I have this same code..
But this is not working for smallcase letters..
can u give me small case letters templates?
It wont matter, even if I could because the size of your letters, font you're using...may not be the same with mine! One of the reasons why it's not working for your small case letters is because the original template wasn't made for your characters; hence the max. correlation "corr2" between your character and the template wont work. You may wanna consider creating your own template. To do that, you can crop your own letter(s) and save in a location(in your case "letters_numbers" folder to replace the old ones). Then use the "create_template" m-file to read the letters and store it in the template.
okay dats fine..
The problem is suppose we have smallcase letter 'c' and uppercase letter 'C'.
So i want to know how to differentiate between these two while matching templates?
Thanks Abdu!!
sir i can't able to find the correct example for special characters template matching method how to do the template matching of "@,+)*&%^$" all those special characters please help me to find out the correct procedure i have already cropped the templates and stored it in the folder and now i am not getting how to add those in the array when i am directly writting the special characters its showing error how to do please guide me ..thank you

Sign in to comment.

Mathworks does not supply any routine named "read_letter".
I see that there are multiple contributions in the MATLAB File Exchange that include routines named "read_letter". If you are using one of those, people would need to know which one in order to have a chance of providing advice.

5 Comments

%function read_letter
function letter=read_letter(imagn,num_letras)
% Computes the correlation between template and input image
% and its output is a string containing the letter.
% Size of 'imagn' must be 42 x 24 pixels
% Example:
% imagn=imread('D.bmp');
% letter=read_letter(imagn)
%load templates
global templates
comp=[ ];
for n=1:num_letras
sem=corr2(templates{1,n},imagn);
comp=[comp sem];
%pause(1)
end
vd=find(comp==max(comp));
%*-*-*-*-*-*-*-*-*-*-*-*-*-
if vd==1
letter='A';
elseif vd==2
letter='B';
elseif vd==3
letter='C';
elseif vd==4
letter='D';
elseif vd==5
letter='E';
elseif vd==6
letter='F';
elseif vd==7
letter='G';
elseif vd==8
letter='H';
elseif vd==9
letter='I';
elseif vd==10
letter='J';
elseif vd==11
letter='K';
elseif vd==12
letter='L';
elseif vd==13
letter='M';
elseif vd==14
letter='N';
elseif vd==15
letter='O';
elseif vd==16
letter='P';
elseif vd==17
letter='Q';
elseif vd==18
letter='R';
elseif vd==19
letter='S';
elseif vd==20
letter='T';
elseif vd==21
letter='U';
elseif vd==22
letter='V';
elseif vd==23
letter='W';
elseif vd==24
letter='X';
elseif vd==25
letter='Y';
elseif vd==26
letter='Z';
%*-*-*-*-*
elseif vd==27
letter='1';
elseif vd==28
letter='2';
elseif vd==29
letter='3';
elseif vd==30
letter='4';
elseif vd==31
letter='5';
elseif vd==32
letter='6';
elseif vd==33
letter='7';
elseif vd==34
letter='8';
elseif vd==35
letter='9';
elseif vd==36
letter='0';
%********
elseif vd==37
letter='a';
elseif vd==38
letter='b';
elseif vd==39
letter='c';
elseif vd==40
letter='d';
elseif vd==41
letter='e';
elseif vd==42
letter='f';
elseif vd==43
letter='g';
elseif vd==44
letter='h';
elseif vd==45
letter='i';
elseif vd==46
letter='j';
elseif vd==47
letter='k';
elseif vd==48
letter='l';
elseif vd==49
letter='m';
elseif vd==50
letter='n';
elseif vd==51
letter='o';
elseif vd==52
letter='p';
elseif vd==53
letter='q';
elseif vd==54
letter='r';
elseif vd==55
letter='s';
elseif vd==56
letter='t';
elseif vd==57
letter='u';
elseif vd==58
letter='v';
elseif vd==59
letter='w';
elseif vd==60
letter='x';
elseif vd==61
letter='y';
elseif vd==62
letter='z';
elseif vd==63
letter='|';
elseif vd==64
letter='|';
elseif vd==65
letter='|';
else
letter='';
%*-*-*-*-*
end
This uses a global variable "templates" that is a cell array. Set templates{66} onward to be templates for the special characters, and extend the "elseif" chain. (Or, better yet, recode the elseif chain as a switch statement)
Ya.. thats fine..but the problem is this that even smallcase letters are not recognized in this code..
so can u provide me small case letters template or just tell me how to draw these templates?
Also, letters like I and 1 are not recognized properly..both are taking as same.. so how do i distniguished these letters??
Is "c" a "special character", or did you switch topics?
no no ...
actually c is a smallcase letter 'C'.
So i want to know how to differentiate between these two while matching templates?
I know that this ques is not about special characters but i need the solution for this one too.
Thanks Roberson!!

Sign in to comment.

Can anyone please tell me why we have taken 42 & 24 ? any theory behind this ? I'll be waiting for your positive reply !

Categories

Asked:

on 20 Apr 2012

Commented:

on 20 Dec 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!