Bia PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 39

TRƯỜNG ĐẠI HỌC SƯ PHẠM KĨ THUẬT THÀNH PHỐ HỒ CHÍ MINH

*******

TIỂU LUẬN MÔN TRIẾT HỌC


ĐỀ TÀI: CHỦ NGHĨA DUY VẬT BIỆN CHỨNG

Sinh viên thực hiện: PHẠM TRẦN MINH HOÀNG


MSSV: 1980702

Năm học: 2020-2021


TP.Hồ Chí Minh, Tháng 2 năm 2020
NHẬN XÉT
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
................................................................................................. ...
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

MỤC LỤC

CHƯƠNG 1 .......................................................................................................................... 5
GIỚI THIỆU ĐỀ TÀI .............................................................................................................. 5
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: ........................................................................................................ 8
CHƯƠNG 2........................................................................................................................... 9
XỬ LÝ BIỂN SỐ ................................................................................................................... 9
2.1 TÁCH BIỂN SỐ ...................................................................................................... 9
2.1.1 TÌM VÙNG MÀU TRẮNG ....................................................................... 10
2.1.2 XÁC ĐỊNH VÙNG CHỨA BIỂN SỐ VÀ TÁCH LẤY: .............................. 13
2.2. PHÂN ĐOẠN KÍ TỰ ............................................................................................. 14
2.2.1 Tổng quan về phân đoạn kí tự: .................................................................. 14
2.2.2 LƯU ĐỒ: ................................................................................................. 15
2.3 TẠO THƯ VIỆN ẢNH :......................................................................................... 17
2.3.3 NGUYÊN LÝ: .......................................................................................... 17
2.3.4 LƯU ĐỒ: ................................................................................................. 17
2.3.5 HÀM XỬ LÝ: .......................................................................................... 18
2.4 NHẬN DẠNG KÝ TỰ: .......................................................................................... 20
2.4.1 NGUYÊN LÝ: .......................................................................................... 20
2.4.2 LƯU ĐỒ: ................................................................................................. 20
2.4.3 HÀM XỬ LÝ: .......................................................................................... 22
CHƯƠNG 3 ........................................................................................................................ 24
GIAO DIỆN ......................................................................................................................... 24
3.1 TẠO GUIDE: ........................................................................................................ 24
3.1.1 GUIDE LÀ GÌ: ...................................................................................................... 24
3.1.2 KHAI BÁO VÀ SỬ DỤNG GUIDE TRONG MATBAL:............................ 24
3.2 GIAO DIỆN NHẬN DIỆN BIỂN SỐ XE ................................................................ 27
3.2.1 GIAO DIỆN: ............................................................................................ 27
3.2.2 XỬ LÝ XUẤT ẢNH VÀ XUẤT NODEPAD: ............................................. 27
CHƯƠNG 4 ........................................................................................................................ 29
KẾT QUẢ THỰC HIỆN – HƯỚNG PHÁT TRIỂN ............................................................... 29

NHÓM:1
1
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

4.1 KẾT QUẢ THỰC HIỆN: ....................................................................................... 29


4.2 HƯỚNG PHÁT TRIỂN ĐỀ TÀI: ........................................................................... 29
TÀI LIỆU THAM KHẢO .................................................................................................... 30

NHÓM:1
2
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

MỤC LỤC HÌNH


Hình 1. 1 Mô hình gửi xe ....................................................................................................... 5
Hình 1. 2 Quy trình đọc biển số xe ........................................................................................ 7

Hình 2. 1 Phương pháp xử lý ảnh ....................................................................................... 10


Hình 2. 2 Sơ đồ khối xử lý ảnh ............................................................................................ 11
Hình 2. 3 Chuyển ảnh RGB sang 1 bit ................................................................................ 12
Hình 2. 4 Làm đầy các vùng màu trắng ............................................................................... 12
Hình 2. 5 Xóa bỏ những thành phần màu trắng nhỏ............................................................ 12
Hình 2. 6 Làm đầy các đường viền ..................................................................................... 12
Hình 2. 7 Chuyển sang ảnh chỉ lấy...................................................................................... 12
Hình 2. 8 Đưa ảnh RGB vào ............................................................................................... 12
Hình 2. 9 Lọc ra vùng có diện tích lớn nhất ......................................................................... 13
Hình 2. 10 Vùng màu trắng có diện tích lớn nhất ................................................................ 14
Hình 2. 11 Cắt đúng vị trí vùng diện tích trên ở hình “imbin” sẽ khớp ngay vị trí của biến số
........................................................................................................................................... 14
Hình 2. 12 Tỉ lệ kích thước giữa kí tự và khung biển số ...................................................... 15
Hình 2. 13 Lưu đồ phân đoạn kí tự ..................................................................................... 16
Hình 2. 14 Thư mục chứa hình ảnh đã xử lý ....................................................................... 17
Hình 2. 15 Lưu đồ lưu ảnh từ thư viện ................................................................................ 18
hình 2. 16 Lưu đồ định dạng ký tự ...................................................................................... 21
Hình 2. 17 Xuất ra file notepad với tên file là noPlate: AXZ016 ........................................... 23

Hình 3. 1 Guide trong matlab .............................................................................................. 25


Hình 3. 2 Giao diện guide ................................................................................................... 26
Hình 3. 3 Tool trong guide ................................................................................................... 26
Hình 3. 4 Giao diện ............................................................................................................. 27

NHÓM:1
3
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

LỜI CẢM ƠN

Trong thời gian thực hiện đồ án này, chúng em đã nhận được sự giúp đỡ nhiệt
tình từ các bạn trong khoa Chất Lượng Cao, các thầy cô. Chúng em xin gửi lời cảm ơn
đến tất cả bạn, thầy cô và đặc biệt là Thầy Nguyễn Thanh Hải đã tận tình giúp đỡ để
chúng em có thể hoàn thành topic môn học này về mô hình cũng như cách thức trình
bày nội dung của đề tài.

Trong quá trình thực hiện có thể chưa đáp ứng được những yêu cầu của thầy, rất
mong sự đóng góp ý kiến, đánh giá, nhận xét về nội dung và hình thức trình bày của
thầy, cô và các bạn để từ đó chúng em có thể rút ra được nhiều bài học cũng như tích
lũy thêm kinh nghiệm cho những môn học tiếp theo.

Nhóm xin chân thành cảm ơn!!!

NHÓM:1
4
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

CHƯƠNG 1

GIỚI THIỆU ĐỀ TÀI

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

HÌNH 1. 1 MÔ HÌNH GỬI XE


Sự phát triển của khoa học kỹ thuật cùng với nhu cầu đi lai của con người ngày
càng tăng, lưu lượng giao thông ngày càng lớn dẫn đến việc quản lí các phương tiện
giao thông gặp rất nhiều khó khăn. Do đó, nhu cầu có một hệ thống tự động nhận diện
biển số xe và quản lí lưu trữ thông tin là vô cùng cần thiết.
Trong bài báo cáo này, nhóm sẽ xây dụng hệ thông tự động nhận diện biển số
xe qua hình ảnh và xuất ra file notepad, giúp giải quyết được những khó khăn như:
 Tốn nhiều nhân công
 Vé xe được viết bằng giấy, dễ bị mất hay nhàu nát.
 …

1.2 Nội dung đề tài:

NHÓM:1
5
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Hệ thống sẽ xử lí hình ảnh chụp biển số xe được đưa vào phần mềm matlab và
xuất ra file notepad biển số xe đó.
Quá trình nhận biết được thực hiện như sơ đồ sau:

NHÓM:1
6
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Tách biển số

Phân đoạn kí tự

Nhận dạng kí tự

HÌNH 1. 2 QUY TRÌNH ĐỌC BIỂN SỐ XE

NHÓM:1
7
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

1.3 Giới hạn đề tài:

Do thời gian cũng như kiến thức trong xử lí ảnh của nhóm có hạn nên nhóm sẽ
có những giới hạn, điều kiện với biển số xe như:
Để thực hiện được hai bước trên, nhóm đã kết hợp sử dụng nhiểu giải thuật và
phương pháp xử lí ảnh:
 Lấy những hình ảnh đã được chụp từ trước để đưa vào matlab xử lí chứ
không kết nối trực tiếp với camera.
 Xử lí trực tiếp trên phần mềm matlab, chưa tạo được GUI dành cho
người dùng.
 Biển số xe có 1 hàng, số lượng ký tự từ 10 trở xuống.
 Biển số phải còn nguyên vẹn, không bị che khuất, không bị chói bởi ánh
sáng.
 Góc nghiêng của biển số không quá 45 độ so với phương ngang

NHÓM:1
8
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

CHƯƠNG 2
XỬ LÝ BIỂN SỐ

2.1 TÁCH BIỂN SỐ

 Tách biển số xe sẽ được chia thành 2 giai bước chính:


 Định vị vị trí của biển số xe.
 Cắt và tách lấy ra biển số xe.
Để thực hiện được hai bước trên, nhóm đã kết hợp sử dụng nhiểu giải thuật và
phương pháp xử lí ảnh:

NHÓM:1
9
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Ảnh RGB chụp


 Biển đổi ảnh RGB -> ảnh âm bản
gần biển số xe
 Làm dầy các viền của các vùng màu trắng giúp các
đường không bị đứt nét để sau đó làm đầy các vùng
màu trắng.
 Xóa những thành phần màu trắng dạng đường thẳng,
Tìm vùng màu đốm nhỏ ( loại bỏ thành phần tạp chất ).
trắng  Lọc ra các vùng màu trắng có diện tích đủ lớn có khả
năng là biển số xe

Xác định vùng  Đánh số các vùng màu trắng đã lọc ra ở bước trên và
chứa biển số tìm ra vùng có diện tích lớn nhất. Đó là vùng của biển số
và tách lấy xe.
 Sau đó, lấy ảnh âm bản của biến số xe đã chuyển tử
ảnh RGB trước đó, cắt đúng với vị trị vùng diện tích lớn
nhất ta vừa lọc ra ở bước trên để lấy biển số.
Ảnh âm bản
của biển số xe

HÌNH 2. 1 PHƯƠNG PHÁP XỬ LÝ ẢNH

2.1.1 TÌM VÙNG MÀU TRẮNG

Khi chuyển ảnh RGB sang nhị phân, ta sẽ gặp phải vấn đề đường viền của
khung biến số xe và kí tự bị đứt nét, khiến việc làm đầy 2 thành phần đó bị ảnh hưởng.
Do đó, ta phải làm dầy các đường viền đó để có thể làm đầy vùng viến số và các kí tự.
Sau đó, ta loại bỏ bớt những thành phần tạp chất không liên quan để chừa lại những
vùng diện tích lớn, có khả năng là biển số xe.

NHÓM:1
10
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Bắt đầu

Đưa ảnh RGB vào


im = imread('img/car.jpg')

Chuyển ảnh RGB sang ảnh 1 bit


imbin = im2bw(im);

Chuyển sang ảnh chỉ lấy đường viền


im=edge(imbin,'sobel');

Làm dầy các đường viền


im = imdilate(im, strel('diamond', 2));

Làm đầy các vùng màu trắng


im = imfill(im, 'holes');

Xóa bỏ những vùng màu trắng nhỏ


là thành phần tạp chất
im = imerode(im, strel('diamond', 10));

HÌNH 2. 2 SƠ ĐỒ KHỐI XỬ LÝ ẢNH

NHÓM:1
11
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

HÌNH 2. 8 ĐƯA ẢNH RGB VÀO HÌNH 2. 3 CHUYỂN ẢNH RGB SANG 1 BIT

Đưa ảnh RGB vào Chuyển ảnh RGB sang 1 bit

HÌNH 2. 7 CHUYỂN SANG ẢNH CHỈ LẤY HÌNH 2. 6 LÀM ĐẦY CÁC ĐƯỜNG VIỀN

Chuyển sang ảnh chỉ lấy Làm đầy các đường viền
đường viền

HÌNH 2. 4 LÀM ĐẦY CÁC VÙNG MÀU TRẮNG HÌNH 2. 5 XÓA BỎ NHỮNG THÀNH PHẦN MÀU
TRẮNG NHỎ

Xóa bỏ những thành phần màu


Làm đầy các vùng màu trắng
trắng nhỏ

NHÓM:1
12
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

2.1.2 XÁC ĐỊNH VÙNG CHỨA BIỂN SỐ VÀ TÁCH LẤY:

Lọc ra vùng có diện tích lớn nhất và cắt đúng vị trí đó với ảnh 1 bit ban đầu để
lấy biển số.
1

Đánh dấu các vùng màu trắng của hình ảnh


Iprops=regionprops(im,'BoundingBox','Area', 'Image');

Đặt biến chứa vùng màu trắng có diện tích lớn nhất
area = Iprops.Area;

Số vùng màu trắng trong ảnh


count = numel(Iprops);

Đặt biến lưu vị trí của vùng màu trắng lớn nhất
boundingBox = Iprops.BoundingBox;

I < count

S
area < Iprops(i).Area

S
Aarea = Iprops(i).Area;
BboundingBox = Iprops(i).BoundingBox;

im = imcrop(imbin, boundingBox)

HÌNH 2. 9 LỌC RA VÙNG CÓ DIỆN TÍCH LỚN NHẤT

NHÓM:1
13
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

HÌNH 2. 10 VÙNG MÀU TRẮNG CÓ DIỆN TÍCH LỚN NHẤT

Vùng màu trắng có diện tích lớn nhất

HÌNH 2. 11 CẮT ĐÚNG VỊ TRÍ VÙNG DIỆN TÍCH TRÊN Ở HÌNH “IMBIN” SẼ
KHỚP NGAY VỊ TRÍ CỦA BIẾN SỐ

Cắt đúng vị trí vùng diện tích trên ở hình “imbin” sẽ


khớp ngay vị trí của biến số

2.2. PHÂN ĐOẠN KÍ TỰ


2.2.1 Tổng quan về phân đoạn kí tự:

NHÓM:1
14
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Để thực hiện việc phân vùng kí tự ta phải dựa vào tỉ lệ kích thước kí tự và
khung biển số, cụ thể tỉ lệ như sau:
 Chiều rộng của kí tự sẽ nhỏ hơn 1/2 chiều dài của khung biển số.
 Chiều dài của kí tự sẽ lớn hơn 1/3 chiều dài của khủng biển số.
ow: chiều rộng kí tự
oh: chiều dài kí tự
w: chiều rộng kí tự
h: chiều dài kí tự

oh h

ow

HÌNH 2. 12 TỈ LỆ KÍCH THƯỚC GIỮA KÍ TỰ VÀ KHUNG BIỂN SỐ

2.2.2 LƯU ĐỒ:

NHÓM:1
15
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Điều chỉnh cố định độ cao của biển số để xử lí đáp


ứng nhiều ảnh kích thước khác nhau, chiều dài biển số
để tự động vì biển số có lượng kí tự dài ngẫu nhiên

Đảo ảnh 1 bit để đổi kí tự


biển số từ màu đen sang trắng
để bắt đầu nhận dạng kí tự

Phân vùng kí tự, lấy số lượng và đánh dấu các


phân vùng đó để chuẩn bị nhận dạng

Lấy độ dài (h) của hình biển số đã cắt từ bước trên


[h, w] = size(im);

Nếu xác định có kí tự được phân vùng


s

ow < (h/2) && oh > (h/3)


s

Nhân dạng kí tư của phân vùng đó là kí tự gì

Kết thúc

HÌNH 2. 13 LƯU ĐỒ PHÂN ĐOẠN KÍ TỰ

NHÓM:1
16
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

2.3 TẠO THƯ VIỆN ẢNH :

2.3.3 NGUYÊN LÝ:

 Ta tạo thư viện ảnh đã xử lý hình và số ở dạng 1 bit (0 và 1) với kích thước
ảnh 24x42.

HÌNH 2. 14 THƯ MỤC CHỨA HÌNH ẢNH ĐÃ XỬ LÝ

 Ta đọc ảnh từ thư mục đã xử lý ảnh chữ và số như hình ở trên và vào mảng kí
hiệu chữ và số.
 Chuyển đổi file ảnh trên thành ô có kích thước 24x42 để xử lý các bit 0 và 1.
Lưu và mảng chức để xử lý ở hàm con readLetter .

2.3.4 LƯU ĐỒ:

NHÓM:1
17
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Bắt đầu

Đọc ảnh từ thư


mục char gồm số
và chữ đã được
lưu dạng 1bit.

Tạo mảng Letter Tạo mảng Number

Tạo mảng chức Letter và


Number

Sử dụng hàm
mat2cell chuyển đổi
mảng chứa Letter và
Number thành mảng
ô 42x24

Lưu hình ảnh vào


NewTemplates

Kết thúc

HÌNH 2. 15 LƯU ĐỒ LƯU ẢNH TỪ THƯ VIỆN

2.3.5 HÀM XỬ LÝ:


 Đọc tất cả các hình đã xử lý ảnh lưu vào các biến bằng hàm imread:
A=imread('char/A.bmp');B=imread('char/B.bmp');
C=imread('char/C.bmp');D=imread('char/D.bmp');
E=imread('char/E.bmp');F=imread('char/F.bmp');
G=imread('char/G.bmp');H=imread('char/H.bmp');
I=imread('char/I.bmp');J=imread('char/J.bmp');

NHÓM:1
18
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

K=imread('char/K.bmp');L=imread('char/L.bmp');
M=imread('char/M.bmp');N=imread('char/N.bmp');
O=imread('char/O.bmp');P=imread('char/P.bmp');
Q=imread('char/Q.bmp');R=imread('char/R.bmp');
S=imread('char/S.bmp');T=imread('char/T.bmp');
U=imread('char/U.bmp');V=imread('char/V.bmp');
W=imread('char/W.bmp');X=imread('char/X.bmp');
Y=imread('char/Y.bmp');Z=imread('char/Z.bmp');
Afill=imread('char/fillA.bmp');
Bfill=imread('char/fillB.bmp');
Dfill=imread('char/fillD.bmp');
Ofill=imread('char/fillO.bmp');
Pfill=imread('char/fillP.bmp');
Qfill=imread('char/fillQ.bmp');
Rfill=imread('char/fillR.bmp');
%So
one=imread('char/1.bmp'); two=imread('char/2.bmp');
three=imread('char/3.bmp');four=imread('char/4.bmp');
five=imread('char/5.bmp'); six=imread('char/6.bmp');
seven=imread('char/7.bmp');eight=imread('char/8.bmp');
nine=imread('char/9.bmp'); zero=imread('char/0.bmp');
zerofill=imread('char/fill0.bmp');
fourfill=imread('char/fill4.bmp');
sixfill=imread('char/fill6.bmp');
sixfill2=imread('char/fill6_2.bmp');
eightfill=imread('char/fill8.bmp');
ninefill=imread('char/fill9.bmp');
ninefill2=imread('char/fill9_2.bmp');

 Tạo các mảng để lưu hình ảnh đã xử lý ảnh gồm số và chữ

% lưu các hình kí tự là chữ đã được đọc ảnh ở trên


letter=[A Afill B Bfill C D Dfill E F G H I J K L M N O
Ofill P Pfill Q Qfill R Rfill S T U V W X Y Z];

% lưu các hình kí tự là số đã được đọc ảnh ở trên

number=[one two three four fourfill five six sixfill


sixfill2 seven eight eightfill nine ninefill ninefill2
zero zerofill];
%lưu ảnh
character=[letter number];

NHÓM:1
19
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

- hàm mat2cell:Chuyển đổi mảng thành mảng ô có các ô chứa các chuỗi con:
NewTemplates= mat2cell(character,42,[24 24 24 24 24 24 24
24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24]);

 Ta lưu lại để để xử lý ảnh ở hàm con nhận dạng ký tự


save ('NewTemplates','NewTemplates')

2.4 NHẬN DẠNG KÝ TỰ:

2.4.1 NGUYÊN LÝ:


Với kết quả phân đoạn ký tự sẽ được hiển thị dưới dạng text, tiếp đến ta sẽ thực
hiện quá trình nhận dạng ký tự.
Là quá trình biến đổi các điểm ảnh ký tự thành các mã ASCII ứng với ký tự
biến đổi.
Quá trình hoạt động đem so sánh ma trận của ký tự với tất cả ma trận có trong
tập ký tự mẫu , so sánh có khả năng giống nhiều nhất thì chính là kí tự cần tìm.
2.4.2 LƯU ĐỒ:

NHÓM:1
20
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Begin

Hàm readletter: đọc ký tự từ hình


ảnh nhị phân của ảnh

Tải mẫu ký tự từ ô nhớ


(load NewTemplates)
Thay đổi kích thước đầu vào để so
sánh với ảnh mẫu
Snap=imresize

Đối chiếu hình ảnh đầu vào hình


ảnh phù hợp nhất

Tìm các ký tự giống nhất

Ghi lại ký tự

HÌNH 2. 16 LƯU ĐỒ ĐỊNH DẠNG KÝ TỰ

NHÓM:1
21
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

2.4.3 HÀM XỬ LÝ:

- Hàm có tác dụng đọc ký tự từ hình ảnh nhị phân của ảnh
- Xuất kí tự trong lớp char từ hình ảnh nhị phân đầu vào—lớp char từ file
thư viện create_templetes.
function letter=readLetter(snap)
Sau khi ảnh được đưa vào hàm readletter.
Hàm này sẽ tự động gọi hàm thư viện chứa các ký tự có sẵn
Đối chiếu các ký tự đó để tìm ra ký tự đúng nhất rồi ghi lại ký tự.
%Hàm có tác dụng đọc ký tự từ hình ảnh nhị phân của
ảnh
%Xuất kí tự trong lớp char từ hình ảnh nhị phân đầu
vào—lớp char từ file thư viện create_templetes.
load NewTemplates
% tải mẫu của kí tự vào trong ô nhớ create_templetes
snap=imresize(snap,[42 24]);
% thay đổi kích thước ảnh đầu vào để có thể so sánh
với hình ảnh mẫu
comp=[ ];
for n=1:length(NewTemplates)
sem=corr2(NewTemplates{1,n},snap);
% Đối chiếu hình ảnh đầu vào với hình ảnh trong mẫu
phù hợp nhất
comp=[comp sem];
% hiển thị giá trị tương quan cho mỗi kí tự của mẫu
end
vd=find(comp==max(comp)); % Find the index which
correspond to the highest matched character.
% thực hiện so sánh để tìm các kí tự phù hợp nhất
%display(max(comp));
%*-*-*-*-*-*-*-*-*-*-*-*-*-
% Accodrding to the index assign to 'letter'.
% Alphabets listings.
if vd==1 || vd==2
letter='A';
elseif vd==3 || vd==4
letter='B';

NHÓM:1
22
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

Xuất file notepad:


fid = fopen('noPlate.txt', 'wt'); % Mở file notepad
tên là noPlate.txt
fprintf(fid,'%s\n',noPlate); % Xuất ra ký tự ra
%file trong đó sẽ có biển số đã viết
fclose(fid); %
winopen('noPlate.txt')

HÌNH 2. 17 XUẤT RA FILE NOTEPAD VỚI TÊN FILE LÀ NOPLATE: AXZ016

NHÓM:1
23
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

CHƯƠNG 3

GIAO DIỆN

3.1 TẠO GUIDE:

3.1.1 GUIDE LÀ GÌ:


GUI được viết tắt của từ “Graphical User Interface” dịch theo tiếng việt nôm
la là Giao diện người dùng đồ họa. Là ta sẽ tiến hành sử dụng chuột để thao tác các
thanh công cụ đã được con người lập trình sẵn và tích hợp vào phần mền Matlab. Nó
cho phép bạn tương tác giao diện chương trình từ đó bạn nhìn được một cách khách
quan nhất và bắt đầu viết code để tương tác giao diện
Nếu như bạn học lập trình C# với Windows Form thì lập trình GUI cũng giống vậy.
Cũng thao tác kéo thả button, textbox, layout,… giúp bạn nhanh chóng tạo ra giao diện,
giảm thời gian ngồi Code.

Trong Matlab thì GUI hỗ trợ bạn khá là đầy đủ các chương trình để bạn thực hiện. Như
là tính toán với phép toán LOGIC, lập trình không gian 2D, 3D, đọc dữ liệu từ Excel, sử lý
hình ảnh,… Nó được thực hiện thông qua hàm xây dựng sẵn là CALLBACK. Bạn không cấn
phải biết nhiều về cấu trúc của trương trình mà vẫn có thể thực hiện được.

3.1.2 KHAI BÁO VÀ SỬ DỤNG GUIDE TRONG MATBAL:


 Tại cửa sổ Command Window bạn hãy tiến hành gõ lệnh dưới đây và nhấn
Enter
>> guide

 Lập tức cửa sổ GUIDE Quick Start xuất hiện nên như hình phía dưới.

NHÓM:1
24
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

HÌNH 3. 1 GUIDE TRONG MATLAB


Tại tab Create New GUI thì cho phép bạn 4 sự lựa chọn sau:
 Blank GUI (Default): Là bạn lập trình giao diện trống, chưa có thứ gì cả.
 GUI with Uicontrols, GUI with Axes and Menu, Modal Question Dialog: Là các
templates đã có giao diện sẵn ở mức cơ bản. Ta đang bắt đầu học thì sẽ chọn Blank
GUI (Default) sau này bạn có kiến thức rồi thì hãy sử dụng các templates khác.
– Tab Open Existing GUI là nơi bạn có thể mở các GUI và bạn đã làm và lưu trước
đó, file này có đuôi là .fig

NHÓM:1
25
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

HÌNH 3. 2 GIAO DIỆN GUIDE


 Thêm tool nút nhấn,hình ảnh…bằng cách kéo thả

HÌNH 3. 3 TOOL TRONG GUIDE

NHÓM:1
26
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

 Liên kết và sử dụng để thực hiện công việc cách khai báo trong file có đuôi
“fig”.
3.2 GIAO DIỆN NHẬN DIỆN BIỂN SỐ XE
3.2.1 GIAO DIỆN:

 Giao diện guide gồm 2 Text để hiển thị chữ “Ảnh nhập từ Browse” và “NHÓM
1 NHẬN DIỆN BIỂN SỐ XE”
 3 nút nhấn để lấy ảnh từ thư mục ảnh, xuất ảnh 1 bit và xuất dưới dạng notepad
 2 Axes để hiển thị ảnh dưới nhập từ Browse và xuất ảnh 1 bit.

HÌNH 3. 4 GIAO DIỆN

3.2.2 XỬ LÝ XUẤT ẢNH VÀ XUẤT NODEPAD:


 Chỉ các địa chỉ liên kết với guide ở hàm chính bằng cách sử dụng hàm
“global”

NHÓM:1
27
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

 Ở nút “Browse”, “Ảnh 1 bit”, “Xuất file notepad” lần lượt xử lý công
việc lấy ảnh từ thư mục xuất ảnh dưới dạng 1 bit và xuất file notepad.
 2 axes1 và axes2 xử lý phần hiển thị ảnh khi có ảnh nhập từ Browse.

NHÓM:1
28
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

CHƯƠNG 4

KẾT QUẢ THỰC HIỆN – HƯỚNG PHÁT TRIỂN

4.1 KẾT QUẢ THỰC HIỆN:

Tóm lại, sau khi thực hiện đề tài này, chúng em được hiểu rõ hơn về quy trình
nhận diện hình ảnh. Để nhận diện chính xác phụ thuộc vào nhiều yếu tố ánh sáng, môi
trường,..vv Với đề tài “nhận diện biển số xe thông qua xử lý ảnh”. Do hạn chế về
mặt thời gian nên đề tài vẫn còn nhiều sai sót và mặt hạn chế về số hàng nhận diện
biển số mong thầy và các bạn thông cảm.
Để cho khả năng ứng dụng của đề tài này vào thực tế rộng rãi hơn chúng ta có thể sử
dụng camera chuyên nghiệp để chụp ảnh tốt hơn, thiết lập môi trường để tăng chất
lượng ảnh…
Mọi đóng góp đề tài này để được tốt hơn, xin thầy và các bạn gởi về mail:
nhom1xlaspkt@gmail.com

4.2 HƯỚNG PHÁT TRIỂN ĐỀ TÀI:

 Mở rộng có thể nhận diện được nhiều biển số .


 Xuất thông tin chủ xe.
 Thêm giao diện.
 Hoàn thiện và đem sản phẩm vào sử dụng thực tế

NHÓM:1
29
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

TÀI LIỆU THAM KHẢO

1. “Giáo trình XỬ LÝ ẢNH” TS.NGUYỄN THANH HẢI


2. https://www.mathworks.com/products/matlab.html
3. https://www.mathworks.com/matlabcentral/answers/114669-how-to-create-a-mat-file
4. https://vutienit.com/lap-trinh-matlab-gui-lam-quen-giao-dien-gui-trong-matlab/

NHÓM:1
30
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

CODE
Code chính:
% close all;
% clear all;
global im;
global duongdan;
global imbin;

im = imread(duongdan);

im = imresize(im, [480 NaN]);

imbin = im2bw(im);

im = edge(imbin, 'sobel');

im = imdilate(im, strel('diamond', 2));

im = imfill(im, 'holes');

im = imerode(im, strel('diamond', 10));

Iprops=regionprops(im,'BoundingBox','Area', 'Image');
area = Iprops.Area;
count = numel(Iprops);
boundingBox = Iprops.BoundingBox;
for i=1:count
if area<Iprops(i).Area
area = Iprops(i).Area;
boundingBox = Iprops(i).BoundingBox;
end
end

im = imcrop(imbin, boundingBox);

im = imresize(im, [240 NaN]);

im = ~im;

Iprops=regionprops(im,'BoundingBox','Area', 'Image');
count = numel(Iprops);
global noPlate;
noPlate=[];

[h, w] = size(im);

for i=1:count
ow = length(Iprops(i).Image(1,:));
oh = length(Iprops(i).Image(:,1));
if ow<(h/2) & oh>(h/3)
letter=readLetter(Iprops(i).Image);
noPlate=[noPlate letter];

NHÓM:1
31
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

end
end

Tạo thư viện ảnh:

%CREATE TEMPLATES
%Letter
A=imread('char/A.bmp');B=imread('char/B.bmp');
C=imread('char/C.bmp');D=imread('char/D.bmp');
E=imread('char/E.bmp');F=imread('char/F.bmp');
G=imread('char/G.bmp');H=imread('char/H.bmp');
I=imread('char/I.bmp');J=imread('char/J.bmp');
K=imread('char/K.bmp');L=imread('char/L.bmp');
M=imread('char/M.bmp');N=imread('char/N.bmp');
O=imread('char/O.bmp');P=imread('char/P.bmp');
Q=imread('char/Q.bmp');R=imread('char/R.bmp');
S=imread('char/S.bmp');T=imread('char/T.bmp');
U=imread('char/U.bmp');V=imread('char/V.bmp');
W=imread('char/W.bmp');X=imread('char/X.bmp');
Y=imread('char/Y.bmp');Z=imread('char/Z.bmp');
Afill=imread('char/fillA.bmp');
Bfill=imread('char/fillB.bmp');
Dfill=imread('char/fillD.bmp');
Ofill=imread('char/fillO.bmp');
Pfill=imread('char/fillP.bmp');
Qfill=imread('char/fillQ.bmp');
Rfill=imread('char/fillR.bmp');

%Number
one=imread('char/1.bmp'); two=imread('char/2.bmp');
three=imread('char/3.bmp');four=imread('char/4.bmp');
five=imread('char/5.bmp'); six=imread('char/6.bmp');
seven=imread('char/7.bmp');eight=imread('char/8.bmp');
nine=imread('char/9.bmp'); zero=imread('char/0.bmp');
zerofill=imread('char/fill0.bmp');
fourfill=imread('char/fill4.bmp');
sixfill=imread('char/fill6.bmp');
sixfill2=imread('char/fill6_2.bmp');
eightfill=imread('char/fill8.bmp');
ninefill=imread('char/fill9.bmp');
ninefill2=imread('char/fill9_2.bmp');

%*-*-*-*-*-*-*-*-*-*-*-
letter=[A Afill B Bfill C D Dfill E F G H I J K L M N O Ofill P Pfill Q
Qfill R Rfill S T U V W X Y Z];

number=[one two three four fourfill five six sixfill sixfill2 seven eight
eightfill nine ninefill ninefill2 zero zerofill];

NHÓM:1
32
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

character=[letter number];

NewTemplates=mat2cell(character,42,[24 24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24 ...
24 24 24 24 24 24 24]);

save ('NewTemplates','NewTemplates')
clear all

code đọc kí tự:


function letter=readLetter(snap)
%READLETTER reads the character fromthe character's binary image.
% LETTER=READLETTER(SNAP) outputs the character in class 'char' from the
% input binary image SNAP.

load NewTemplates % Loads the templates of characters in the memory.


snap=imresize(snap,[42 24]); % Resize the input image so it can be compared
with the template's images.
comp=[ ];
for n=1:length(NewTemplates)
sem=corr2(NewTemplates{1,n},snap); % Correlation the input image with
every image in the template for best matching.
comp=[comp sem]; % Record the value of correlation for each template's
character.
%display(sem);

end
vd=find(comp==max(comp)); % Find the index which correspond to the highest
matched character.
%display(max(comp));
%*-*-*-*-*-*-*-*-*-*-*-*-*-
% Accodrding to the index assign to 'letter'.
% Alphabets listings.
if vd==1 || vd==2
letter='A';
elseif vd==3 || vd==4
letter='B';
elseif vd==5
letter='C';
elseif vd==6 || vd==7
letter='D';
elseif vd==8
letter='E';
elseif vd==9
letter='F';

NHÓM:1
33
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

elseif vd==10
letter='G';
elseif vd==11
letter='H';
elseif vd==12
letter='I';
elseif vd==13
letter='J';
elseif vd==14
letter='K';
elseif vd==15
letter='L';
elseif vd==16
letter='M';
elseif vd==17
letter='N';
elseif vd==18 || vd==19
letter='O';
elseif vd==20 || vd==21
letter='P';
elseif vd==22 || vd==23
letter='Q';
elseif vd==24 || vd==25
letter='R';
elseif vd==26
letter='S';
elseif vd==27
letter='T';
elseif vd==28
letter='U';
elseif vd==29
letter='V';
elseif vd==30
letter='W';
elseif vd==31
letter='X';
elseif vd==32
letter='Y';
elseif vd==33
letter='Z';
%*-*-*-*-*
% Numerals listings.
elseif vd==34
letter='1';
elseif vd==35
letter='2';
elseif vd==36
letter='3';
elseif vd==37 || vd==38
letter='4';
elseif vd==39
letter='5';
elseif vd==40 || vd==41 || vd==42
letter='6';
elseif vd==43
letter='7';
elseif vd==44 || vd==45

NHÓM:1
34
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

letter='8';
elseif vd==46 || vd==47 || vd==48
letter='9';
else
letter='0';
end
end

giao diện:
function varargout = untitled(varargin)
% UNTITLED MATLAB code for untitled.fig
% UNTITLED, by itself, creates a new UNTITLED or raises the existing
% singleton*.
%
% H = UNTITLED returns the handle to a new UNTITLED or the handle to
% the existing singleton*.
%
% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in UNTITLED.M with the given input
arguments.
%
% UNTITLED('Property','Value',...) creates a new UNTITLED or raises
the
% existing singleton*. Starting from the left, property value pairs
are
% applied to the GUI before untitled_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to untitled_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 untitled

% Last Modified by GUIDE v2.5 14-Dec-2018 11:46:17

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled_OpeningFcn, ...
'gui_OutputFcn', @untitled_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

NHÓM:1
35
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before untitled is made visible.


function untitled_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 untitled (see VARARGIN)

% Choose default command line output for untitled


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes untitled wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = untitled_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)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in browse.


function browse_Callback(hObject, eventdata, handles)
% hObject handle to browse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[ten thumuc ] = uigetfile('*.jpg', 'Chon File Kieu Text VuTienIT');
global duongdan;
duongdan = strcat(thumuc, ten);

axes(handles.axes1)
axis tight;
imshow(duongdan);
kode4u

% --- Executes on button press in pic1bit.


function pic1bit_Callback(hObject, eventdata, handles)
% hObject handle to pic1bit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

NHÓM:1
36
XỬ LÝ ẢNH NHẬN DIỆN BIỂN SỐ XE

axes(handles.axes2)
cla
axis tight;
global im;
imshow(im);

% --- Executes on button press in notepad.


function notepad_Callback(hObject, eventdata, handles)
% hObject handle to notepad (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global noPlate;
fid = fopen('noPlate.txt', 'wt'); % This portion of code writes the number
plate
fprintf(fid,'%s\n',noPlate); % to the text file, if executed a notepad
file with the
fclose(fid); % name noPlate.txt will be open with the
number plate written.
winopen('noPlate.txt')

function edit1_Callback(hObject, eventdata, handles)


% hObject handle to edit1 (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 edit1 as text


% str2double(get(hObject,'String')) returns contents of edit1 as a
double

% --- Executes during object creation, after setting all properties.


function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (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

NHÓM:1
37

You might also like