You are on page 1of 23

Draft…20th March 2016

Application of image analysis:

Character Recognition and handwriting recognition

Given a training set ('train_ocr.tif') and test set ('test_ocr.tif');

1. Load and display the gray-scale


training image in MATLAB
A = imread('train_ocr.tif');
A1=A;
figure(1);
imshow(A);
2. Load and display the grey-scale test
image in MATLAB

B = imread('test_ocr.tif');
figure(2);
imshow(B);
B = double(B);
3. Load and display the ‘key’ image in
MATLAB

key = imread('key.tif')
figure(3);
imshow(key);
key = double(key);
4. Display the image histogram for
training image

figure(4);
A = double(A);
hist(A);
5. Carry out histogram histogram
equalization and display the new image
training image in MATLAB

figure(6);
imshow(EH);
6. Carry out histogram equalization and
display the new image training image in
MATLAB

figure(7);
imhist(EH);
6. Binarize the image by thresholding

AUTOMATIC_T_ = determineT(EH)

thresholdedImage= image_threshold(EH,AUTOMATIC_T_);

D = uint8(thresholdedImage);
figure(8);

imshow(D);
7. Binarize the image by thresholding

W = [1 1 1;
1 0 1;
1 1 1];
C = convolution_altieri(double(D),W,1,0);
C = uint8(C);
figure(9);
imshow(C);
%REPEAT
%hist(newAdjustedImage);
EH=histeq(C,255);

figure(10);
imshow(EH);
figure(11);
imhist(EH);
AUTOMATIC_T_ = determineT(EH)

thresholdedImage= image_threshold(EH,AUTOMATIC_T_);

D = uint8(thresholdedImage);
figure(12);

imshow(D);
%Masks:
FinalGrade = key(10:24,11:119);
for i = 1:15;
for j = 1:109;
if FinalGrade(i,j) >= 220;
FinalGrade(i,j) = 1;
elseif FinalGrade(i,j) >= 0 && FinalGrade(i,j) < 120;
FinalGrade(i,j) = -2;
else FinalGrade(i,j) = 1;
end
end
end
%N = convolution_altieri(double(D),FinalGrade,1,0);
%N = uint8(N);
%figure(7);
%imshow(N);
%[C I] = max(max(N));

FinalGrade = double(FinalGrade);
figure(13);
imshow(FinalGrade);
FinalGrade_size=size(FinalGrade)
Use the key to create masks
%Mask1
Mask1 = key(28:40,58:70);%changed from 60:71; to make all dimensions 11x12
for i1 = 1:12;
for j1 = 1:12; %changed from 1:11; to make all dimensions 11x12
if Mask1(i1,j1) == 255;
Mask1(i1,j1) = 1;
else Mask1(i1,j1) = -1;
end
end
end
Mask1 = double(Mask1);
figure(14);
imshow(Mask1);
Mask1_size=size(Mask1)

%Mask2
Mask2 = key(46:58,58:70);
for i2 = 1:12;
for j2 = 1:12;
if Mask2(i2,j2) == 255;
Mask2(i2,j2) = 1;
else Mask2(i2,j2) = -1;
end
end
end
Mask2 = double(Mask2);

figure(15);
imshow(Mask2);
Mask2_size=size(Mask2)
%Mask3
Mask3 = key(64:76,58:70);
for i3 = 1:12;
for j3 = 1:12;
if Mask3(i3,j3) == 255
Mask3(i3,j3) = 1;
else Mask3(i3,j3) = -1;
end
end
end
Mask3 = double(Mask3);
figure(16);
imshow(Mask3);
Mask3_size=size(Mask3)

%Mask4
Mask4 = key(82:94,58:70);
for i4 = 1:12;
for j4 = 1:12;
if Mask4(i4,j4) == 255
Mask4(i4,j4) = 1;
else Mask4(i4,j4) = -1;
end
end
end
Mask4 = double(Mask4);
figure(17);
imshow(Mask4);
Mask4_size=size(Mask4)

%Mask5
Mask5 = key(100:112,58:70);
for i5 = 1:12;
for j5 = 1:12;
if Mask5(i5,j5) == 255
Mask5(i5,j5) = 1;
else Mask5(i5,j5) = -1;
end
end
end
Mask5 = double(Mask5);
figure(18);
imshow(Mask5);
Mask5_size=size(Mask5)
%Mask6
Mask6 = key(117:129,58:70);
for i6 = 1:12;
for j6 = 1:12;
if Mask6(i6,j6) == 255
Mask6(i6,j6) = 1;
else Mask6(i6,j6) = -1;
end
end
end
Mask6 = double(Mask6);
figure(19);
imshow(Mask6);
Mask6_size=size(Mask6)
%Mask7
Mask7 = key(135:147,58:70);
for i7 = 1:12;
for j7 = 1:12;
if Mask7(i7,j7) == 255
Mask7(i7,j7) = 1;
else Mask7(i7,j7) = -1;
end
end
end
Mask7 = double(Mask7);
figure(20);
imshow(Mask7);
Mask7_size=size(Mask7)

%Mask8
Mask8 = key(153:165,58:70);
for i8 = 1:12;
for j8 = 1:12;
if Mask8(i8,j8) == 255
Mask8(i8,j8) = 1;
else Mask8(i8,j8) = -1;
end
end
end
Mask8 = double(Mask8);
figure(21);
imshow(Mask8);
Mask8_size=size(Mask8)
%Mask9
Mask9 = key(171:183,58:70);
for i9 = 1:12;
for j9 = 1:12;
if Mask9(i9,j9) == 255
Mask9(i9,j9) = 1;
else Mask9(i9,j9) = -1;
end
end
end
Mask9 = double(Mask9);
figure(22);
imshow(Mask9);
Mask9_size=size(Mask9)

%Mask0
Mask0 = key(189:201,58:70);
for i0 = 1:12;
for j0 = 1:12;
if Mask0(i0,j0) == 255
Mask0(i0,j0) = 1;
else Mask0(i0,j0) = -1;
end
end
end
Mask0 = double(Mask0);

%added on 3/18/2016
figure(23);
imshow(Mask0);
%GradeA
GradeA = key(207:219,58:70);
for i0 = 1:12;
for j0 = 1:12;
if GradeA(i0,j0) == 255
GradeA(i0,j0) = 1;
else GradeA(i0,j0) = -1;
end
end
end
GradeA = double(GradeA);
figure(24);
imshow(GradeA);

%GradeB
GradeB = key(225:237,58:70);
for i0 = 1:12;
for j0 = 1:12;
if GradeB(i0,j0) == 255
GradeB(i0,j0) = 1;
else GradeB(i0,j0) = -1;
end
end
end
GradeB = double(GradeB);
figure(25);
imshow(GradeB);
%GradeC
GradeC = key(243:255,58:70);
for i0 = 1:12;
for j0 = 1:12;
if GradeC(i0,j0) == 255
GradeC(i0,j0) = 1;
else GradeC(i0,j0) = -1;
end
end
end
GradeC = double(GradeC);
figure(26);
imshow(GradeC);

%GradeD
GradeD = key(260:272,58:70);

for i0 = 1:12;
for j0 = 1:12;
if GradeD(i0,j0) == 255
GradeD(i0,j0) = 1;
else GradeD(i0,j0) = -1;
end
end
end
GradeD = double(GradeD);
figure(27);
imshow(GradeD);
%GradeF
GradeF = key(278:290,58:70);
for i0 = 1:12;
for j0 = 1:11;
if GradeF(i0,j0) == 255
GradeF(i0,j0) = 1;
else GradeF(i0,j0) = -1;
end
end
end
GradeF= double(GradeF);
figure(28);
imshow(GradeF);
Binarization function
function [ binary_img ] = image_threshold( img,threshold )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
img = double(img);
[x,y] = size(img);
for i = 1:x;
for j = 1:y;
if img(i,j) > threshold;
img(i,j) = 255;
elseif img(i,j) <= threshold;
img(i,j) = 0;
else
img(i,j) = 0;
end
end
end
binary_img = img;
end

function [ O ] = convolution_altieri( I,W,rescale,buffer )


%UNTITLED Summary of this function goes here
% Detailed explanation goes here

[x,y]=size(I);
[w,z]=size(W);
%Implement buffer
M = buffer*ones(x,y);
for i = (1+((w-1)/2)):(x-((w-1)/2));
for j = (1+((z-1)/2)):(y-((z-1)/2));
a = (i-((w-1)/2)):(i+((w-1)/2));
b = (j-((z-1)/2)):(j+((z-1)/2));
K = I(a,b);
R = K.*W;
X = sum(sum(R));
M(i,j) = X;
end
end

%Implement linear stretch and histogram equalization at request


[s,t] = size(M);
if rescale == 0;
O = M;
elseif rescale == 1;
o = max(max(M));
l = min(min(M));
slope1 = 255/(o-l);
shift1 = 255 - (255*o)/(o-l);
for i1 = 1:s;
for j1 = 1:t;
M(i1,j1) = slope1*M(i1,j1) + shift1;
end
end
O = M;
elseif rescale == 2;
o2 = max(max(M));
l2 = min(min(M));
slope2 = 255/(o2-l2);
shift2 = 255 - (255*o2)/(o2-l2);
for i2 = 1:s;
for j2 = 1:t;
M(i2,j2) = slope2*M(i2,j2) + shift2;
end
end
M = uint8(M);
O = histeq(M,255);
else
disp('rescale must be either 0, 1 or 2 please');
O = 1;
end

end

You might also like