Thiết kế chương trình

Một phần của tài liệu Nhận dạng chữ viết và phân tích trang tài liệu (Trang 26 - 34)

Chương III: XÂY DỰNG CHƯƠNG TRÌNH THỬ NGHIỆM

III.2. Thiết kế chương trình

- Cấu trúc vùng nhớ lưu ảnh:

Ảnh đầu vào là ảnh đa cấp xám dạng *.jpg, sau khi đƣợc tải vào bộ nhớ sẽ đƣợc giải mã và chuyển sang dạng ma trận điểm ảnh (quá trình này đƣợc thực hiện tự động khi sử dụng hàm đọc ảnh trong matlab).

*.jpg Gray Image

Lọc và làm trơn nhiễu

Phân tích cấu trúc vật lý

Ảnh ra đã khoanh vùng vă bản và đồ họa Tùy chọn FS

hoặc Top-down

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

Như vậy về mặt logic thì cấu trúc vùng nhớ sử dụng để lưu ảnh là một mảng hai chiều Im x n có kích thước (m x n) phần tử.

Image = { I[i,j], i = 1..m, j = 1..n}

Trong đó I[i,j] là giá trị độ xám của điểm ảnh tương ứng với tọa độ (i,j) trong ảnh

Thông thường với ảnh đa cấp xám thì giá trị độ xám của mỗi điểm ảnh nằm trong khoảng [0..255], như vậy kích thước tối thiểu cho mỗi I[i,j] là 1Byte.

Chương trình sẽ sử dụng mảng có thuộc tính như sau để lưu trữ ảnh:

- Mảng I hai chiều với I[i,j] kiểu Byte (Max(I[i,j])=255)

- Kích thước của mảng là m x n với m là chiều cao của ảnh, n chiều rộng của ảnh và m, n kiểu Double (max(m/n)=232)

36 26 80 60 90 15 14 53 81 65 16 49 85 65 73 18 8 68 71 27 28 35 93 39 7 12 96 1 29 10 35 64 85 22 68 91 69 33 44 52 63 80 30 89 18 93 60 58 97 98 89 11 40 17 15 8 15 22 42 98 34 92 87 79 72 44 35 39 39 24 86 50 56 45 87 92 19 27 46 53 11 94 52 54 83 71 98 7 72 64 27 41 58 31 26 60 37 18 4 56 4 91 86 79 11 73 14 96 19 7 13 75 2 21 50 38 57 91 19 3 22 50 65 97 81 50 30 7 76 86 87 74 82 18 81 81 60 21 88 59 92 8 66 49 71 95 72 76 61 26 33 55 25 80 91 72 Ảnh

Ma trận điểm ảnh

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

48 GVHD: PGS. TS. Ngô Quốc Tạo - Cấu trúc lưu trữ lược đồ xám (kết quả của các phép chiếu nghiêng).

Phép chiếu nghiêng là đi tính tổng các điểm đen theo phương vuông góc với hướng chiếu. Kết quả của phép chiếu sẽ được lưu trữ vào một mảng một chiều H có kích thước d phần tử. Trong dó H[i] (với i = [1..d]) là tổng số điểm đen của cột thứ i theo phương chiếu.

III.2.2. Module chuẩn hóa ảnh

Thuật toán FS tính giá trị FS cho từng khối Block trong ảnh, vì thế cần phải chia ảnh thành các block có kích thước bằng nhau trước khi thực hiện thuật toán. Giả thiết kích thước của mỗi Block là (k x q), để việc tính FS cho các block không gặp trường hợp đặc biệt (Kích thước ảnh không bằng nguyên lần của Block) ta sẽ nối thêm vào chiều ngang và dọc của ảnh vùng nền đủ để sao cho kích thước ảnh mới bằng một số nguyên lần của Block.

.. .. .. .. .. .. 1 Byte

m (Double)

n (Double)

Ảnh I

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

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

Giải thuật:

Input:

- Ảnh I có kích thước m x n

- Block có kích thước k x q (k,q<m,n)

Output: Ảnh I có kích thước m’ x n’ sao cho m’ = i*k và n’ = j*q (với i,j € N) Thuật toán:

B1: Tính m’

Nếu (m/k = nguyên (m/k)) thì m’=m;

Trái lại m’ = nguyên (m/k))*k + k;

B2: Tính n’

Nếu (n/q = nguyên (n/q)) thì n’=n;

Trái lại n’ = nguyên (n/q))*q + q;

Mã nguồn

(Mã nguồn cho module chuẩn hóa cài đặt trong Matlab) Ảnh gốc

Phần dƣ không đủ 1 block

Phần nền bổ xung cho đủ 1 block Block

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

% 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

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

Luận văn tốt nghiệp cao học Học viên: Nguyễn Văn Huy

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

51 GVHD: PGS. TS. Ngô Quốc Tạo III.2.3. Module giao diện chính

Giao diện chính đƣợc thiết kế đơn giản với một số chức năng chính nhƣ sau:

Vùng hiển thị ảnh gốc Vùng hiển thị ảnh kết quả

Chọn ảnh mới

Chọn phân tích kiểu Top-down

Chọn phân tích kiểu FS

Mô phỏng FS

Hình 33: Giao diện chính

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

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

Mã nguồn:

Một số mã nguồn sự kiện cho các Button chính trên giao diện chính (cài dặt trong Matlab)

- Button chọn ảnh:

- Button Top-Down

- Button Fractal Signature

III.2.4. Module phân tích Top-down (TD)

Thuật toán phân tích TD đƣợc thiết kế theo kiểu đệ quy, và cần tham số chiều cao của font chữ. Để tính chiều cao của font chữ có 2 giải pháp

- Một là cho phép người sử dụng nhập vào.

- Hai là tự động dò theo thuật toán sau:

B1: Tính lược đồ chiếu nghiên theo phước thẳng đứng

B2: Tìm độ rộng xuất hiện nhiều nhất của các “cột” trong lƣợc đồ chiếu nghiêng, đây xấp xỉ bằng chiều cao của font chữ.

function pushbutton3_Callback(hObject, eventdata, handles) imshow('anhmau\running.jpg')

pause(0.5)

filename=get(handles.path,'string');

Fsign % Gọi chương trình con Fractal signature clear all

function pushbutton2_Callback(hObject, eventdata, handles) imshow('anhmau\running.jpg')

pause(0.5)

filename=get(handles.path,'string');

topdown % Gọi chương trình con TOPDOWN clear all

function pushbutton1_Callback(hObject, eventdata, handles)

% Hop thoai chon uong dan?

[fname,pname] = uigetfile('*.jpg','Hay chon mot anh da cap xam');

if fname~=0 % da chon 1 file

set(handles.path,'String',[pname,fname]); % hien thi duong dan cua file anh axes(handles.anhgoc);

imshow([pname,fname]);

axes(handles.anhdich);

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

53 GVHD: PGS. TS. Ngô Quốc Tạo Trong đề tài này việc xác định chiều cao được dò tự động theo phương pháp trên.

Giải thuật Top-Down

Input: Ảnh đa cấp xám I kích thước m x n, chiều cao font chữ k Output: Ảnh đã đƣợc phân đoạn văn bản và đồ họa.

Thuật toán:

Proceduce Topdown (I,x,y,m,n,k) // I là ảnh đầu vào, m và n là kích thước vùng ảnh // k chiều cao font chữ

// x,y là tọa độ hàng và cột // của điểm ảnh góc trái trên cùng Begin

B1: Tính lƣợc đồ chiếu đứng cho ảnh I đƣợc kết quả là mảng A gồm m phần tử B2: Xác định các “cột” trên lƣợc đồ A

For (mỗi cột(i) trong lƣợc đồ A) do IF độ rộng cột(i) ≈ k then

Khoanh vùng trên ảnh tại vị trí của cột(i) chiều dài n là vùng văn bản;

Else

IF độ rộng côt(i) > k then Thuật toán phân tích TD đƣợc thiết kế theo kiểu đệ quy, và cần tham số chièu cao của font chữ.

Thuật toán phân tích TD đƣợc thiết kế theo kiểu đệ quy, và cần tham số chièu cao của font chữ.

~k

~k

~k

~y

Thành phần độ rộng ≈k xuất hiện nhiều nhất => k là chiều cao của font chữ

Ảnh vào Lƣợc đồ chiếu đứng

Cột

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

B2.1: Tính lƣợc đồ chiếu ngang cho vùng ảnh chứa cột(i) đƣợc kết quả là mảng B gồm n phần tử

B2.2: Xác định các cột trên B

IF nếu số cột của A = 1 và số cột của B = 1 then khoanh vùng là Ảnh;

Else

For mỗi Cột(j) trên B do

TopDown(I, x(cột(i)), y(cột(j)), độ rộng(cột(i)), độ rộng(cột(j)), k);

End for End if End if End if End for End

Mã nguồn:

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 hinhchieu ngang i=start;

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

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 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;

III.2.5. Module phân tích Fractal Signature

Giải thuật Fractal Signature

Input: Ảnh đa cấp xám I, kích thước block m x n Output: Ảnh đã phân đoạn văn bản và đồ họa Thuật toán:

B1: Chuẩn hóa kích thước ảnh được I’ (trình bày ở phần IV.2.2) B2: Lọc và làm trơn nhiễu

B3: Tách nền ra khỏi nội dung ảnh B4:

Chia ảnh I’ thành q Block có kích thước (m x n) For (mỗi Block(i) của I’) Do

B4.1: Chọn ∂ = 1

 Tính giá trị lớp trên của block(i):

 Tính giá trị lớp dưới của block(i)

 Tính thể tích của Blanket

B4.2: Chọn ∂ = 2

 Tính giá trị lớp trên của block(i):

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

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

 Tính giá trị lớp dưới của block(i)

 Tính thể tích của Blanket

(với x,y thuộc Block(i)) B4.3: Tính FS(Block(i)) = End for

B5: Chọn ngƣỡng phân tách vùng nền, văn bản và đồ họa

Mã nguồn:

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));

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

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

%%%%%%%%%%%%%%%% 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;;

anh=cat(3,anh,anh,anh);

nguong=min(FS)+50;

for i=1:round(chieucao/N) for(j=1:round(chieurong/N)) k=k+1;

if (FS(k)<nguong)|(FS(k)>4000) % text for ki=1:N

for kj=1:N

anh((i-1)*N+ki,(j-1)*N+kj,:)=255-anh((i-1)*N+ki,(j-1)*N+kj);

end end else % vung anh for ki=1:N for kj=1:N

anh((i-1)*N+ki,(j-1)*N+kj,1)=150;

anh((i-1)*N+ki,(j-1)*N+kj,3)=150;

end end end end end

III.2.6. Module lọc và làm trơn nhiễu

Có rất nhiều kỹ thuật lọc nhiễu, tuy nhiên nhƣ đã trình bày ở phần II.1.4 bản chất của FS có thể coi nhƣ đi xác định đặc trƣng độ nhám của các bề mặt thuộc vùng nền, văn bản hay đồ họa. Để nhiễu bớt ảnh hưởng đến đặc trưng này thì giải pháp làm trơn nhiễu là hiệu quả nhất nhằm làm cho các điểm ảnh gần nhau có đặc tính tương tự nhau. Điều này sẽ làm cho độ nhám mà nhiễu gây ra là không đáng kể.

Trong đề tài này sử dụng phương pháp lọc thông thấp[2] với ma trận cuộn sau:

Mã nguồn:

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

III.2.7. Module mô phỏng thuật toán FS

Module mô phỏng thuật toán FS chỉ mang tính nghiên cứu quá trình làm việc của Fractal Signature. Về mặt thuật toán giống nhƣ III.2.5 chỉ khác không cần tính thể tích của các Blanket đƣợc tạo ra mà tiến hành vẽ các blanket đó trong không gian 3D.

Giải thuật:

Input: Ảnh đa cấp xám I, kích thước block m x n Output: Demo

Thuật toán:

B1: Chuẩn hóa kích thước ảnh được I’ (trình bày ở phần IV.2.2) B2: Lọc và làm trơn nhiễu

B3: Tách nền ra khỏi nội dung ảnh B4:

Chia ảnh I’ thành q Block có kích thước (m x n) For (mỗi Block(i) của I’) Do

B4.1: Chọn ∂ = 1

 Tính giá trị lớp trên của block(i):

 Tính giá trị lớp dưới của block(i)

B4.2: Chọn ∂ = 2

 Tính giá trị lớp trên của block(i):

 Tính giá trị lớp dưới của block(i)

%%%%%%% mat na loc loc=[0 1 0;1 2 1;0 1 0];

loc=1/8*loc;

%%%%%%% dung ham loc anh=conv2(anh,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

(với x,y thuộc Block(i))

B4.3: Vẽ các Blanket trong không gian 3D End for

Mã nguồn:

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 va anh 3D

trucx=[1:N+2];

trucy=[1:N+2];

meshgrid(trucx,trucy);

% axes(handles.anhgoc);

subplot(2,2,1);

anhtem=goc;

anhtem((i-1)*N+1:(i-1)*N+N,(j-1)*N+1:(j-1)*N+N)=0;

imshow(anhtem);

subplot(2,2,2);

%axes(handles.uper);

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

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

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) end end

III.2.8. Các hàm chức năng chính của image processing tool trong matlab sử dụng trong chương trình

Image Processing Toolbox là một thư viện các hàm chức năng về xử lý ảnh tương thích trong môi trường MatLab. Các hàm

trong thƣ viên có thể phân loại theo chức năng nhƣ sau:

- Các phép toán hình thái

- Các phép toán trên các khối hay các vùng liên thông

- Thiết kế và lọc tuyến tính

- Chuyển đổi kiểu và không gian ảnh - Nâng cao chất lƣợng ảnh

- Các phép toán trên ảnh nhị phân - …

Một số hàm chức năng sử dụng trong chương trình[3]

a) Hàm đọc và ghi ảnh

Hàm đọc: Đọc một ảnh với đường dẫn chỉ ra, kết quả trả về là một ma trận điểm ảnh.

Cú pháp:

imread(filename,fmt);

Trong dó:

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

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

 Filename: là xâu chỉ ra đường dẫn và tên file ảnh cần đọc

 Fmt: Định dạng của ảnh đƣợc đọc Các giá trị của “fmt” theo bảng sau:

Hàm ghi ảnh: Ghi ảnh ra một file Cú pháp:

imwrite(A,filename,fmt)

Ghi một ảnh trong biến mảng A với tên file là “filename” theo định dạng “fmt”

Trong đó:

- A: Vùng nhớ lưu trữ ảnh - Filename: Tên file cần ghi - Fmt: Định dạng file ảnh đầu ra

Hàm hiển thị ảnh Cú pháp:

imshow(I); %hiển thị ảnh I Trong đó:

I: Vùng nhớ chứa ảnh cần hiển thị

Hàm nhân chập: (để thực hiện lọc thông thấp làm trơn nhiễu) Cú pháp:

C = conv2(A,B)

Nhân chập mặt nạ B với ma trận A kết quả là ma trận C Trong đó:

A: Ma trận nguồn B: Mặt nạ chập C: Ma trận kết quả

Hàm chuyển ảnh từ RGB sang ảnh đa cấp xám Cú pháp:

I = rgb2gray(RGB)

Chuyển đổi ảnh “RGB” từ hệ mầu Red-Green-Blue sang ảnh đa cấp xám Trong đó:

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

- RGB: là ảnh nguồn - I: ảnh kết quả

Hàm vẽ mặt trong không gian 3D Cú pháp:

surf(X,Y,Z); %vẽ mặt một bề mặt trong không gian X,Y,Z Trong đó:

- X: mảng một chiều chƣa các điểm của trục x - Y: mảng một chiều chứa các điểm của trục y

- Z: mảng 2 chiều chƣa các giá trị của trục Z trong mặt phẳng XY.

Một phần của tài liệu Nhận dạng chữ viết và phân tích trang tài liệu (Trang 26 - 34)

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

(53 trang)