Danh mục các chƣơng trình con trong chƣơng trình

Một phần của tài liệu Luận văn: Nhận dạng chữ viết và phân tích trang tài liệu docx (Trang 91 - 106)

III. Bố cục của luận văn

A. Mã nguồn đầy đủ của chƣơng trình

A.1. Danh mục các chƣơng trình con trong chƣơng trình

TT Tên chƣơng trình Nhiệm vụ Tên file lƣu trữ

1 main Chƣơng trình chính chứa giao diện

của chƣơng trình. Main.m

2 Topdown Module chính của thuật toán top-

down. Topdown.m

3 Phantich

Module con đƣợc gọi từ module topdown, thực hiện phân chia trang tài liệu thành các block theo lƣợc đồ xám chiếu nghiêng, và khoanh vùng tài liệu.

Phantich.m

4 Phantichtrong

Module con đƣợc gọi từ module phantich, nếu block chứa cảc đồ họa và text thì sẽ đƣợc module này phần tích tiếp.

Phantichtrong.m

5 FSign

Module chƣơng trình cho thuật toán Fractal thực hiện phát hiện text và đồ họa (chƣa khoanh vùng).

FSign.m

6 FSignKV

Module chƣơng trình cho thuật toán Fractal thực hiện phát hiện và khoanh vùng text và đồ họa.

FSignKV.m

7 Lienthong Module tìm vùng liên thông để

khoanh vùng. Lienthong.m

8 Vebien Module khoanh vùng một vùng liên

thông. Vebien.m

9 Demo

Module chay theo thuật toán Fractal có vẽ demo các block đƣợc tính FS.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

86 GVHD: PGS. TS. Ngô Quốc Tạo

A.3. Mã nguồn các module

1) Main:

y=imread(filename); anhgoc=y;

%%%%%%%%%%%%% Cac bien phu trong chuong trinh % bien de tranh pha tich trung lap

global letraicu;

global lephaicu;

global startcu;

global limitcu;

%%%%%%%%%%%%%%%%%%% % loc nhieu anh goc

y=double(y)/255; % chuyen sang kieu double %%%%%%% mat na loc

k=[0 1 0;1 2 1;0 1 0]; k=1/8*k;

%%%%%%% dung ham loc

y=conv2(y,k); y=uint8(round(y*255)); %%%%%%%%%%%%%%%% kich_thuoc_anh=size(y); chieucao=kich_thuoc_anh(1); chieurong=kich_thuoc_anh(2);

%%%%%%%%%Phan nguong va tim hinh chieu doc

gray_min=min(min(y)); gray_max=max(max(y)); Main (chương trình chính) Topdown FSign FSignKV DemoFS Phantich Phantichtrong

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

87 GVHD: PGS. TS. Ngô Quốc Tạo

z=zeros(1,chieucao);% z la hinh chieu doc

for i=1:chieucao for j=1:chieurong

if (y(i,j)>nguongtach) % vung nen

y(i,j)=255; % xoa trang vung nen

else

z(i)=z(i)+1; % tinh cho bieu do xam

end

end end

%%%%%%%%%%%%%%%

chieu_cao_hang=timhang(z);

%%%%%%%%%%%%%%%%% tach khoi bang cach vao tung khoi van ban ngang tim hinh %%%%%%%%%%%%%%%%% chieu ngang i=1; start=i; limit=i; luocdo=zeros(1,chieurong); while (i<=chieucao)

while (i<=chieucao)&(z(i)>(2*min(z))) %di het vung van ban de tinh chieu cao

i=i+1; end

limit=i-1; %limit-start la chieu cao vung van ban ngang

luocdo=zeros(1,chieurong);

% tinh luoc do xam cho moi vung ngang

if (start<chieucao)&(limit>start) if limit>chieucao

limit=chieucao; % tranh vuot qua vung bien anh

end if (limit-start)>=(0.5*chieu_cao_hang) y=phantich(start,limit,y,nguongtach,chieu_cao_hang,1,size(y,2)); end end while (i<=chieucao)&(z(i)<=(2*min(z))) i=i+1; end start=i; end imshow(y); 2) Topdown: y=imread(filename); anhgoc=y;

%%%%%%%%%%%%% Cac bien phu trong chuong trinh % bien de tranh pha tich trung lap

global letraicu;

global lephaicu;

global startcu;

global limitcu;

%%%%%%%%%%%%%%%%%%% % loc nhieu anh goc

y=double(y)/255; % chuyen sang kieu double %%%%%%% mat na loc

k=[0 1 0;1 2 1;0 1 0]; k=1/8*k;

%%%%%%% dung ham loc

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

88 GVHD: PGS. TS. Ngô Quốc Tạo

%%%%%%%%%%%%%%%%

kich_thuoc_anh=size(y); chieucao=kich_thuoc_anh(1); chieurong=kich_thuoc_anh(2);

%%%%%%%%%Phan nguong va tim hinh chieu doc

gray_min=min(min(y)); gray_max=max(max(y));

nguongtach=round(((gray_min+gray_max)/2)); z=zeros(1,chieucao);% z la hinh chieu doc

for i=1:chieucao for j=1:chieurong

if (y(i,j)>nguongtach) % vung nen

y(i,j)=255; % xoa trang vung nen

else

z(i)=z(i)+1; % tinh cho bieu do xam

end

end end

%%%%%%%%%%%%%%%

chieu_cao_hang=timhang(z);

%%%%%%%%%%%%%%%%% tach khoi bang cach vao tung khoi van ban ngang tim hinh %%%%%%%%%%%%%%%%% chieu ngang i=1; start=i; limit=i; luocdo=zeros(1,chieurong); while (i<=chieucao)

while (i<=chieucao)&(z(i)>(2*min(z))) %di het vung van ban de tinh chieu cao

i=i+1; end

limit=i-1; %limit-start la chieu cao vung van ban ngang

luocdo=zeros(1,chieurong);

% tinh luoc do xam cho moi vung ngang

if (start<chieucao)&(limit>start) if limit>chieucao

limit=chieucao; % tranh vuot qua vung bien anh

end if (limit-start)>=(0.5*chieu_cao_hang) y=phantich(start,limit,y,nguongtach,chieu_cao_hang,1,size(y,2)); end end while (i<=chieucao)&(z(i)<=(2*min(z))) i=i+1; end start=i; end

% Lam noi vung van ban

%%%%%%%%%%%%%%%%%%% %subplot(1,2,1); %title('ANH GOC'); %imshow(anhgoc,'InitialMagnification',100); %subplot(1,2,2); %title('KET QUA'); imshow(y); 3) Phantich: function ketqua=phantich(start,limit,anh,nguongtach,chieu_cao_hang,bientrai,bienphai) %%%%%%%%%%%%%%%

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

89 GVHD: PGS. TS. Ngô Quốc Tạo

global lephaicu; global startcu; global limitcu; %%%%%%%%%%%%%%%% CDmang=bienphai-bientrai+1; luocdo=zeros(1,CDmang);

for k=start:limit % tim hinh chieu ngang

for q=bientrai:bienphai if (anh(k,q)<=nguongtach) luocdo(q-bientrai+1)=luocdo(q-bientrai+1)+1; end end end

%%%%%%%%%%%%% tim cuc tieu trong luoc do xam nhung bo qua suon dau va cuoi

dau=1; cuoi=CDmang; while (luocdo(dau+1)>=luocdo(dau))&(dau<CDmang) dau=dau+1; end while (luocdo(cuoi-1)>=luocdo(cuoi))&(cuoi>2) cuoi=cuoi-1; end %%%%%%%%%%%% if cuoi>dau cuctieu=round(min(luocdo(dau:cuoi))*1.2); else cuctieu=bienphai-bientrai; end %%%%%%%%%%%%

if (cuctieu>0)&((limit-start)>= 2*chieu_cao_hang)% vung anh

for hang_anh=start:limit for cot_anh=bientrai:bienphai anh(hang_anh,cot_anh)=255-anh(hang_anh,cot_anh); end end else dorong=0; truoc=luocdo(1); letrai=bientrai; lephai=bientrai; i=bientrai; dautien=0; while(i<=bienphai)

while (i<=bienphai)&(luocdo(i-bientrai+1)<=cuctieu) % tim diem bat dau vung van ban

i=i+1;

dorong=dorong+1; end

% if (letrai==bientrai) % doan trang dau qua ngan````````````````````

% letrai=i;dautien=1;

% end

if (dorong>=(1.2*chieu_cao_hang))|((lephai>letrai)&(i>=bienphai)) % khoang canh cho phep

if (lephai>letrai) % tien hanh ve vung van ban

% dautien=0;

if ((limit-start)< 2*chieu_cao_hang) % khung vung van ban

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

90 GVHD: PGS. TS. Ngô Quốc Tạo

lephai=bienphai; end for ve_bien_ngang=letrai:lephai anh(start,ve_bien_ngang)=0; anh(limit,ve_bien_ngang)=0; end for ve_bien_doc=start:limit anh(ve_bien_doc,letrai)=0; anh(ve_bien_doc,lephai)=0; end else

if (letraicu==letrai) & (lephaicu==lephai)&(startcu==start)&(limitcu==limit) % tranh bi treo

% trung khoi phan tich

letraicu lephaicu startcu limitcu else letraicu=letrai; lephaicu=lephai; startcu=start; limitcu=limit; anh=phantichtrong(start,limit,letrai,lephai,anh,nguongtach,chieu_cao_hang); end end end

letrai=i;% bat dau mot vung van ban

dorong=0; else

dorong=0; end

while (i<=bienphai)&(luocdo(i-bientrai+1)>cuctieu) i=i+1; % di qua vung van ban

lephai=i; end end end ketqua=anh; 4) Phantichtrong: function ketqua=phantichtrong(start,limit,letrai,lephai,anh,nguongtach,chieu_cao_hang) y=anh; chieucao=limit; chieurong=lephai;

%%%%%%%%%Phan nguong va tim hinh chieu doc %z=zeros(1,size(y,1));% z la hinh chieu doc

z=zeros(1,limit-start+1);% z la hinh chieu doc

for i=start:chieucao for j=letrai:chieurong

if (y(i,j)>nguongtach) % vung nen

else

z(i-start+1)=z(i-start+1)+1; % tinh cho bieu do xam

end

end end

%%%%%%%%%%%%%%%%% tach khoi bang cach vao tung khoi van ban ngang tim hinh %%%%%%%%%%%%%%%%% chieu ngang

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

91 GVHD: PGS. TS. Ngô Quốc Tạo

start_t=i; limit_t=i;

while (i<=chieucao)

while (i<=chieucao)&(z(i-start+1)>(2*min(z))) %di het vung van ban de tinh chieu cao

i=i+1; end

limit_t=i-1; %limit-start la chieu cao vung van ban ngang

% tinh luoc do xam cho moi vung ngang

if (start_t<chieucao)&(limit_t>start_t) if limit_t>chieucao

limit_t=chieucao; % tranh vuot qua vung bien anh

end y=phantich(start_t,limit_t,y,nguongtach,chieu_cao_hang,letrai,lephai); end while (i<=chieucao)&(z(i-start+1)<=(2*min(z))) i=i+1; end start_t=i; end %%%%%%%%%%%%%%%%%%% ketqua=y; 5) Fsign

%anh=imread('C:\chuongtrinh\anhmau\textc3.jpg'); % doc anh tu mot file JPG

anh=imread(filename); % doc anh tu mot file JPG

N=15; % kich thuoc moi block

k=1; % so block tren anh co kich thuoc NxN

chieucao=size(anh,1); % chieu cao cuar anh vao

chieucao_goc=chieucao;

chieurong=size(anh,2); % chieu rong cua anh vao

chieurong_goc=chieurong;

%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%

%%%%%%%%%Phan nguong va tim hinh chieu doc

gray_min=min(min(anh)); gray_max=max(max(anh));

nguongtach=round(((gray_min+gray_max)/2));

% chuan hoa kich thuoc anh the nguyen lan cua NxN %chuan chieu cao anh

if (chieucao/N)>round(chieucao/N) chieucao=round(chieucao/N)*N+N;

else

chieucao=round(chieucao/N)*N;

end

%chuan chieu rong anh

if (chieurong/N)>round(chieurong/N) chieurong=round(chieurong/N)*N+N; else chieurong=round(chieurong/N)*N; end %anh=zeros(1:chieucao,1:chieurong); %%%%%%%%%%%%%%%%%%%% %loc nhieu anh goc

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

92 GVHD: PGS. TS. Ngô Quốc Tạo

%%%%%%% mat na loc

loc=[0 1 0;1 2 1;0 1 0]; loc=1/8*loc;

%%%%%%% dung ham loc

anh=conv2(anh,loc); anh=uint8(round(anh*255));

%%%%%%%%%%%%%%

for i=1:chieucao for j=1:chieurong

if (i>chieucao_goc)|(j>chieurong_goc) % ngoai vung bien anh goc

anh(i,j)=0; % dat la vung nen anh

else% trong vung bien anh goc

%anh(i,j)=255-anh(i,j);

if (anh(i,j)>nguongtach) % vung nen

%anh(i,j)=255; % xoa trang vung nen

anh(i,j)=0; else

%z(i)=z(i)+1; % tinh cho bieu do xam

anh(i,j)=255-anh(i,j); end

end

end end

%%%%%%%%%%%%%%% tinh FS cho moi block

FS=[]; k=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% u_layer1=zeros(N+2);b_layer1=zeros(N+2);u_layer2=zeros(N+2);b_layer2=zeros(N+2);block_k=zeros(N +2); %%%%%%%%%%%%%%%%%%%%%% for i=2:round(chieucao/N) for(j=2:round(chieurong/N))

%%%%%%%%%% thao tac voi block thu K

u_layer1(:,:)=0; b_layer1(:,:)=0; u_layer2(:,:)=0; b_layer2(:,:)=0; vol1=0; vol2=0;

block_k(2:N+1,2:N+1)=anh((i-1)*N+1:i*N,(j-1)*N+1:j*N); % tinh gia tri cho lop tren va duoi voi delta1 cho moi vung thu k

for ki=2:N+1 for kj=2:N+1 g1_u=block_k(ki,kj)+1; g1_b=block_k(ki,kj)-1; g2=block_k(ki,kj+1); g3=block_k(ki,kj-1); g4=block_k(ki+1,kj); g5=block_k(ki-1,kj); temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer1(ki,kj)=max(temp(1:5)); b_layer1(ki,kj)=min(temp(2:6)); vol1=vol1 + (u_layer1(ki,kj)-b_layer1(ki,kj)); % tinh xong lop tren va duoi voi delta1

% tinh gia tri cho lop tren va duoi voi delta2

g1_u=u_layer1(ki,kj)+1; g1_b=b_layer1(ki,kj)-1; g2=u_layer1(ki,kj+1); g3=u_layer1(ki,kj-1); g4=u_layer1(ki+1,kj);

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

93 GVHD: PGS. TS. Ngô Quốc Tạo

temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer2(ki,kj)=max(temp(1:5)); b_layer2(ki,kj)=min(temp(2:6));

vol2=vol2+(u_layer2(ki,kj)-b_layer2(ki,kj));

%%%%%%%%%%%%%%%% tinh xong gia tri cua lop tren duoi voi delta2

end end % tinh FS k=k+1; FS(k)=(vol2-vol1)/2; end end

%%%%%%%%%%%%%%%% Tach anh va text

k=0; %nguong=((min(FS)+max(FS))/2); %nguong=3000; anh=255-anh; anh=cat(3,anh,anh,anh); nguong=min(FS)+50; for i=2:round(chieucao/N) for(j=2:round(chieurong/N)) k=k+1; if (FS(k)>4000) % anh anh((i-1)*N+1:i*N,(j-1)*N+1:j*N,2:3)=20; elseif (FS(k)>nguong) % text

anh((i-1)*N+1:i*N,(j-1)*N+1:j*N,1)=150; anh((i-1)*N+1:i*N,(j-1)*N+1:j*N,3)=150; end end end imshow(anh) 6) FSignKV global anh

anh=imread(filename); % doc anh tu mot file JPG

N=15; % kich thuoc moi block

k=1; % so block tren anh co kich thuoc NxN

chieucao=size(anh,1); % chieu cao cuar anh vao

chieucao_goc=chieucao;

chieurong=size(anh,2); % chieu rong cua anh vao

chieurong_goc=chieurong;

%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%

%%%%%%%%%Phan nguong va tim hinh chieu doc

gray_min=min(min(anh)); gray_max=max(max(anh));

nguongtach=round(((gray_min+gray_max)/2));

% chuan hoa kich thuoc anh the nguyen lan cua NxN %chuan chieu cao anh

if (chieucao/N)>round(chieucao/N) chieucao=round(chieucao/N)*N+N; else chieucao=round(chieucao/N)*N; end

%chuan chieu rong anh

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

94 GVHD: PGS. TS. Ngô Quốc Tạo

else

chieurong=round(chieurong/N)*N;

end

%%%%%%%%%%%%%%%%%%%% %loc nhieu anh goc

%anh = filter2(fspecial('average',3),anh);

anh=double(anh)/255; % chuyen sang kieu double %%%%%%% mat na loc

loc=[0 1 0;1 2 1;0 1 0]; loc=1/8*loc;

%%%%%%% dung ham loc

anh=conv2(anh,loc); anh=uint8(round(anh*255));

%%%%%%%%%%%%%%

for i=1:chieucao for j=1:chieurong

if (i>chieucao_goc)|(j>chieurong_goc) % ngoai vung bien anh goc

anh(i,j)=0; % dat la vung nen anh

else% trong vung bien anh goc

%anh(i,j)=255-anh(i,j);

if (anh(i,j)>nguongtach) % vung nen

%anh(i,j)=255; % xoa trang vung nen

anh(i,j)=0; else

%z(i)=z(i)+1; % tinh cho bieu do xam

anh(i,j)=255-anh(i,j); end

end

end end

%%%%%%%%%%%%%%% tinh FS cho moi block

FS=[]; k=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% u_layer1=zeros(N+2);b_layer1=zeros(N+2);u_layer2=zeros(N+2);b_layer2=zeros(N+2);block_k=zeros(N +2); %%%%%%%%%%%%%%%%%%%%%% % mang chua FS global AFS AFS=zeros(round(chieucao/N)-1,round(chieurong/N)-1); %%%%%%%%%%%%%%%%%%%%%% for i=2:round(chieucao/N) for(j=2:round(chieurong/N))

%%%%%%%%%% thao tac voi block thu K

u_layer1(:,:)=0; b_layer1(:,:)=0; u_layer2(:,:)=0; b_layer2(:,:)=0; vol1=0; vol2=0;

block_k(2:N+1,2:N+1)=anh((i-1)*N+1:i*N,(j-1)*N+1:j*N); % tinh gia tri cho lop tren va duoi voi delta1 cho moi vung thu k

for ki=2:N+1 for kj=2:N+1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

95 GVHD: PGS. TS. Ngô Quốc Tạo

g2=block_k(ki,kj+1); g3=block_k(ki,kj-1); g4=block_k(ki+1,kj); g5=block_k(ki-1,kj); temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer1(ki,kj)=max(temp(1:5)); b_layer1(ki,kj)=min(temp(2:6)); vol1=vol1 + (u_layer1(ki,kj)-b_layer1(ki,kj)); % tinh xong lop tren va duoi voi delta1

% tinh gia tri cho lop tren va duoi voi delta2

g1_u=u_layer1(ki,kj)+1; g1_b=b_layer1(ki,kj)-1; g2=u_layer1(ki,kj+1); g3=u_layer1(ki,kj-1); g4=u_layer1(ki+1,kj); g5=u_layer1(ki-1,kj); temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer2(ki,kj)=max(temp(1:5)); b_layer2(ki,kj)=min(temp(2:6)); vol2=vol2+(u_layer2(ki,kj)-b_layer2(ki,kj));

%%%%%%%%%%%%%%%% tinh xong gia tri cua lop tren duoi voi delta2

end end % tinh FS k=k+1; FS(k)=(vol2-vol1)/2; % AFS %AFS(i,j)=(vol2-vol1)/2; end end

%%%%%%%%%%%%%%%% Tach anh va text

k=0; anh=cat(3,anh,anh,anh); nguong=min(FS)+50; for i=1:round(chieucao/N-1) for(j=1:round(chieurong/N)-1) k=k+1; if ((FS(k)>nguong)&(FS(k)<4000)) % text

AFS(i,j)=1; % danh dau vung text

elseif (FS(k)>=4000) % vung anh

AFS(i,j)=2; % danh dau vung anh

end end end %%%%%%%%% khoanh vung global MLT MLT=AFS;

MLT=0; % chua 1 khoi cac phan tu lien thong %%%%%%%%%%% set(0,'RecursionLimit',1000) %%%%%%%%%%%% anh=255-anh; for i=1:round(chieucao/N-1) for(j=1:round(chieurong/N)-1)

if ((AFS(i,j)~=3)&(AFS(i,j)==1)); % phan tu la text chua xet trong anh

MLT=0; lienthong(i,j,1);

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

96 GVHD: PGS. TS. Ngô Quốc Tạo

vebien(MLT,N,1); end

elseif ((AFS(i,j)~=3)&(AFS(i,j)==2)); % phan tu la text chua xet trong anh

MLT=0; lienthong(i,j,2);

if(sum(sum(MLT))>20 ) % bo qua vung lien thong qua nho

vebien(MLT,N,2); end end end end imshow(anh) 7) DemFS:

anh=imread(filename); % doc anh tu mot file JPG

goc=anh;

N=15; % kich thuoc moi block

k=1; % so block tren anh co kich thuoc NxN

chieucao=size(anh,1); % chieu cao cuar anh vao

chieucao_goc=chieucao;

chieurong=size(anh,2); % chieu rong cua anh vao

chieurong_goc=chieurong;

%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%

%%%%%%%%%Phan nguong va tim hinh chieu doc

gray_min=min(min(anh)); gray_max=max(max(anh));

nguongtach=round(((gray_min+gray_max)/2));

% chuan hoa kich thuoc anh the nguyen lan cua NxN %chuan chieu cao anh

if (chieucao/N)>round(chieucao/N) chieucao=round(chieucao/N)*N+N;

else

chieucao=round(chieucao/N)*N;

end

%chuan chieu rong anh

if (chieurong/N)>round(chieurong/N) chieurong=round(chieurong/N)*N+N; else chieurong=round(chieurong/N)*N; end %%%%%%%%%%%%%%%%%%%% %loc nhieu anh goc

anh=double(anh)/255; % chuyen sang kieu double %%%%%%% mat na loc

loc=[0 1 0;1 2 1;0 1 0]; loc=1/8*loc;

%%%%%%% dung ham loc

anh=conv2(anh,loc); anh=uint8(round(anh*255));

%%%%%%%%%%%%%%

for i=1:chieucao for j=1:chieurong

if (i>chieucao_goc)|(j>chieurong_goc) % ngoai vung bien anh goc

anh(i,j)=0; % dat la vung nen anh

else% trong vung bien anh goc

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

97 GVHD: PGS. TS. Ngô Quốc Tạo

%anh(i,j)=255; % xoa trang vung nen

anh(i,j)=0; else

%z(i)=z(i)+1; % tinh cho bieu do xam

anh(i,j)=255-anh(i,j); end

end

end end

%%%%%%%%%%%%%%% tinh FS cho moi block

FS=[]; k=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% u_layer1=zeros(N+2);b_layer1=zeros(N+2);u_layer2=zeros(N+2);b_layer2=zeros(N+2);block_k=zeros(N +2); %%%%%%%%%%%%%%%%%%%%%% for i=1:round(chieucao/N) for(j=1:round(chieurong/N))

%%%%%%%%%% thao tac voi block thu K

u_layer1(:,:)=0; b_layer1(:,:)=0; u_layer2(:,:)=0; b_layer2(:,:)=0; vol1=0; vol2=0;

block_k(2:N+1,2:N+1)=anh((i-1)*N+1:i*N,(j-1)*N+1:j*N); % tinh gia tri cho lop tren va duoi voi delta1 cho moi vung thu k

for ki=2:N+1 for kj=2:N+1 g1_u=block_k(ki,kj)+1; g1_b=block_k(ki,kj)-1; g2=block_k(ki,kj+1); g3=block_k(ki,kj-1); g4=block_k(ki+1,kj); g5=block_k(ki-1,kj); temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer1(ki,kj)=max(temp(1:5)); b_layer1(ki,kj)=min(temp(2:6)); vol1=vol1 + (u_layer1(ki,kj)-b_layer1(ki,kj)); % tinh xong lop tren va duoi voi delta1

% tinh gia tri cho lop tren va duoi voi delta2

g1_u=u_layer1(ki,kj)+1; g1_b=b_layer1(ki,kj)-1; g2=u_layer1(ki,kj+1); g3=u_layer1(ki,kj-1); g4=u_layer1(ki+1,kj); g5=u_layer1(ki-1,kj); temp=[g1_u g2 g3 g4 g5 g1_b]; u_layer2(ki,kj)=max(temp(1:5)); b_layer2(ki,kj)=min(temp(2:6)); vol2=vol2+(u_layer2(ki,kj)-b_layer2(ki,kj));

%%%%%%%%%%%%%%%% tinh xong gia tri cua lop tren duoi voi delta2

end end % ve he truc toa do trucx=[1:N+2]; trucy=[1:N+2]; meshgrid(trucx,trucy); % axes(handles.anhgoc); subplot(2,2,1); anhtem=goc;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

98 GVHD: PGS. TS. Ngô Quốc Tạo

imshow(anhtem); subplot(2,2,2); %axes(handles.uper); % surf(trucx,trucy,b_layer2) surf(trucx,trucy,u_layer2) subplot(2,2,3); %axes(handles.block); imshow(255-anh((i-1)*N+1:(i-1)*N+N,(j-1)*N+1:(j-1)*N+N)); subplot(2,2,4); %axes(handles.surf); trucx=[1:N]; trucy=[1:N]; meshgrid(trucx,trucy); surf(trucx,trucy,double(anh((i-1)*N+1:(i-1)*N+N,(j-1)*N+1:(j-1)*N+N))); pause(0.3) % tinh FS k=k+1; FS(k)=(vol2-vol1)/2; end end 8) Lienthong

function lienthong(i,j,loai) % loai=1 la text, =2 la anh

global AFS;

global MLT;

AFS(i,j)=3; % danh dau la da xet

MLT(i,j)=1; % danh dau diem thuoc vung lien thong

if (((i-1)>0)&((j-1)>0)& (AFS(i-1,j-1)~=3)&(AFS(i-1,j-1)==loai)) lienthong(i-1,j-1,loai);end if (((j-1)>0)& (AFS(i,j-1)~=3)&(AFS(i,j-1)==loai)) lienthong(i,j-1,loai);end

if (((i+1)<size(AFS,1))&((j-1)>0)&(AFS(i+1,j-1)~=3)&(AFS(i+1,j-1)==loai))lienthong(i+1,j-1,loai);end if (((i-1)>0)& (AFS(i-1,j)~=3)&(AFS(i-1,j)==loai)) lienthong(i-1,j,loai);end

if (((i+1)<size(AFS,1))& (AFS(i+1,j)~=3)&(AFS(i+1,j)==loai)) lienthong(i+1,j,loai);end

if (((i-1)>0)&((j+1)<size(AFS,2))& (AFS(i-1,j+1)~=3)&(AFS(i-1,j+1)==loai)) lienthong(i-1,j+1,loai);end if (((j+1)<size(AFS,2))& (AFS(i,j+1)~=3)&(AFS(i,j+1)==loai)) lienthong(i,j+1,loai);end

if (((i+1)<size(AFS,1))&((j+1)<size(AFS,2))& (AFS(i+1,j+1)~=3)&(AFS(i+1,j+1)==loai)) lienthong(i+1,j+1,loai);end 9) Vebien function vebien(MLT,N,loai) global anh;

m=size(MLT,1); % chieu cao

n=size(MLT,2); % chieu rong

MLTF=zeros(m+4,n+4);

MLTF(3:m+2,3:n+2)=MLT; % de da bao kong bi vuot bien %MLTF

for i=3:m+1 % tim diem den dau tien

for j=3:n+1 if (MLTF(i,j)==1)break end end if (MLTF(i,j)==1)break end end %%%%%%%%%%%%%%%

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

99 GVHD: PGS. TS. Ngô Quốc Tạo

% 1: len % 2: phai % 3: xuong % 4: trai

%%%%%%%%%%%%%%% thuat toan do bien

huong=2; gocx=i; gocy=j; hanhcu=i; cotcu=j; j=j+1;

while (~((i==gocx)&(j==gocy))) % khong phai diem dau

if MLTF(i,j)==0 % diem trang thi lui lai re phai

switch huong

case 2 % huong phai

j=j-1; i=i+1;

huong=3; % huong xuong

case 3 % huong xuong

i=i-1; j=j-1;

huong=4; % huong trai

case 4 % huong trai

j=j+1; i=i-1;

huong=1; % huong len

case 1; % hung len

i=i+1; j=j+1; huong=2; end

else% gap diem den thi ve va re trai

% ve bien hang1=(i-2)*N+1; hang2=(i-1)*N+1; cot1=(j-2)*N+1; cot2=(j-1)*N+1; if (loai==1) anh(hang1:hang2,cot1:cot2,2:3)=150; else anh(hang1:hang2,cot1:cot2,1)=50; anh(hang1:hang2,cot1:cot2,3)=50; end

% thuc hien re trai

switch huong case 1

j=j-1; % re trai voi huong len

huong=4; case 2

i=i-1; % re trai voi huong phai

huong=1; case 3

j=j+1; % re trai voi huong xuong

huong=2; case 4

i=i+1; % re trai voi huong trai

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

100 GVHD: PGS. TS. Ngô Quốc Tạo

end end

Một phần của tài liệu Luận văn: Nhận dạng chữ viết và phân tích trang tài liệu docx (Trang 91 - 106)

Tải bản đầy đủ (PDF)

(106 trang)