Tải bản đầy đủ (.docx) (20 trang)

MÔ PHỎNG NHẬN DẠNG BIỂN số XE matlab (có code)

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 (523.95 KB, 20 trang )

MÔ PHỎNG NHẬN DẠNG BIỂN SỐ
XE


MỤC LỤC

DANH MỤC CÁC HÌNH VẼ


DANH MỤC CÁC TỪ VIẾT TẮT
RGB

Red Green Blue

RFID

Radio Frequency Identification

CCD

Charge Couple Device


Trang 4/18

CHƯƠNG 1.

TỔNG QUAN VỀ ẢNH SỐ

1.1 Ảnh số
• Điểm ảnh (pixel): là một phần tử của ảnh số tại tọa độ (x,y) với độ xám hoặc


màu nhất định.
• Mức xám: là kết qủa của sự mã hóa tương ứng một cường độ sáng của mỗi
điểm ảnh với một giá trị số của quá trình lượng hóa.
• Ảnh RGB: Được dự trữ trong Matlab dưới dạng một mạng dữ liệu có kích
thước 3 chiều mxnx3 định nghĩa các giá trị màu red, green và blue cho mỗi
pixel riêng biệt. Màu của mỗi pixel được quyết định bởi sự kết hợp giữa các
giá trị R,G,B được lưu trữ trong một mặt phẳng màu tại vị trí pixel.

Hình 1-1: Ảnh RGB

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 5/18



Ảnh nhị phân: Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong
hai giá trị nhị phân 0 hoặc 1. Hai giá trị này tương ứng với bật hoặc tắt. Một
ảnh nhị phân được lưu trữ một mảng logic của 0 và 1.

Hình 1-

2: Ảnh nhị
phân

1.2 Quá trình nhận ảnh qua camera CCD
• Camera CCD sử dụng kỹ thuật CCD để nhận biết hình ảnh. CCD là tập hợp
những ô tích điện có thể cảm nhận ánh sáng đó chuyển tín hiệu ánh sáng
sang tính hiệu số để đưa vào các bộ xử lý.

• CCD thu nhận những hình ảnh thông qua các hệ thống thấu kính của camera.
CCD có hàng ngàn những điểm ảnh sẽ chuyển đồi ánh sáng thành những hạt
điện tích và được số hóa. Đây là một quá trình chuyển đổi tương tự số.
1.3 Giới thiệu về sử dụng Matlab trong xử lý ảnh
• Matlab là một ngôn ngữ rất mạnh và hỗ trợ rất tốt các thao tác làm việc trên
ảnh. Vì vậy việc sử dụng matlab cho các ứng dụng xử lý ảnh gần như là lựa
chọn hàng đầu cho những ai muốn thực hiện các thuật toán xử lý trên phần
mềm. Một số hàm cơ bản trong matlab:
 Imread(): Đọc ảnh.
 Imshow(): Hiển thị ảnh.
 Imwrite(): Lưu ảnh.
 Rgb2gray(): Chuyển ảnh RGB thành ảnh đen trắng.
 Imhist(): Hiển thị biểu đồ của dữ liệu ảnh.

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 6/18

 Imadjust(): Điều chỉnh giá trị cường độ ảnh.
 Im2bw(): Chuyển đổi ảnh xám sang ảnh nhị phân.
1.4

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 7/18

CHƯƠNG 2.


MIÊU TẢ ĐỀ TÀI NHẬN DẠNG BIỂN SỐ XE

1.5 Giới thiệu
Cùng với sự phát triển của khoa học và kỹ thuật. Nhu cầu đi lại của con người ngày
càng tăng, số lượng phương tiện giao thông ngày càng lớn. Để giải quyết vấn đề đó
cần xây dựng một hệ thống tự động quản lý phương tiện giao thông. Một trong
những hệ thống đó là hệ thống nhận dạng biển số xe. Đó là hệ thống có thể đọc và
hiểu các biển số xe một cách tự động, xây dựng hệ thống bằng xử lý ảnh trên phần
mềm Matlab.
1.6 Nguyên lý chung
Đầu tiên cho ảnh chụp từ camera vào, ảnh được chuyển thành ảnh xám và hệ thống
phát hiện vùng biển số, ảnh sẽ được cắt thành hình chữ nhật. Sau đó hệ thống nhị
phân ảnh và so sánh với cở sở dữ liệu. Nếu đúng sẽ nối biển số xe và xuất ra ký tự
theo đúng ảnh biển số xe đã đưa vào.

CHƯƠNG 3.

XÂY DỰNG CHƯƠNG TRÌNH

1.7 Sơ đồ giải thuật
Ảnh vào

Chuyển
Nốithành
biển
số xe.

Phỏng
Nhận Dạng Biển Số Xe
ảnh

So
Nhị
sánh
phân
dữ
Cắt
hình
chữ
ảnh.
liệu.
nhật bao
quanh.


Trang 8/18

1.8 Thuật toán của chương trình
1.1.1 Chọn ảnh từ camera

Hình 3-1: Chọn ảnh
• Chọn các ảnh RGB từ các ảnh chụp camera.
Chọn kiểu ảnh.

Đọc ảnh.

Hiển thị ảnh.

Mô Phỏng Nhận Dạng Biển Số Xe



Trang 9/18

1.1.2 Tách vùng biển số
Gồm 2 giai đoạn:
• Giai đoạn 1: Định vị trí của biển số xe trong ảnh.


Giai đoạn 2: Dùng giải thuật để cắt biển số xe ra khỏi ảnh.

Hình 3-2: Tách vùng biển số
Chuyển thảnh

Cân bằng cường

Lấy kích thước

ảnh xám.

độ ảnh.

ảnh.

Xén ảnh.
Xác định hình
1.1.3 Nhận dạng ký tự
chữ nhật.
• Nhị phân biển số xe.

Mô Phỏng Nhận Dạng Biển Số Xe


Tạo ngưỡng và
kiểm tra.


Trang 10/18

Ảnh RGB được chuyển sang ảnh nhị phân rồi được chuẩn hóa về kích chuẩn,
sau đó tiến hành cắt các ký tự và kết quả của quá trình là một ma trận chứa
các ảnh đen trắng của ký tự.
Hình 3-3: Nhị phân biển số

1.9

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 11/18

• Template Matching
Template Matching là kỹ thuật nhằm phân loại đối tượng dựa vào mức độ
tương tự giữa những đối tượng xem xét mẫu cho trước. Quá trình matching
sẽ được tiến hành bằng cách quét hình mẫu lần lượt từ trái sang phải, từ trên
xuống dưới sao cho tâm của nó di chuyển qua tất cả các vị trí có thể có trong
hình được xem xét và tính giá trị của tham số phân loại tại mỗi vị trí đó. Quá
trình matching được hoàn tất dựa trên cơ sở xem xét với tọa độ từng điểm
ảnh một.

Hình 3-4: Nhận dạng template matching

Mô Phỏng Nhận Dạng Biển Số Xe



Trang 12/18

CHƯƠNG 4.

KẾT QỦA MÔ PHỎNG

1.10 Thiết kế Guide cho chương trình
Hình 4-1: Thiết kế Guide

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 13/18

1.11

Nhận diện đúng ký tự biển số xe
Hình 4-2: Nhận diện đúng ký tự

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 14/18

1.12 Nhận diện sai ký tự biển số xe

HÌNH 4-3: Nhận diện sai ký tự
Giải thích: ảnh không nhận diện được do chương trình chưa cắt được chính xác

vùng ảnh biển số cần nhận dạng từ ảnh chụp camera dẫn đến vùng hình chữ nhật bị
méo do đó quá trình template matching nhận dạng không đúng ký tự.

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 15/18

CHƯƠNG 5.

KẾT LUẬN

1.13 Ưu và nhược điểm
Ưu điểm:
• Dễ dàng sử dụng.
• Chi phí rẻ.
• Tiết kiệm thời gian và nhân công.
Khuyết điểm:
• An toàn chưa cao.
• Không nhận diện được toàn bộ các biển số.
• Vé xe bằng giấy dễ bị mất hay nhàu nát.
1.14 Hướng phát triển
Sử dụng camera chuyên dụng, thẻ RFID để làm vé giữ xe, thu thập thêm nhiều mẫu
ký tự để tăng độ chính xác cho chương trình. Thi công phần cứng để ứng dụng hệ
thống vào thực tế.

CHƯƠNG 6.

Mô Phỏng Nhận Dạng Biển Số Xe



Trang 16/18

TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] Lê Tiến Thường, Xử lý số tín hiệu & Wavelets. Tp.HCM, NXB ĐH Quốc Gia
Tp.HCM, 2004.
Tiếng Anh:
[2] www.mathwork.com.

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 17/18

PHỤ LỤC
CODE
function dsdasd_OpeningFcn(hObject, eventdata, handles, varargin)
load data.mat
handles.tren=cell(1,8);
handles.duoi=cell(1,8);
handles.tren{1}=handles.axes9;
handles.tren{2}=handles.axes11;
handles.tren{3}=handles.axes12;
handles.tren{4}=handles.axes13;
handles.duoi{1}=handles.axes14;
handles.duoi{2}=handles.axes15;
handles.duoi{3}=handles.axes16;
handles.duoi{4}=handles.axes17;
handles.duoi{5}=handles.axes18;

handles.output = hObject;
guidata(hObject, handles);
function varargout = dsdasd_OutputFcn(hObject, eventdata, handles)
function pushbutton1_Callback(hObject, eventdata, handles)
global rgb
[filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.gif';'*.*'}, 'Pick an Image File');
%chon kieu anh
rgb= imread([pathname,filename]); %doc anh
axes(handles.axes1); %show tren axes1
imshow(rgb); %hien thi anh
function select_Callback(hObject, eventdata, handles)
global rgb
global y
gray=rgb2gray(rgb); % chuyen anh mau thanh anh xam
gray=imadjust(gray);% can bang cuong do sang
[row,col]=size(gray);% Lay kich thuoc anh
cp=[round(row/2),round(col/2)];% toa do diem tam

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 18/18

de=round(0.01*row);% khoang cong tru
cm1=cp(1)-de:cp(1)+de;% khoang thoa man theo hang
cm2=cp(2)-de:cp(2)+de;% khoang thoa man theo cot
doituongnho=round(0.02*row*col);% so diem anh doi tuong nho
biensonho=[round(0.08*row),round(0.08*19*row/14)];% bien so duoc cho la nho
thresh=0; % khoi tao nguong
check=0; % khoi tao kiem tra

while check==0
thresh=thresh+0.01;
if thresh==1
msgbox('Khong phat hien duoc bien so');
break;
else
bw=im2bw(gray,thresh);
bw=bwareaopen(bw,doituongnho);
bw=imfill(bw,'holes');
bw=imclearborder(bw,4);
bw=imopen(bw,strel('rectangle',biensonho));
[L,n]=bwlabel(bw);
end
if n>0
for i=1:n
[row1,col1]=find(bw==i);
a=sum(ismember(cm1,row1));
b=sum(ismember(cm2,col1));
stat=regionprops((L==i),'BoundingBox');%xac dinh hinh chu nhat bao
quanh
try
mat=stat.BoundingBox;
if a>0&&b>0&&mat(4)check=1;
break;
else
check=0;
end
catch e
msgbox(e.message);

end
end
end
end
if thresh<1
rgbcrop=imcrop(rgb,mat);

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 19/18

y=rgbcrop;
else
y=rgb;
end
axes(handles.axes2);
imshow(y);
function y = my_num_recog( bw,numbers)
n1=length(numbers);
s1=zeros(1,n1); %tao ma tran cac phan tu deu la 0
for i=1:n1
tem1=abs(numbers{i,1}-bw);
tem2=sum(sum(tem1));
s1(i)=tem2;
end
x=s1==min(s1);
y=numbers{x,2}(1);
function y = my_char_recog( bw,chars)
n1=length(chars);

s1=zeros(1,n1);
for i=1:n1
tem1=abs(chars{i,1}-bw);
tem2=sum(sum(tem1));
s1(i)=tem2;
end
x=s1==min(s1);
y=chars{x,2}(1);
function nhandang_Callback(hObject, eventdata, handles)
load data.mat
global y
global rgb
[im1, im2]=tach1(y);
n1=length(im1);%Tinh chieu dai cua vecto
if n1>0
S1='';
for i=1:n1
set(gcf,'CurrentAxes',handles.tren{i});
im1{i}=imresize(im1{i},[90,40]);%phong dai anh

Mô Phỏng Nhận Dạng Biển Số Xe


Trang 20/18

switch i
case 1
x=my_num_recog(im1{i},numbers);
S1=cat(2,S1,x);%ket noi cac anh
case 2

x=my_num_recog(im1{i},numbers);
S1=cat(2,S1,x);
case 3
x=my_num_recog(im1{i},chars);
S1=cat(2,S1,x);
case 4
x=my_num_recog(im1{i},numbers);
S1=cat(2,S1,x);
end
imshow(im1{i});
end
end
n2=length(im2);
if n2>0
S2='';
for i=1:n2
set(gcf,'CurrentAxes',handles.duoi{i});
im2{i}=imresize(im2{i},[90,40]);
x=my_num_recog(im2{i},numbers);
S2=cat(2,S2,x);
imshow(im2{i});
end
end
set(handles.text1,'string',sprintf('%s-%s',S1,S2));

Mô Phỏng Nhận Dạng Biển Số Xe




×