Thuật toán FS là một thuật toán hay vì không phụ thuộc vào font chữ, tuy
nhiên trong giới hạn đề này chưa trình bày và cài đặt hoàn thiện được.
Chương trình thử nghiệm phân tích định dạng của trang ảnh tài liệu trên còn rất
thô sơ, chủ yếu là dùng để mô tả cho phần lý thuyết phân tích định dạng trang ảnh tài
liệu. Chương trình chỉ phân tích từng trang ảnh tài liệu và phải điều chỉnh bằng tay
nhưng kết quả thật khả quan.
106 trang |
Chia sẻ: lylyngoc | Lượt xem: 2308 | Lượt tải: 0
Bạn đang xem trước 20 trang 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
là phân tich đƣa ra cấu trúc vật lý của ảnh đầu vào là ảnh
đa cấp xám có độ phức tạp cao sử dụng thuật toán Fractal Signature. Đồng thời triên khai
cả thuật toán Top-down nhằm so sánh vơi thuật toán Fractal Signature
III.1. Yêu cầu hệ thống
Theo nhƣ phần lựa chọn giải pháp (II.2) thì đề tài tập trung vào việc triển khai
phƣơng pháp phân tích Fractal Signature và để có thể so sánh hiệu quả của FS thì chƣơng
trình thử nghiệm sẽ cài đặt thêm phƣơng pháp Top-down. Với mục đích này thì những
yêu cầu cho chƣơng trình nhƣ sau:
- Cho phép chọn phân tích ảnh theo thuật toán FS hoặc Top-down
- Cho phép tùy chọn ảnh đa cấp xám đầu vào dạng *.jpg
- Ảnh kết quả đã khoanh vùng các vùng văn bản hoặc đồ họa
- Tự động lọc và làm trơn nhiễu ảnh đầu vào trƣớc khi phân tích
- Chƣơng trình đƣợc cài đặt trên MatLab v7.0
III.2. Thiết kế chƣơng trình
III.2.1. Cấu trúc dữ liệu
- 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
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
47 GVHD: PGS. TS. Ngô Quốc Tạo
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
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
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
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
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
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
50 GVHD: PGS. TS. Ngô Quốc Tạo
% 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
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
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
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
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
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
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
54 GVHD: PGS. TS. Ngô Quốc Tạo
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 hinh chieu ngang
i=start;
start_t=i;
limit_t=i;
while (i<=chieucao)
while (i(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_tstart_t)
if limit_t>chieucao
limit_t=chieucao; % tranh vuot qua vung bien anh
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
55 GVHD: PGS. TS. Ngô Quốc Tạo
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):
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
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));
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
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)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:
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
58 GVHD: PGS. TS. Ngô Quốc Tạo
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);
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
59 GVHD: PGS. TS. Ngô Quốc Tạo
(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);
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
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ó:
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
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 đó:
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
62 GVHD: PGS. TS. Ngô Quốc Tạo
- 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.
III.3. Kết luận và đánh giá kết quả
- Chƣơng trình demo đã đƣợc xây dựng để làm việc với ảnh đa cấp xám
- Thuật toán Top-Down đƣợc cài trong chƣơng trình làm việc rất hiệu quả với các
loại tài liệu có cấu trúc đơn giản, tốc độ thực hiện ổn định (Hình 34, 35, 36).
- Đúng nhƣ nhƣợc điểm của Top-down đã nói ở chƣơng 2, top-down kém hiệu quả
với các loại tài liệu có cấu trúc phức tạp hay bị nghiêng (Hình 37, 38, 39, 40).
- Thuật toán Fractal Signature đặc biệt hiệu quả với những tài liệu có cấu trúc phức
tạp, không phân biệt hƣớng tài liệu, với các tài liệu bị nghiêng FS vẫn có thể
khoanh vùng chính xác vùng Text và đồ họa (Hình 41, 42, 43, 44)
- Nhƣợc điểm của FS trong chƣơng trình này chƣa giải quyết đƣợc là tốc độ làm
việc chậm và thuật toán khoanh vùng làm việc hiệu quả chƣa cao.
- Một số yếu tố ảnh hƣởng đến hiệu quả của FS đó là việc chọn kích thƣớc của
Block, chọn Block phải hợp lý tốt nhất nhất là ba đủ 1 ký tự thì kết quả phân tích
sẽ cao. Tuy nhiên với các loại trang có nhiều loại size chữ thì điều này là khó khả
thi.
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
63 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 34: Kết quả phân tích của top-down trên tài liệu có cấu trúc đơn giản
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
64 GVHD: PGS. TS. Ngô Quốc Tạo
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
65 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 35: Kết quả phân tích của top-down trên tài liệu có cấu trúc bảng
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
66 GVHD: PGS. TS. Ngô Quốc Tạo
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
67 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 36: : Kết quả phân tích của top-down trên tài liệu thuần văn bản
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
68 GVHD: PGS. TS. Ngô Quốc Tạo
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
69 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 37: : Kết quả phân tích của top-down trên tài liệu có cấu trúc phức tạp (trang tạp trí)
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
70 GVHD: PGS. TS. Ngô Quốc Tạo
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
71 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 38 : Kết quả phân tích của top-down trên một tờ quảng cáo
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
72 GVHD: PGS. TS. Ngô Quốc Tạo
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
73 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 39: Kết quả phân tích của top-down trên tài liệu có cấu trúc phức tạp
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
74 GVHD: PGS. TS. Ngô Quốc Tạo
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
75 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 40: Kết quả phân tích của top-down trên tài liệu bị nghiêng
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
76 GVHD: PGS. TS. Ngô Quốc Tạo
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
77 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 41: Kết quả phân tích của FS trên tài liệu bị nghiêng
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
78 GVHD: PGS. TS. Ngô Quốc Tạo
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
79 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 42: Kết quả phân tích của FS trên tài có cấu trúc phức tạp
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
80 GVHD: PGS. TS. Ngô Quốc Tạo
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
81 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 43: Kết quả phân tích của FS trên một trang quảng cáo
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
82 GVHD: PGS. TS. Ngô Quốc Tạo
Hình 44: Kết quả phân tích của FS trên tài liệu đơn giản
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
83 GVHD: PGS. TS. Ngô Quốc Tạo
Kết luận
Qua nhiều mẫu ảnh phân tích cho thấy thuật toán FS lầm việc rất hiệu quả về
nhiệm vụ phát hiện vùng văn bản hay vùng đồ họa, tỉ lệ gần nhƣ tƣơng ứng với phần
mềm ABBYY FineReader 9.0, và hơn hẳn OminiPage, VNDocr.
Đặc biệt là chƣơng trình đã đƣợc cài đặt để làm việc thành công với ảnh đầu vào
là ảnh đa cấp xám và có độ phức tạp cao.
Thuật toán FS là một thuật toán hay vì không phụ thuộc vào font chữ, tuy
nhiên trong giới hạn đề này chƣa trình bày và cài đặt hoàn thiện đƣợc.
Chƣơng trình thử nghiệm phân tích định dạng của trang ảnh tài liệu trên còn rất
thô sơ, chủ yếu là dùng để mô tả cho phần lý thuyết phân tích định dạng trang ảnh tài
liệu. Chƣơng trình chỉ phân tích từng trang ảnh tài liệu và phải điều chỉnh bằng tay
nhƣng kết quả thật khả quan.
Để đƣa chƣơng trình áp dụng thực tế trên còn phải qua một đoạn đƣờng dài nữa,
tuy nhiên với kết quả này của công đoạn đầu tiên trong quá trình “lưu trữ thông tin trên
tài liệu giấy theo cách máy tính có thể hiểu và xử lý được” thì các công đoạn nhận dạng
chữ sau này sẽ dễ dàng hơn rất nhiều.
Hƣớng phát triển đề tài:
- Cải tiến thuật toán FS chạy nhanh hơn.
- Cài đặt FS trên ảnh mầu.
- Phát triển tiếp module nhận dạng ký tự.
- Tích hợp thành phần mềm hoàn chỉnh.
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
84 GVHD: PGS. TS. Ngô Quốc Tạo
TÀI LIỆU THAM KHẢO
Tiếng việt
[2]. Lƣơng Mạnh Bá, Ngô Thanh Thủy(1999). Nhập môn xử lý ảnh số : Nhà xuất bản
khoa học kỹ thuật, Hà Nội. Chƣơng 4, Tr. 83-87.
[8]. PGS. TS. Ngô Quốc Tạo (2008). Xử lý và nhận dạng ảnh : Bài giảng cao học, Viện
Công nghệ Thông tin. Hà Nội.
Tiếng Anh
[6].Anoop M. Namboodiri and Anil K. Jain, Document Structure and Layout Analysis,
Michigan State University, East Lansing, MI-48824, USA, pp. 31-34, 38-41.
[7].Jiming Lui, Yuan Y Tang, Ching Y Suen (1997), Chinese document layout
analysic based on adaptive Split-and-Merge and qualitation spatial reasoning, Elsevier
Science, Oxford, ROYAUME-UNI, pp. 4-9.
[3].MathWorks (1997), Image Processing Toolbox User’s Guide. MathWorks, 1997.
[5]. Sadhana (2002), Document image analysis: A primer, India, pp. 3-7.
[4].TANG, Yuan Y (2000), Documnet analysis and recogniton by computers. Handbook
of Pattern recognition and computer vision, World Scientific Company, pp. 1-15.
[1].Yuan Y. Tang, Hong Mat, Xiaogang Maot, Dan Liu and Ching Y. Suen (1997), A
New Approach to Document Analysis Based on Modified Fractal Signature, Washington,
DC, USA : IEEE Computer Society.
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
85 GVHD: PGS. TS. Ngô Quốc Tạo
Phục Lục
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.
demoFS.m
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
86 GVHD: PGS. TS. Ngô Quốc Tạo
A.2. Sơ khối liên kết giữa các thủ tục trong chƣơng trình
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
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
87 GVHD: PGS. TS. Ngô Quốc Tạo
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(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 (startstart)
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
y=conv2(y,k);
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
88 GVHD: PGS. TS. Ngô Quốc Tạo
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));
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(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 (startstart)
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)
%%%%%%%%%%%%%%%
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
89 GVHD: PGS. TS. Ngô Quốc Tạo
global letraicu;
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
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
90 GVHD: PGS. TS. Ngô Quốc Tạo
if lephai>bienphai
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 (icuctieu)
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
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
91 GVHD: PGS. TS. Ngô Quốc Tạo
i=start;
start_t=i;
limit_t=i;
while (i<=chieucao)
while (i(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_tstart_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
%anh = filter2(fspecial('average',3),anh);
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
92 GVHD: PGS. TS. Ngô Quốc Tạo
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);
%%%%%%%%%%%%%%%%%%%%%%
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);
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
93 GVHD: PGS. TS. Ngô Quốc Tạo
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;
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
if (chieurong/N)>round(chieurong/N)
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
94 GVHD: PGS. TS. Ngô Quốc Tạo
chieurong=round(chieurong/N)*N+N;
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
g1_u=block_k(ki,kj)+1;
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
95 GVHD: PGS. TS. Ngô Quốc Tạo
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
% 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);
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
96 GVHD: PGS. TS. Ngô Quốc Tạo
if(sum(sum(MLT))>20 ) % bo qua vung lien thong qua nho
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
%anh(i,j)=255-anh(i,j);
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
97 GVHD: PGS. TS. Ngô Quốc Tạo
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=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;
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
98 GVHD: PGS. TS. Ngô Quốc Tạo
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);
% 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)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
%%%%%%%%%%%%%%%
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
99 GVHD: PGS. TS. Ngô Quốc Tạo
% quy dinh huong
% 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
huong=3;
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
100 GVHD: PGS. TS. Ngô Quốc Tạo
end
end
end
Các file đính kèm theo tài liệu này:
- Luận văn- Nhận dạng chữ viết và phân tích trang tài liệu.pdf