1
LỜI NÓI ĐẦU
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 người thực hiện xin trình bày một phần
trong ứng dụng của xử lý và nhận dạng số là CẮT BIỂN SỐ TRONG NHẬN
DẠNG BIỂN SỐ XE.
2
LỜI CẢM ƠN!
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc tới thầy Đàm Thanh
Phương đã nhiệt tình hướng dẫn em hoàn thành tốt nhiệm vụ trong thời gian
thực tập.
Trong quá trình thực tập, cũng như là trong quá trình làm bài báo cáo thực
tập, khó tránh khỏi sai sót rất mong các thầy cô bỏ qua. Đồng thời do trình độ lý
luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo không thể
tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng góp của thầy, cô
để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn bài báo cáo
tốt nghiệp sắp tới.
Em xin chân thành cảm ơn!
3
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
Thái Nguyên, ngày........tháng.........năm 2019
Giáo viên hướng dẫn
4
MỤC LỤC
5
CHƯƠNG I – CƠ SỞ LÝ THUYẾT
1.1 Tổng quan về ngôn ngữ lập trình MATLAB
MATLAB
là ngôn ngữ
lập trình do
MathWorks
phát
triển, cho
phép
người
dùng
xây
dựng
ma trận,
vẽ đồ
thị
hàm
số
hay biểu
đồ
dữ
liệu,
thực hiện các phép toán, tạo các giao diện người dùng, liên kết các chương trình
máy tính được viết trên nhiều ngôn ngữ khác nhau, bao gồm cả C, C++, Java, và
FORTRAN, phân tích dữ liệu, phát triển các thuật toán, tạo ra các mô hình và
ứng dụng.
MATLAB được tích hợp nhiều lệnh và các hàm toán học, giúp người
dùng thực hiện tính toán các con số, vẽ đồ thị và thực hiện các phương pháp số.
1.1.1 Các Phép Tính Toán Của MATLAB
MATLAB được sử dụng rộng rãi trong mọi khía cạnh tính toán. Dưới đây
là một số phép tính toán MATLAB được sử dụng phổ biến nhất:
- Giải quyết các vấn đề ma trận và mảng.
- Đồ thị 2-D và 3-D.
- Đại số tuyến tính.
- Phương trình đại số.
- Các hàm phi tuyến tính.
- Số liệu thống kê.
- Phân tích dữ liệu.
- Giải tích và phương trình vi phân.
- Tính toán số.
- Tích phân.
- Chuyển đổi.
6
- Hồi quy.
- Các hàm đặc biệt khác.
1.1.2 Các Tính Năng Của MATLAB
Dưới đây là các tính năng cơ bản của MATLAB:
- MATLAB là ngôn ngữ lập trình cao cấp, cho phép tính toán các con số,
hình dung và phát triển ứng dụng.
- Cung cấp môi trường tương tác để khảo sát, thiết kế và giải quyết các
vấn đề.
- Cung cấp thư viện lớn các hàm toán học cho đại số tuyến tín, thống kê,
phân tích Fourier, bộ lọc, tối ưu hóa, tích phân và giải các phương trình vi phân
bình thường.
- MATLAB cung cấp các đồ thị được tích hợp sẵn để hiển thị hình ảnh dữ
liệu và các công cụ để tạo đồ thị tùy chỉnh.
- Giao diện lập trình của MATLAB cung cấp các công cụ phát triển để
nâng cao khả năng bảo trì chất lượng mã và tối đa hóa hiệu suất.
- Cung cấp các công cụ để xây dựng các ứng dụng với các giao diện đồ
họa tùy chỉnh.
- Cung cấp các hàm để tích hợp các thuật toán dựa trên MATLAB với các
ứng dụng bên ngoài và các ngôn ngữ khác như C, Java, NET và Microsoft
Excel.
1.1.3 Sử Dụng MATLAB
MATLAB được sử dụng rộng rãi như công cụ tính toán trong các lĩnh vực
khoa học và kỹ thuật, bao gồm các lĩnh vực vật lý, hóa học, toán học và công
nghệ. MATLAB được sử dụng trong một loạt các ứng dụng bao gồm:
- Xử lý tín hiệu và truyền thông.
- Xử lý hình ảnh và video.
- Hệ thống điều khiển.
- Kiểm tra và đo lường.
- Tính toán tài chính.
- Tính toán sinh học.
1.2 Các kiểu ảnh trong matlab
Image Processing Toolbox của MATLAB hỗ trợ bốn kiểu biểu diễn
hình ảnh cơ bản, gồm: ảnh chỉ số (indexed images), ảnh độ sáng (grayscale
images), ảnh nhị phân (binary images), ảnh RGB (RGB images).
7
1.2.1 Ảnh Index
Với cách biểu diễn ảnh này, mỗi ảnh sẽ đượ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 màu là một ma trận kích thước m x 3 gồm các phần tử kiểu
double có giá trị trong khoảng [0, 1]. Mỗi hàng của ma trận xác định các 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.
Ma trận dữ liệu có thể thuộc kiểu unit8, unit16 hoặc double. Giá trị của
một phần tử trong ma trận dữ liệu cho biết màu của điểm ảnh đó là màu nằm ở
hàng nào trong ma trận màu.
Nếu ma trận dữ liệu thuộc kiểu double, giá trị thứ nhất sẽ tương ứng với
hàng thứ nhất trong bảng màu, giá trị thứ hai tương ứng với màu ở hàng thứ
hai, ... Nếu ma trận dữ liệu thuộc kiểu unit8 hoặc unit16 giá trị 0 ứng với hàng
1, giá trị 1 ứng với hàng 2, ... Riêng với kiểu unit16 MATLAB không hỗ trợ đủ
các phép toán so với kiểu unit8 nên khi cần xử lý ta cần chuyển sang kiểu dữ
liệu uint8 hoặc double bằng các hàm imapprox hoặc im2double.
Hình 1.1 Minh họa cách biểu diễn ảnh theo chỉ số
1.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 độ sáng (hay mức xám) của điểm ảnh đó. Ma trận này có
thể là 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”.
8
Hình 1.2 Ma trận ảnh grayscale
1.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).
Hình 1.3 Minh họa ma trận màu ảnh nhị phân
1.2.4 Ảnh RGB
Ảnh RGB còn gọi là ảnh “true color” 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.
9
Hình 1.5 Ma trận màu ảnh RGB
1.3 Các hàm xử lý ảnh cơ bản của MATLAB
1.3.1 Hàm đọc dữ liệu ảnh “imread”
Lệnh imread() sẽ đọc một file ảnh thành một ma trận. Matlab trợ giúp rất
nhiều định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG, TIFF …
Cú pháp: a = imread(‘filename.fmt’) trong đó:
- filename là tên của ảnh
- fmt là định dạng ảnh
Ví dụ: a = imread(‘sun-flower.jpg’);
10
Hình 1.6 Hàm imread()
Ví dụ trên đọc một file ảnh có tên “car.jpg” bằng hàm imread() sẽ có kết
quả là một ma trận 526x350 với 3 thành phần màu cơ bản RGB.
1.3.2 Hàm hiển thị ảnh imshow() và imagesc()
Để hiển thị hình ảnh trong matlab ta dùng 2 lệnh imshow() và imagesc().
Lệnh imshow() cho chúng ta một hình ảnh trong định dạng tiêu chuẩn là 8-bit,
giống như trong một trình duyệt web. Lệnh imagesc() hiển thị các hình ảnh trên
các trục đồ thị với giá trị min là màu đen và giá trị max là màu trắng.
Cú pháp: a = imread(‘x.jpg’);
imshow(a);
imagesc(a);
Ví dụ: Dùng lệnh imshow() và lệnh imagesc() để hiển thị ảnh ta được kết
quả sau:
11
12
Hình 1.7 Hiển thị ảnh bằng lệnh imshow()
Hình 1.8 Hiển thị ảnh bằng lệnh imagesc()
13
1.3.3 Hàm rgb2gray()
Lệnh rgb2gray() chuyển đổi hình ảnh RGB thành ảnh trắng đen bằng
cách loại bỏ các thông tin màu sắc và độ bão hòa nhưng vẫn giữ độ sáng.
Cú pháp: a = imread(‘x.png’);
gray = rgb2gray(a);
imshow(gray);
Hình 1.9 Trước (trái) và sau (phải) khi dùng lệnh rgb2gray()
1.3.4 Hiển thị các thành phần RGB riêng của hình ảnh
Cú pháp:
subplot(131);
imagesc(img(:,:,1));
title('Red');
subplot(132);
14
imagesc(img(:,:,2));
title('Green');
subplot(133);
imagesc(img(:,:,3));
title('Blue');
Hình 1.10 Các thành phần màu của ảnh RGB
15
CHƯƠNG II – QUY TRÌNH XỬ LÝ CẮT BIỂN SỐ
2.1 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. Quá trình tách biển số xe được chia làm 2 giai đoạn chính:
Giai đoạn 1: Định vị vị trí của biển số từ ảnh đầu vào
Giai đoạn 2: Dùng các giải thuật để cắt biển số xe ra khỏi ảnh đã cho
Hình 2.1 Tổng quan các bước tách biển số
Việc định vị biển số xe dựa vào các tính chất của biển số như: hình dạng,
màu sắc của biển số so với nền. Biển số xe có hình chữ nhật với kích thước
chiều dài và rộng không thay đổi. Từ đó chúng ta có thể tìm các vùng có hình tứ
giác trong hình, tính tỉ lệ giữa hai chiều của hình so với khoảng giá trị cho trước
để xem thử vùng đó có chứa biển số hay không. Ngoài ra, định vị biển số còn
dựa trên màu sắc của biển số. Hầu hết các biển số xe Việt Nam đều nền trắng,
chữ đen. Kết hợp hai tính chất trên, chúng ta xác định được vùng chứa biển số.
Sau khi định vị biển số xe, chúng ta tiến hành cắt biển số xe.
Phần tách biển số sử dụng giải thuật và phương pháp xử lý đối với ảnh
số như sơ đồ sau đây:
16
Làm loãng ảnh
Hình 2.2 Sơ đồ các bước cắt biển số xe
2.2 Làm loãng ảnh
Vì biển số màu trắng nên người thực hiện sẽ nhị phân hóa ảnh bằng cách
gắn giá trị cho các pixel trắng là 1, còn ngược lại là 0. Đầu tiên, chúng ta sẽ biến
đổi ảnh gốc thành ảnh xám (có mức sáng từ 0 đến 255), sau đó loại bỏ các thành
phần nhiễu đề thu được ảnh gần giống với ảnh nhị phân nhất.
17
Dưới đây là sơ đồ thuật giải của bước tìm và loại bỏ nhiễu(làm loãng
ảnh):
Hình 2.3 Sơ đồ các bước làm loãng ảnh
2.3 Xử lý ngang, dọc thông qua các bộ lọc và ngưỡng
2.3.1 Bộ lọc thông thấp (Low Pass Filter)
Khái niệm bộ lọc trong miền tần số tương tự như khái niệm mặt nạ trong
miền không gian. Sau khi chuyển ảnh sang miền không gian, ta áp dụng một số
bộ lọc trong quy trình lọc ảnh nhằm làm mờ ảnh, nhiễu ảnh, làm nét ảnh.
Các bộ lọc ảnh thấp thông dụng:
Lọc thông thấp Ideal
Lọc thông thấp Gauss
Lọc thông thấp Butterworth
18
2.3.1.1 Lọc thông thấp Ideal
Là phép lọc 2 chiều đi qua tất cả tần số mà không làm giảm chúng trong
bán kính đường tròn tính từ tâm phép lọc và “chặt cụt” tất cả tần số bên ngoài
hình tròn này.
Bộ lọc này xác định như sau:
(CT 2.1)
với là hằng số dương và D(u,v) là khoảng cách giữa điểm (u,v) trong miền tần
số và tâm của hình chữ nhật tần số, tức:
(CT 2.2)
với P và Q là kích thước ảnh.
Bây giờ ta sẽ lọc ảnh sau:
Hình 2.4 Ảnh gốc
Ta tạo bộ lọc thông thấp Ideal có kích thước như ảnh trên, sử dụng công
thức (CT 2.2) với = 1.
Input: ảnh cần lọc
Output: ảnh sau khi dùng bộ lọc thông thấp Ideal
1
%khai báo ảnh vào, biến kiểu double
2
f=imread(‘moon.jpg’);
3
f=double(f);
4
P=size(f,1);
%Tạo bộ lọc có kích thước bằng với ảnh
5
Q=size(f,2);
6
=30; %bán kính
7
h=zeros(P,Q);
8
9
for i=1:P
10
for j=1:Q
11
if((i-P/2)^2 + (j-Q/2)^2<=^2
19
12
h(i,j)=1;
13
end
14
end
15 end
Ảnh của bộ lọc thông thấp Ideal:
Hình 2.5 Ảnh của bộ lọc thông thấp Ideal trong miền không gian
Hình 2.6 Tần số của ảnh trước (trái) và sau (phải) khi lọc Ideal
Nhận xét: Hình 2.6 cho thấy sau khi lọc, tần số của ảnh đã được kéo giãn
ra, điều đó có nghĩa nhiều tần số cao đã được kéo xuống.
2.3.1.2 Lọc thông thấp Gauss
Đặc trưng cho nhiễu đó là hàm mật độ xác suất thể hiện sự phân bố của
nhiễu. Ta sử dụng hàm phân phối Gauss làm bộ lọc nhằm làm mờ ảnh và giảm
nhiễu. Trong trường hợp 1 chiều, phân phối Gauss có công thức:
20
(CT 2.3)
với là độ lệch chuẩn của phân phối, ta giả sử phân phối này có trung bình là 0.
Hình 2.7 Đồ thị phân phối Gauss
Khi xử lý ảnh, ta sẽ sử dụng hàm phân phối Gauss cho 2 chiều, hình thành
bằng tích của 2 hàm Gauss 1 chiều x và y.
(CT 2.4)
Bộ lọc thông thấp Gauss có dạng:
(CT 2.5)
với D(u,v) là khoảng cách từ điểm (u,v) đến tâm hình.
Ta sẽ xử lý ảnh sau với phép lọc thông thấp Gauss
Hình 2.8 Ảnh gốc
21
Input: ảnh cần lọc
Output: ảnh sau khi dùng bộ lọc thông thấp Gauss
P = size(f,1);
%tạo bộ lọc có kích thước bằng với ảnh.
Q = size(f,2);
h = zeros(P,Q);
1
2
3
4
5
sig = 10; %gán =10
6
a = 1/(2.*pi.*sig);
7
b = 2.*sig.*sig;
8
9
for i = 1:P
10
for j = 1:Q
11
D = (i-P./2/^2 + (j – Q./2).^2; %k/c (x,y)-> tâm
hình
12
h(i,j)=a*exp(-D./b);
13
end
14 end
Ảnh bộ lọc thông thấp Gauss
22
Hình 2.9 Ảnh qua bộ lọc thông thấp Gauss
Hình 2.10 Tần số ảnh trước (trái) và sau (phải) khi lọc Gauss
Nhận xét: Độ biến thiên tần số của ảnh sau khi lọc bằng phương pháp
Gauss ít hơn ảnh gốc, đồng thời các giá trị tần sô ảnh sau khi lọc cao hơn ảnh
gốc. Phép lọc thông thấp Gauss này cho ảnh mượt hơn phép lọc thông thấp
Ideal.
2.3.1.3 Lọc thông thấp Butterworth
Bộ lọc này bao gồm các tính chất của lọc thông thấp Ideal và lọc thông
thấp Gauss. Bộ lọc thông thấp Butterworth có dạng sau:
(CT 2.6)
Trong đó:
- D(u,v) là khoảng cách từ tâm ảnh đến điểm (u,v) (giống như trong lọc thông
thấp Ideal).
- là tần số chặt cụt.
- n là cấp của bộ lọc.
Từ dạng của bộ lọc, ta có những tính chất sau
- Với D(u,v) << , H 1
- Với D(u,v) >> , H 0
- Với D(u,v) = , H = ½
23
Bây giờ, ta sử dụng bộ lọc này để lọc ảnh sau:
Hình 2.11 Ảnh gốc
Khởi tạo bộ lọc có kích thước PxQ (bằng kích thước hình ban đầu)
Input: ảnh cần lọc
Output: ảnh sau khi dùng bộ lọc thông thấp Butterworth
1
h = zeros(P,Q);
2
D0 = 10; %Chọn tần số chặt cụt
3
n = 5;
%chọn cấp
4
5
for i = 1:P
6
for j = 1:Q
7
u = sqrt((i-P/2)^2 + (j-Q/2)^2);
8
h(i,j) = 1/(1+(u/D0).^(2.*n));
9
end
10 end
24
Khi đó, ta được ảnh sau khi dùng bộ lọc trong miền không gian và miền
tần số là:
Hình 2.12 Bộ lọc Butterworth trong miền không gian (trái) chuyển sang miền
tần số (phải)
Sử dụng thuật toán (CT 2.6), ta tích chập ảnh gốc trong miền tần số và bộ
lọc trong miền tần số, sau đó lấy chuyển đổi ngược. Ta được hình ảnh sau khi
lọc là:
Hình 2.13 Ảnh sau khi dùng bộ lọc Butterworth
25