MÔ PHỎNG NHẬN DẠNG BIỂN số XE matlab (có code) ...................... MÔ PHỎNG NHẬN DẠNG BIỂN số XE matlab (có code) .......................... MÔ PHỎNG NHẬN DẠNG BIỂN số XE matlab (có code) ........................... MÔ PHỎNG NHẬN DẠNG BIỂN số XE matlab (có code) ......................
Trang 1XE
Trang 2DANH MỤC CÁC HÌNH VẼ
Trang 3RFID Radio Frequency Identification
CCD Charge Couple Device
Trang 4CHƯƠ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• Ả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
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 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 7CHƯƠ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
Mô Phỏng Nhận Dạng Biển Số Xe
Nối biển số xe
So sánh dữ liệu
Nhị phân ảnh
Cắt hình chữ nhật bao quanh
Chuyển thành ảnh Ảnh vào
Trang 81.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
Mô Phỏng Nhận Dạng Biển Số Xe
Trang 91.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ố
1.1.3 Nhận dạng ký tự
• Nhị phân biển số xe
Mô Phỏng Nhận Dạng Biển Số Xe
Lấy kích thước ảnh
Cân bằng cường
độ ảnh
Chuyển thảnh
ảnh xám
chữ nhật
Tạo ngưỡng và kiểm tra
Trang 10Ả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• 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 12CHƯƠ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 131.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 141.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 15CHƯƠ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 16TÀ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 17PHỤ 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 18de=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)<mat(3)
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 19y=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 20switch 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