Tải bản đầy đủ (.doc) (35 trang)

TÀI LIỆU ĐỒ ÁN XỬ LÝ ẢNH BIỂN SỐ XE SỬ DỤNG PHẦN MỀM MATLAB GUIDE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1 MB, 35 trang )

XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Trường Đại Học Giao Thông Vận Tải
TP. Hồ Chí Minh

ĐỒ ÁN MÔN XỬ LÝ ÂM THANH VÀ HÌNH
ẢNH
ĐỀ TÀI:
XỬ LÝ ẢNH BIỂN SỐ XE BẰNG PHẦN MỀM MATLAB
GVHD: CHU HỒNG HẢI
SVTH: TRẦN NHỰT TÂN TD15A
TP.HCM , Ngày……Tháng……Năm 2019.

Page | 0
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Mục lục
Trang bìa phụ ...................................................................................................
Mục lục ..................................................................................................................1
Nhận xét của giáo viên.............................................................................................
2

Lời mở đầu.........................................................................................................................
3

Chương 1: GIỚI THIỆU VỀ ĐỀ TÀI........................................................
4


1.1.Lý do chọn đề tài..............................................................................................................
5

1.2.Nội dung đề tài.................................................................................................................
5

1.3.Giới hạn đề tài...................................................................................................................
6

1.4. Mục tiêu............................................................................................................................
7

Chương 2: CÁC DẠNG ẢNH CƠ BẢN...................................................
8

2.1.Ảnh Index
........................................................................................................................................
8

2.2.Ảnh grayscale
........................................................................................................................................
9

2.3.Ảnh nhị phân
........................................................................................................................................

9
2.4.Ảnh RGB
........................................................................................................................................


10

Chương 3: XỬ LÝ ẢNH BIỂN SỐ XE.....................................................
11

3.1.Tổng quan về tải ảnh lên để xử lý

Page | 1
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
........................................................................................................................................
11

3.2.Tổng quan về tách biển số
........................................................................................................................................
12

3.3.Tổng quan về nhận dạng ký tự và số
........................................................................................................................................

13

Chương 4: THỰC HIỆN ĐỀ TÀI TRÊN MATLAB..................
18
4.1. Giới thiệu giao diện gui
.........................................................................................................................................

18

4.2. Tạo giao diện gui
.........................................................................................................................................

18
4.3. Code của chương trình matlab
.........................................................................................................................................

20

NHẬN XÉT CỦA GIẢNG VIÊN
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
Page | 2
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................

.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
TP.HCM , Ngày……Tháng……Năm 2019.
Chữ ký giảng viên

Lời mở đầu

Page | 3

GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
Xử lý và nhận dạng là một lĩnh vực từ lâu được nhiều người quan tâm.
Nó đã được ứng dụng vào nhiều lĩnh vực như:
 Trong y học, cải thiện ảnh X-quang và nhận dạng đường biên
mạch máu từ ảnh chụp bằng tia X , ứng dụng vào các xét nghiệm lâm sang
như phát hiện và nhận dạng u não, nội soi cắt lớp…


Trong thiên văn học, hệ thống chụp hình gắn trên tàu vũ trụ

hạn chế về kích thước và trọng lượng, do đó chất lượng hình ảnh nhận được
bị giảm chất lượng như bị mờ, méo hình học và nhiễu nền. Các hình ảnh đó
được xử lý bằng máy tính.


Trong các lĩnh vực công nghiệp, người máy ngày càng đóng

vai trò quan trọng. Chúng thực hiện các công việc nguy hiểm, đòi hỏi có tốc
độ và độ chính xác cao vượt quá khả năng con người. Người máy sẽ trở nên
tinh vi hơn và thị giác máy tính đóng vai trò quan trọng hơn. Người ta sẽ
không chỉ đòi hỏi người máy phát hiện và nhận dạng các bộ phận công nghiệp
mà còn phải “ hiểu ” được những gì chúng “ thấy ” và đưa ra hành động phù
hợp. Xử lý ảnh sẽ tác động đến thị giác của máy tính.


Ngoài ra, xử lý và nhận dạng còn được ứng dụng trong lĩnh


vực khác ít được nói đến hơn. Công an giao thông thường hay chụp ảnh trong
môi trường không thuận lợi, ảnh thường bị nhòe nên cần được xử lý và nhận
dạng để có thể nhìn thấy biển số xe.
Trong báo cáo này nhóm em xin trình bày một ứng dụng của xử lý và
nhận dạng số là XỬ LÝ ẢNH BIỂN SỐ XE.

Chương 1: GIỚI THIỆU VỀ ĐỀ TÀI
Page | 4
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
1.1.Lý do chọn đề tài:
Cùng với sự phát triển khoa học kỹ thuật, nhu cầu đi lại của con người
ngày càng tăng, lưu lượng giao thông ngày càng lớn. Với số lượng phương
tiện giao thông ngày càng lớn và còn không ngừng tăng thì việc quản lý các
phương tiện giao thông gặp rất nhiều khó khăn do đó cần có một hệ thống tự
động. Một trong những hệ thống đó là hệ thống nhận dạng biển số xe. Đó là
một hệ thống có khả năng “đọc” và “hiểu”các biển số xe một cách tự động.
Trong đồ án này, nhóm đã xây dựng hệ thống để quản lý bãi giữ xe bởi
vì các bãi giữ xe hiện nay còn có vấn đề bất cập như:
 Tốn nhiều nhân công.
 An toàn chưa cao, vẫn còn xảy ra hiện tượng mất xe.
 Vé xe bằng giấy, dễ bị mất hay nhàu nát.

1.2 Nội dung đề tài

BẮT ĐẦU

TẢI ẢNH


GVHD: CHU HỒNG HẢI

Page | 5


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

SAI (ẢNH FULL)

ẢNH BSX

CẮT ẢNH

ĐÚNG

LÀM XÁM ẢNH

NHỊ PHÂN ẢNH

NHẬN DẠNG KÍ TỰ

XUẤT KẾT QUẢ

KẾT THÚC

Sơ đồ quá trình nhận dạng
 Thu nhập ảnh: ảnh được tải lên từ máy tính .
Khi ảnh được tải lên. Có 2 trường hợp xảy ra đó là :
+ Ảnh toàn bộ là biển số xe. Ở trường hợp nay ta xử lý trực tiếp.

+ Ảnh full gồm xe, biển số xe, ngoại cảnh v.v . Ở trường hợp này ta
phải qua bước cắt ảnh để loại bỏ bớt các yếu tố dẫn đến sai lệch ở quá
trình nhận dạng.
Page | 6
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
 Cắt ảnh: ảnh full sẽ được sử lý ở bước này nhằm loại bỏ các yếu tố làm
sai lệch cho quá trình nhận dạng. Để bức ảnh ở trạng thái tốt nhất cho
quá trình xử lý.
 Làm xám ảnh: đưa bức ảnh màu về dạng ảnh xám.
 Nhị phân ảnh: Sau khi xám ảnh ta lấy loại bỏ các phần mờ không rõ
ràng bằng cách lấy nhị phân ảnh. Việc xử lý này giúp nhận dạng ký tự
một cách chuẩn xác hơn.
 Nhận dạng kí tự : nhận dạng các kí tự của biển số bằng phương pháp
nhận dạng kí tự quang học (OCR).
 Kết quả nhận dạng: đưa ra kết quả nhận dạng biển số.
1.3.Giới hạn đề tài:
Việc có nhiều biển số xe với định dạng và độ sáng khác nhau gây khó
khăn cho việc nhận dạng. Do quá trình nhận dạng dựa vào phương pháp xử lý
ảnh và trích xuất biển số từ ảnh chụp nên độ sáng khác nhau làm tăng độ phức
tạp trong quá trình nhận dạng.
Do thời gian thực hiện đề tài không cho phép nên nhóm giới hạn các
biển số và điều kiện như sau:
 Biển số có chữ đen, nền trắng, có 2 hàng.
 Biển số phải còn nguyên vẹn, không bị tróc sơn hay rỉ sét, không bị che
khuất.
 Góc nghiêng của biển số không quá 450 so với phương ngang.
 Hình chụp biển số không bị mờ, ký tự biển số còn phân biệt, nhận dạng

được bằng trực quan.
 Không bị nhiễu bởi ánh sáng làm ảnh chụp bị chói.

1.4 Mục tiêu :
-

Nhận dạng được biển số xe: 5 số , 4 số cả xe hơi và xe máy.
Ảnh chụp từ điện thoại.
Giao diện đẹp.
Xử lý được cả ảnh biển số và ảnh full.
Sử dụng phần mềm matlab.
Page | 7

GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Chương 2: CÁC DẠNG ẢNH CƠ BẢN
2.1 Ảnh Index
Ảnh được biểu diễn bởi hai ma trận, một ma trận dữ liệu ảnh X và một
ma trận màu (còn gọi là bản đồ màu) map. Ma trận dữ liệu có thể thuộc kiểu
uint8, uint16 hoặc double. Ma trận màu là một ma trận kich thước m x 3 gồm
các thành phần thuộc kiểu double có giá trị trong khoảng [0 1]. Mỗi hàng của
ma trận xác định thành phần red, green, blue của một màu trong tổng số m
màu được sử dụng trong ảnh. Giá trị của một phần tử trong ma trận dữ liệu
ảnh cho biết màu của điểm ảnh đó nằm ở hàng nào trong ma trận màu.

2.2 Ảnh grayscale:
Mỗi ảnh được biểu diễn bởi một ma trận hai chiều, trong đó giá trị của

mỗi phần tử cho biết độ sang (hay mức xám) của điểm ảnh đó. Ma trận này có
thể một trong các kiểu uint8, uint16 hoặc double. Ảnh biểu diễn theo kiểu này
còn gọi là ảnh „trắng đen‟.
Page | 8
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

2.3 Ảnh nhị phân:
Ảnh được biểu diễn bởi một ma trận hai chiều thuộc kiểu logical. Mỗi
điểm ảnh chỉ có thể nhận một trong hai giá trị là 0 (đen) hoặc 1 (trắng)

2.4 Ảnh RGB:
Còn gọi là ảnh “truecolor” do tính trung thực của nó. Ảnh này được biểu
diễn bởi một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước
ảnh theo pixels. Ma trận này định nghĩa các thành phần màu red, green, blue
cho mỗi điểm ảnh, các phần tử của nó có thể thuộc kiểu uint8, uint16 hoặc
double.
Page | 9
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Chương 3: XỬ LÝ ẢNH BIỂN SỐ XE
3.1.Tổng quan về tải ảnh lên để xử lý:

Page | 10
GVHD: CHU HỒNG HẢI



XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
Đây là bước đầu tiên trong việc xử lý ảnh. Ảnh được chụp từ camera
lưu vào một tệp tin cố định trong PC. Để lấy ảnh từ tệp đó ta sử dụng hàm
“ uigetfile “ .
Ví dụ :
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All
file'},'Open Image');

Trong đó:
- filename: Là giá trị trả về bạn nhận được khi bạn click vào file nào đó
(Trả về tên file)
- path: Trả về đường dẫn tới file đó
- '*.jpg;*.png','Image file' : Là các định dạng có đuôi bạn quy định sẵn
mà bạn cho phép người dùng chọn. Ở đây là file dạng hình ảnh.
Đoạn code trong chương trình:
function btnLoadImage_Callback(hObject, eventdata, handles)
% hObject
handle to btnLoadImage (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global srcImg;
set(handles.btnTachBienSo,'Enable','off');
set(handles.btnOCR,'Enable','off');
set(handles.pushbutton5,'Enable','off');
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All

file'},'Open Image');
imgpath = strcat(path,filename);
srcImg = imread(imgpath);
srcImg = imresize(srcImg,[300 NaN]);
srcImg = imresize(srcImg, 4);
axes(handles.axsSrcImg);
imshow(srcImg);
set(handles.pushbutton5,'Enable','on');
set(handles.pushbutton6,'Enable','on');

Page | 11
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Hình ảnh thực tế
Ngoài việc thực hiện tải ảnh lên từ thư mục trong máy tính. Ở bước này
em thực hiện tiền xử lý hỉnh ảnh đưa hình ảnh về kích thước chuẩn chung cho
các ảnh đầu vào . Chỉnh sửa việc on , off của các nút nhấn để phù hợp với
chương trình. Khi tải ảnh lên ảnh sẽ xuất hiện ở axes axsSrcImg
3.2.Tổng quan về tách biển số:
Tách biển số là một bước rất quan trọng trong quá trình nhận dạng biển số
xe.
Khối tách biển số xe được chia làm 2 giai đoạn chính:
 Giai đoạn 1: Định vị trí của biển số trong ảnh chụp. Ảnh được chụp là từ một
góc chụp của camera, vị trí đậu xe khi chụp ảnh cũng giống như nhau ta chỉ cần xác
định tọa độ của vùng chứa biến số chung sau đó qua giai đoạn 2.
 Giai đoạn 2: dùng các giải thuật để cắt biển số xe ra khỏi ảnh chụp


Ví dụ từ chương trình :

Page | 12
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

Ảnh sau khi tách biển số
Mục đích của chương trình em viết là đọc biển số xe từ một vị trí cố định,
ví dụ như là lối vào của một khu vực bãi đậu xe. Hệ thống xây dựng là một
máy tính thông thường , ảnh được chụp từ camera theo một góc cố định để
tạo ra ảnh gốc được đưa vào máy tính PC. Từ ảnh thu được có chứa biển số
xe ta thực hiên quá trình tách biển số xe.
Đoạn code trong matlab phần cắt biển số xe:
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject
handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global cropImg;
global srcImg;
set(handles.pushbutton6,'Enable','off');
cropImg=imcrop(srcImg,[440 790 850 200]);
cropImg = imresize(cropImg,[300 NaN]);
cropImg = imresize(cropImg, 4);
axes(handles.axes6);
imshow(cropImg);
set(handles.pushbutton8,'Enable','on');


Đây là đoạn code của cắt biển số ra khỏi ảnh chính. Ảnh đầu vào nếu xác
định là ảnh full ta sẽ thực hiện bước cắt ảnh theo một hệ tọa độ không gian
nhất định là [440 790 850 200] . Ảnh sau khi cắt sẽ được xuất lên vùng axes6
để ta tiện theo dõi quá trình.
3.3.Tổng quan về nhận dạng kí tự và số :
Kết quả của khối cắt biển số là một ảnh màu RBG có chứa biển số xe.
Để nhận dạng các ký tự trong biển số, ta tiến hành nhận dạng ký tự và số.
Phân đoạn ký tự là việc cắt ký tự trong biển số xe.
Sau khi nhận kết quả của cắt biển số hoặc ảnh trực tiếp của biển số,
việc nhận dạng ký tự bắt đầu bằng việc tách từng ký tự trong biển số. Trước
khi tách ký tự, ảnh sẽ được chuyển thành ảnh nhị phân. Ảnh nhị phân được
chuẩn hóa về kích chuẩn, sau đó tiến hành cắt các ký tự. Kết quả của quá trình
phân đoạn là một ma trận chứa các ảnh đen trắng của ký tự.
Page | 13
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
3.3.1 Làm xám biển số xe và nhị phân ảnh
Đây là bước quan trọng để nhận dạng biển số xe. Bước này sẽ tìm mức
ngưỡng tối ưu, sau đó tiến hành xám hóa ảnh với ngưỡng vừa tìm được
( nhằm làm tăng độ tương phản của ký tự với nền biển số ).

Ảnh sau khi được làm xám
Sau khi xám hóa ảnh ta lấy loại bỏ các phần mờ không rõ ràng bằng
cách nhị phân ảnh. Việc xử lý này giúp nhận dạng ký tự một cách chuẩn xác
hơn.
.


Ảnh khi được nhị phân
Page | 14
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

3.3.2 Tách ký tự
Ảnh sau khi được nhị phân chính là ngõ vào của bước này. Các vùng
trắng được xác định có thể là ký tự sẽ được tách ra độc lập từng ảnh dựa trên
khung hình chữ nhật.
Các khung được tạo thành lần lượt từ trái qua phải.
Các khung hình chữ nhật của từng kì tự được xác định, mỗi khung tạo
thành một bức ảnh chứa ma trận ký tự độc lập với nhau với tên của mỗi bức
ảnh là “chr+stt”.

Hình ảnh minh họa
3.3.3 Nhận dạng ký tự
Đây là bước cuối cùng của quá trình nhận dạng. Sau khi thực hiện quá
trình tách kỳ tự. Lần lượt mỗi ma trận ký tự của hàng trên và hàng dưới sẽ
được đưa vào chương trình nhận dạng. Kết quả cuối cùng sẽ hiện thị lần lượt
các ký tự này ở dạng text.
Thực chất, quá trình nhận dạng là quá trình đổi ma trận điểm ảnh của
các ký tự thành thành mã ASCII tương ứng với ký tự đó. Để làm được điều
này người ta đem so sánh ma trận của ký tự với tất cả các ma trận trong tập
mẫu, ma trận mẫu nào có khả năng giống nhiều nhất thì có chính là ký tự cần
tìm.
Ở bước này ta sử dụng phương pháp nhận dạng kí tự quang học OCR
(Optical Character Recognition). OCR làm việc khá tốt với các trang văn bản
rõ nét. Nhận dạng ký tự quang học (dùng các kỹ thuật quang học chẳng hạn

như gương và ống kính) và nhận dạng ký tự số (sử dụng máy quét và các
thuật toán máy tính) lúc đầu được xem xét như hai lĩnh vực khác nhau. Bởi vì
chỉ có rất ít các ứng dụng tồn tại với các kỹ thuật quang học thực sự, bởi vậy
thuật ngữ Nhận dạng ký tự quang học được mở rộng và bao gồm luôn ý nghĩa
Page | 15
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
nhận dạng ký tự số. Hệ nhận dạng ký tự OCR cần có một lưu ý đó là sự khác
nhau giữa trang văn bản và hình ảnh. Đa số các hệ nhận dạng dùng các tham
số thống kê để phân biệt chữ và hình ảnh (đối với văn bản, màu trắng và đen
phân bố với nhịp điệu chuẩn, còn trong hình ảnh thì các pattern đen trắng
phân bố không đều) . Có nhiều phương pháp nhận dạng, nhưng nói chung
được quy về 2 kiểu: nhận dạng theo mẫu (template-base) và nhận dạng theo
tính chất (feature - bas).
Theo phương pháp này ta sẽ nhận dạng theo mẫu (template-base). Ở
bước tách biển số mỗi ký tự sẽ được tách thành từng khung độc lập chứa các
ma trận ký tự độc lập. Sau đó ta sẽ so sánh lần lượt các ma trận ký tự so với
tập mẫu. Phương pháp này tuy đơn giản nhưng hiệu quả trong trường hợp tập
ảnh nhận dạng rõ nét, ít bị nhiễu. Nếu ảnh bị nhiễu thì ma trận đầu vào thay
đổi, lúc này tập mẫu sẽ không còn chính xác. Trong 1 vài trường hợp biển số
ban đầu bị nghiêng hoặc lệch, khi ta xoay và chuẩn hóa kích thước thì các ký
tự bị nhiễu và khi so sánh với tập mẫu cũng không còn chính xác.

Hình ảnh nhận dạng ký tự và xuất ra kết quả nhận dạng
Đoạn code trong matlab phần nhận dạng ký tự:
function btnOCR_Callback(hObject, eventdata, handles)
% hObject
handle to btnOCR (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global srcImg;

Page | 16
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
global bsImg;
global finalImg;
set(handles.btnTachBienSo,'Enable','off');
BW = imdilate(bsImg, strel('disk',3)); % grow the text a bit to get a
bigger ROI around them.
CC = bwconncomp(BW);
% Use regionprops to get the bounding boxes around the text
s = regionprops(CC,'BoundingBox');
roi = vertcat(s(:).BoundingBox);
y = roi(:,2);
avg = (min(y)+max(y))/2;
l1 = find(yl2 = find(y>avg);
% Apply OCR
% Thin the letters a bit, to help OCR deal with the blocky letters
global BW1;
BW1 = imerode(bsImg, strel('square',1));
l = [l1;l2];
j = 1;
for i=l'

im = imcrop(BW1,roi(i,:));
im = imresize(im,[64 32]);
imwrite(im,strcat('chr',num2str(i),'.jpg'));
rs(i) = letter_read(im);
rs_ds(j) = rs(i);
j = j+1;
end
rs_ds
% Set text layout to 'Word' because the layout is nothing like a
document.
% Set character set to be A to Z, to limit mistakes.
global results;
results = ocr(BW1, roi, 'TextLayout',
'Word','Language','tessdata/bsx.traineddata','CharacterSet','0123456789AB
CDEFGHIJKLMNOPQRSTUVWXYZ'); %ABCDEFGHIJKLMNOPQRSTUVWXYZ
for i = 1:numel(results)
deblank(results(i).Text)
results(i).WordConfidences
if results(i).WordConfidences > 0.7
c{i} = deblank(results(i).Text);
else
c{i} = rs(i);
end
end
%
%
%
%
%


remove whitespace in the results
c = cell(1,numel(results));
for i = 1:numel(results)
c{i} = deblank(results(i).Text);
end

% insert recognized text into image

Page | 17
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
finalImg = insertObjectAnnotation(im2uint8(BW1), 'Rectangle', roi,
c,'FontSize',72);
%confidences = sprintf('%.2f', results.CharacterConfidences);
%finalImg = insertObjectAnnotation(im2uint8(BW1), 'Rectangle', roi,
confidences ,'FontSize',72);
axes(handles.axsOcrImg);
imshow(finalImg);
txt = [c(l1) ' ' c(l2)];
str = '';
for i=1:length(txt)
str = strcat(str,txt(i));
end
set(handles.txtKetQua,'String',str);

Kết quả nhận dạng sẽ được xuất ra lần lược ở dạng text sau đó chương
trình sẽ nối lại thành một chuỗi giữa hàng trên và hàng dưới sẽ nối với nhau
bằng khoảng trắng.


Chương 4: THỰC HIỆN ĐỀ TÀI TRÊN
MATLAB
4.1 Giới thiệu gui
 Gui-là giao diện bằng hình ảnh của chương trình
 Gui-bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu… chúng
cung cấp cho người dùng sử dụng một môi trường làm việc thân thiện để
họ tập trung vào các ứng dụng của chương trình hơn là đi tìm hiểu cách
thức làm việc của chương trình đó.
 Sau khi tạo xong giao diện và lưu giao diện vừa tạo Matlab sẽ tạo ra hai
file có cùng tên nhưng khác phần mở rộng:
- File có phần mở rộng .fig chứa nội dung của giao diện
- File có phần mở rộng .m chứa những đoạn mã liên quan đến giao
diện. Ta xử lý lập trình các thuật toán trên file .m
 Các hàm thường được sử dụng trong gui:
- Set : thay đổi giá trị của các thuộc tính của một đối tượng giao diện
- Get : truy xuất giá trị của thuộc tính của một đối tượng giao diện
- Ngoài ra còn các hàm như axes, guide, num2str(), str2num()...

Page | 18
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH

4.2 Tạo giao diện gui

4.3 Code của chương trình matlab
function varargout = NHOM5_XLA_BXS(varargin)
% NHOM5_XLA_BXS MATLAB code for NHOM5_XLA_BXS.fig

%
NHOM5_XLA_BXS, by itself, creates a new NHOM5_XLA_BXS or raises
the existing
%
singleton*.
%
%
H = NHOM5_XLA_BXS returns the handle to a new NHOM5_XLA_BXS or the
handle to
%
the existing singleton*.
%
%
NHOM5_XLA_BXS('CALLBACK',hObject,eventData,handles,...) calls the
local
%
function named CALLBACK in NHOM5_XLA_BXS.M with the given input
arguments.
%
%
NHOM5_XLA_BXS('Property','Value',...) creates a new NHOM5_XLA_BXS
or raises the
%
existing singleton*. Starting from the left, property value pairs
are

Page | 19
GVHD: CHU HỒNG HẢI



XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
%
applied to the GUI before NHOM5_XLA_BXS_OpeningFcn gets called.
An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to NHOM5_XLA_BXS_OpeningFcn via
varargin.
%
%
*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one
%
instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help NHOM5_XLA_BXS
% Last Modified by GUIDE v2.5 29-Oct-2019 12:04:05
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @NHOM5_XLA_BXS_OpeningFcn, ...
'gui_OutputFcn', @NHOM5_XLA_BXS_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);

if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before NHOM5_XLA_BXS is made visible.
function NHOM5_XLA_BXS_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to NHOM5_XLA_BXS (see VARARGIN)
% Choose default command line output for NHOM5_XLA_BXS
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes NHOM5_XLA_BXS wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = NHOM5_XLA_BXS_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject
handle to figure

% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

Page | 20
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in btnLoadImage.
function btnLoadImage_Callback(hObject, eventdata, handles)
% hObject
handle to btnLoadImage (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global srcImg;
set(handles.btnTachBienSo,'Enable','off');
set(handles.btnOCR,'Enable','off');
set(handles.pushbutton5,'Enable','off');
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All
file'},'Open Image');
imgpath = strcat(path,filename);
srcImg = imread(imgpath);
srcImg = imresize(srcImg,[300 NaN]);
srcImg = imresize(srcImg, 4);

axes(handles.axsSrcImg);
imshow(srcImg);
set(handles.pushbutton5,'Enable','on');
set(handles.pushbutton6,'Enable','on');

% --- Executes on button press in btnTachBienSo.
function btnTachBienSo_Callback(hObject, eventdata, handles)
% hObject
handle to btnTachBienSo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global bsImg;
global xamImg;
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');
% figure; imshow(xamImgg);
xamImg = imclearborder(~xamImg);
% figure; imshow(bw_img);
xamImg = bwareaopen(xamImg, 15000);

CC = bwconncomp(xamImg);
a = regionprops(CC,'ConvexArea');
as = vertcat(a(:).ConvexArea);
L = labelmatrix(CC);
bsImg = ismember(L, find([a.ConvexArea] <= 1000000));
axes(handles.axsBienSoImg);

Page | 21
GVHD: CHU HỒNG HẢI



XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
imshow(bsImg);
% imwrite(bsImg,'bw.jpg');
set(handles.btnOCR,'Enable','on');
function btnOCR_Callback(hObject, eventdata, handles)
% hObject
handle to btnOCR (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global srcImg;
global bsImg;
global finalImg;
set(handles.btnTachBienSo,'Enable','off');
BW = imdilate(bsImg, strel('disk',3)); % grow the text a bit to get a
bigger ROI around them.
CC = bwconncomp(BW);
% Use regionprops to get the bounding boxes around the text
s = regionprops(CC,'BoundingBox');
roi = vertcat(s(:).BoundingBox);
y = roi(:,2);
avg = (min(y)+max(y))/2;
l1 = find(yl2 = find(y>avg);
% Apply OCR
% Thin the letters a bit, to help OCR deal with the blocky letters
global BW1;
BW1 = imerode(bsImg, strel('square',1));

l = [l1;l2];
j = 1;
for i=l'
im = imcrop(BW1,roi(i,:));
im = imresize(im,[64 32]);
imwrite(im,strcat('chr',num2str(i),'.jpg'));
rs(i) = letter_read(im);
rs_ds(j) = rs(i);
j = j+1;
end
rs_ds
% Set text layout to 'Word' because the layout is nothing like a
document.
% Set character set to be A to Z, to limit mistakes.
global results;
results = ocr(BW1, roi, 'TextLayout',
'Word','Language','tessdata/bsx.traineddata','CharacterSet','0123456789AB
CDEFGHIJKLMNOPQRSTUVWXYZ'); %ABCDEFGHIJKLMNOPQRSTUVWXYZ
for i = 1:numel(results)
deblank(results(i).Text)
results(i).WordConfidences
if results(i).WordConfidences > 0.7
c{i} = deblank(results(i).Text);
else
c{i} = rs(i);

Page | 22
GVHD: CHU HỒNG HẢI



XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
end
%
%
%
%
%

end

remove whitespace in the results
c = cell(1,numel(results));
for i = 1:numel(results)
c{i} = deblank(results(i).Text);
end

% insert recognized text into image
finalImg = insertObjectAnnotation(im2uint8(BW1), 'Rectangle', roi,
c,'FontSize',72);
%confidences = sprintf('%.2f', results.CharacterConfidences);
%finalImg = insertObjectAnnotation(im2uint8(BW1), 'Rectangle', roi,
confidences ,'FontSize',72);
axes(handles.axsOcrImg);
imshow(finalImg);
txt = [c(l1) ' ' c(l2)];
str = '';
for i=1:length(txt)
str = strcat(str,txt(i));
end
set(handles.txtKetQua,'String',str);

function txtKetQua_Callback(hObject, eventdata, handles)
% hObject
handle to txtKetQua (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of txtKetQua as text
%
str2double(get(hObject,'String')) returns contents of txtKetQua
as a double
% --- Executes during object creation, after setting all properties.
function txtKetQua_CreateFcn(hObject, eventdata, handles)
% hObject
handle to txtKetQua (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all properties.
function figure1_CreateFcn(hObject, eventdata, handles)
% hObject
handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB

% handles
empty - handles not created until after all CreateFcns
called
set(findobj(gcf, 'type','axes'), 'Visible','off');

Page | 23
GVHD: CHU HỒNG HẢI


XỬ LÝ ÂM THANH VÀ HÌNH ẢNH
% --- Executes on mouse press over axes background.
function axsOcrImg_ButtonDownFcn(hObject, eventdata, handles)
% hObject
handle to axsOcrImg (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global finalImg;
figure; imshow(finalImg);
% --- Executes on mouse press over figure background, over a disabled or
% --- inactive control, or over an axes background.

function edit8_Callback(hObject, eventdata, handles)
% hObject
handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit8 as text
%

str2double(get(hObject,'String')) returns contents of edit8 as a
double
% --- Executes during object creation, after setting all properties.
function edit8_CreateFcn(hObject, eventdata, handles)
% hObject
handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit9_Callback(hObject, eventdata, handles)
% hObject
handle to edit9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit9 as text
%
str2double(get(hObject,'String')) returns contents of edit9 as a
double
% --- Executes during object creation, after setting all properties.
function edit9_CreateFcn(hObject, eventdata, handles)

% hObject
handle to edit9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.

Page | 24
GVHD: CHU HỒNG HẢI


×