Xác định ngưỡng xám

Một phần của tài liệu Nhận diện biển số xe dùng Matlab (Full Code) (Trang 34)

/

3.2.1. Xác định ngưỡng xám

Việc xác định ngưỡng xám rất quan trọng nó quyết định đến khả năng chọn đúng vùng biển số. Chọn chính xác vùng biển số thật sự rất khó ta chỉ có thể xác định chính xác trong một khoảng nào đó. Thông qua lược đồ xám ta nhận thấy vùng biển số thường sẽ có độ sáng tương đối lớn ( từ 100-140 ) vì vậy ta sẽ xác định lược đồ xám lớn nhất trong khoảng này và ngưỡng xám cần chọn sẽ thuộc vùng này nhờ đó ta sẽ giảm được thời gian lặp tìm ngưỡng xám. Kết quả này có được nhờ vào quá trình khảo sát thống kê trên nhiều ảnh và đây là kết quả tối ưu nhất mà ta có thể tìm được.

Ảnh nhị phân là ảnh mà giá trị của các điểm ảnh chỉ có hai giá trị là 0 và 1 (trắng và đen). Để chuyển từ ảnh xám về ảnh nhị phân ta đặt một ngưỡng thích hợp để so sánh. Mức xám của ảnh sẽ được dùng để so sánh với giá trị ngưỡng này. Biểu thức:

0 nếu u < T f(u) =

1 nếu u ≥ T

3.2.3 Chương trình tìm góc nghiêng

Thuật toán dùng kỹ thuật biến đổi Radon ( phần lý thuyết đã trình bày ở trên). Trong bước này ta sử dụng biến đổi Radon để tìm ra các đường thẳng trên hình vẽ. Như đã trình bày ở phần lý thuyết, trước khi thực hiện biến đổi Radon, ta biến đổi ảnh thành ảnh biên nhị phân. Sau đó tìm giá trị Rmax, ứng với Rmax ta có được θ

max, và góc lệch = 90 – θ max.

Trong trường hợp vì lý do nào đó các đường viền nằm ngang không hiện rõ, trong khi đó các đường viền nằm thẳng đứng hiện rõ. Nên giá trị Rmax không phải

là đường biên nằm ngang, mà là đường biên thẳng đứng do đó khi xoay biển số xe sẽ quay ngược. Để giải quyết vấn đề này khi lấy biên ta chọn mức ngưỡng tương đối thấp (0,08) để đảm bảo đường biên nằm ngang xuất hiện.

Trong đó: Theta là một vector gồm các góc quay cần tính biến đổi Radon. R là một ma trận mà mỗi cột của nó là biến đổi Radon R(x’) ứng với 1 góc quay theta.

Xp là vector chứa các tạo độ x’ tương ứng (Xp là như nhau đối với mọi góc quay theta).

Lưu đồ giải thuật chương trình xoay ảnh:

Hình 3.7: Lưu đồ giải thuật chương trình xoay ảnh

3.3 CÁCH LY CÁC KÝ TỰ TRONG BIỂN SỐ3.3.1 Chia biển số thành 2 hàng 3.3.1 Chia biển số thành 2 hàng

Sau đó tách biển số thành 2 hàng trên và dưới, mục đích cách làm này nhằm nhận dạng đúng thứ tự vị trí các ký tự nằm trên biển số. Vì khi biển số bị nghiêng so với thực tế, thuật toán ta chọn hoạt động theo trái qua phải và trên xuống dưới. Nếu không có giải pháp xử lý rất khó thực hiện đúng thứ tự trên biển số. Xây dựng 1 chương trình con dùng để thực hiện việc này.

Phương pháp này dựa vào cách tính điểm ảnh nhị phân trên cùng 1 hàng của ảnh. Nếu hàng đó có tổng các điểm ảnh bằng 0 ta tìm hàng từ trên xuống đến hàng có bằng 0 vậy ta đã có 1 hàng, hàng thứ 2 tìm tương tự như vậy.

Thuật toán:

Bắt đầu từ điểm ảnh ( x, y) đầu tiên (0,0), và đặt là dòng 0.

 Quét đến hết chiều ngang của ảnh trên một giá trị y của ảnh.

 Nếu là phát hiện điểm đen thì lưu giá trị y là đỉnh của hàng đầu tiên.

 Quét đến dòng thứ I mà không phát hiện điểm đen thì đó là dòng cuối. Ta tiến hành tách vùng ảnh từ dòng 0 đến dòng I. đó là hàng thứ nhất của biển số xe.

Hình 3.9: Lưu đồ giải thuật cắt biển số thành 2 hàng

3.3.2 Cắt các ký tự trong 2 hàng

Đòi hỏi cần phải cắt đủ các ký tự. Nếu không đủ các ký tự cần phải mở camera chụp lại biển số.

Hình 3.10: Lưu đồ giải thuật cắt các ký tự

Tiến hành lần lượt với từng hàng biển số dùng kỹ thuật quét ảnh và phân vùng ảnh, sau đó lựa chọn ra các đối tượng trong ảnh sao cho phù hợp với kích thước và diện tích. Chuẩn hóa kích thước các đối tượng sau đó lưu lại các đối tượng vào một mảng, theo thứ tự từ các đối tượng trong biển số từ trái qua phải và từ trên xuống dưới.

3.4 CHƯƠNG TRÌNH NHẬN DẠNG BIỂN SỐ3.4.1 Tạo các mẫu 3.4.1 Tạo các mẫu

Nhận dạng các ký tự có trong ảnh đối tượng. Mô hình nhận dạng biển số xe, dựa vào phương pháp đối sánh mẫu dựa trên đặc trưng.

Xây dựng các mẫu vào các lớp khác nhau, sau đó gắn nhãn cho các lớp này.

Trích chọn đặc trưng:

Đây là bước biểu diễn các mẫu bằng các đặc trưng của đối tượng. Trong quá trình số liệu ảnh sẽ được thu gọn lại. Điều này hết sức cần thiết cho việc tiết kiệm bộ nhớ trong việc lưu trữ và thời gian tính toán. Một phương pháp trích chọn

đặc trưng tốt nếu như nó trích chọn các đặc trưng của đối tượng mà các đặc trưng đó sẽ giúp cho việc phân biệt được các lớp mẫu khác nhau, đồng thời nó cũng biến đổi được các thuộc tính cố hữu của đối tượng hay do các thiết bị thu nhận ảnh tạo ra.

Việc trích chọn các đối tượng đặc trưng của đối tượng là việc lựa chọn ra các yếu tố hình học. Sự biến đổi từng yếu tố riêng có thể làm thay đổi trật tự các đại lượng, điều này có thể làm ảnh hưởng đến việc phân lớp. Vấn đề này thường được giải quyết bằng một phép biến đổi tuyến tính thích hợp đối với các thành phần của vector đặc trưng.

Phân lớp :

Đây là bước quyết định trong quá trình nhận dạng. Tất cả các bước trong quá trình xử lý nhằm mục đích cho việc phân tách các mẫu thành công. Quá trình phân lớp có thể hiểu là quá trình chuyển đổi các số liệu đầu vào định lượng và các số liệu đầu ra định tính. Đầu ra của phân lớp có thể là sự lựa chọn rời rạc một lớp trong số các lớp đã được định nghĩa, hoặc có thể là một vector giá trị thực biểu diễn các giá trị có thể thừa nhận mẫu đó được hình thành từ các lớp tương ứng.

3.4.2 Tiến hành nhận dạng các ký tự

Các ký tự sau khi đã cách ly ta mang chúng phân thành các lớp giống như cách tạo ra các lớp mẫu. Như vậy, ta lựa chọn các lớp ký tự này so sánh lần lượt với các lớp có trong mẫu. Kết quả của mỗi lần so sánh tìm ra hệ số tương quan sau đó tiến hành lưu chúng cùng các lớp khác. Sau khi hoàn tất xong ta tiếp tục chọn trong các lớp xem lớp nào có hệ số tương quan lớn nhất, lớp này có tên gì tương ứng với ký tự nào ta xuất ra màn hình ký tự đó.

Phương pháp này đòi hởi cần phải có hai ảnh cùng kích thước. Công thức xác định hệ số tương quan:

Trong đó Amn là giá trị pixel tại cột m và hàng n, Bmn là giá trị pixel tại cột m và hàng n. và là giá trị trung bình của ma trận A và B.

Ví dụ: A = B = C = 6 2 4 3 7 21 7 6 3 1 3 1 1 0 9 12 12 3 2 1 3 4 1 8 33 88 119 49 0 0 2 2 1 28 132 156 150 90 1 1 2 1 0 14 133 130 144 86 10 10 1 1 0 0 86 112 69 16 2 4 2 1 0 0 18 14 0 0 2 3 3 1 0 0 3 1 2 3 3 3 3 1 0 0 0 1 2 3 4 4 1 1 0 0 0 0 0 2 5 6 2 4 3 7 21 7 6 3 1 3 1 1 0 9 12 12 3 2 1 3 4 1 8 33 88 119 49 0 0 2 2 1 28 132 156 150 90 1 1 2 1 0 14 133 130 144 86 10 10 1 1 0 0 86 112 69 16 2 4 2 1 0 0 18 14 0 0 2 3 3 1 0 0 3 1 2 3 3 3 3 1 0 0 0 1 2 3 4

Corr2(A,B) =1 Corr2(A,C) =0.3677

CHƯƠNG 4

KẾT QUẢ MÔ PHỎNG

4.1 GIAO DIỆN CHƯƠNG TRÌNH4.1.1 Giao diện chương trình 4.1.1 Giao diện chương trình

0 5 11 11 10 7 5 4 4 1 1 5 2 4 3 4 16 4 5 1 1 2 4 18 21 11 5 1 3 2 1 2 27 91 127 56 3 2 3 2 0 7 130 158 146 95 0 2 2 1 0 1 118 140 140 97 4 3 1 1 2 0 63 96 40 8 8 6 2 1 3 1 0 3 4 14 1 0 2 1 2 1 0 12 23 18 0 2 3 1 1 0 0 2 9 5 1 3 2 1

Hình 4.1.1: Giao diện chương trình

Hình 4.1.2: Giao diện khi cặp nhật ảnh nhận dạng

Hình 4.1.3: Kết quả nhận dạng

4.2 QUY TRÌNH NHẬN DẠNG

Quá trình nhận dạng biển số xe được thực hiện theo quy trình sau:

- Bước 1: Ảnh dữ liệu đầu vào (ảnh màu) sẽ được đưa lên giao diện chính.

- Bước 2: Ảnh màu được chuyển thành ảnh trắng đen trước khi đưa vào nhận dạng. - Bước 3: Trích vùng biển số cần nhận dạng từ ảnh trắng đen vừa thu được.

- Bước 5: Lựa chọn và sắp xếp các ký tự của vùng biển số - Bước 6: Nhận dạng ký tự và xuất ra giao diện chương trình

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

KẾT LUẬN

Đồ án thực hiện được các yêu cầu đã đặt ra, nhận dạng đúng biển số xe, tốc độ xử lý tương đối, giao tiếp với phần cứng (camera, webcam). Trong đó vẫn còn nhiều thiếu sót: xử lý chưa chính xác khi biển số bị nghiên, trong các điều kiện ánh sáng…

Kết quả nhận dạng toàn bộ chương trình chỉ ở mức chấp nhận được, khả năng sai lớn nhất của chương trình trong quá trình chạy thử nghiệm là sai mất một kí tự trong các kí tự nhận dạng được. Chính vì vậy, khả năng nhận dạng của chương trình không thể chính xác tuyệt đối.

Các ký tự có độ chính xác không cao thường gặp như: - Chữ D cho ra kết quả số 0.

- Chữ Y cho ra kết quả chữ T. - Số 2 cho ra kết quả chữ Z.

Khi nhận dạng ở trạng thái đáp ứng thực trong quá trình chụp ảnh nếu thu ảnh không rõ nét ( góc ảnh, ảnh bị nhiễu do ánh sáng chiếu vào) thì kết quả vẫn không đạt được mong muốn.

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

Việc khắc phục những mặt hạn chế sẽ cải thiện được chương trình cũng như khả năng đáp ứng thời gian thực.

Trong thực tế, việc điều kiện môi trường xung quanh ảnh hưởng rất lớn đến việc định vị biển số xe, như vậy cần phải thiết lập một môi trường ổn định xung quanh như:

- Cường độ ánh sáng phải thích hợp để ảnh không bị nhiễu.

- Cũng như Camera phải đạt chất lượng tốt có tính cảm biến cao trong mọi điều kiện khách quan.

Khi đáp ứng như trên thì sẽ tăng độ chính xác của chương trình và kết quả nhận dạng tương đối chính xác.

Việc thu thập và tạo ra càng nhiều các kí tự để tăng kích thước tập mẫu cũng tăng độ chính xác của chương trình. Do đó, đây cũng chính là một trong những hướng để cải thiện chương trình.

Trong điều kiện thực tế (kinh phí, thời gian…) ở trạng thái đáp ứng thực ta không thể chụp ảnh tự động thông qua hệ thống cảm biến được.

Chương trình có khả năng ứng dụng cao trong thực tiễn, giúp việc xử lý hình ảnh và dữ liệu trở nên đơn giản và cũng là tiền đề cho các hệ thống nhận dạng tự động. Việc ứng dụng các công nghệ bán dẫn cho các hệ thống nhận dạng tự động làm tăng khả năng đáp ứng thời gian thực, đây cũng chính là hướng phát triển của đề tài.

Kết hợp chương trình vào thực tế với việc quẹt thẻ tự động thu phí hoặc in xuất biển số xe cho khách hàng. Đồng thời ghi chú xe ra vào theo tháng, khách hàng thân thuộc…

PHỤ LỤC

I . CODE CHƯƠNG TRÌNH 1. Chương trình chính

function varargout = NDBSX(varargin)

% NDBSX M-file for NDBSX.fig

% NDBSX, by itself, creates a new NDBSX or raises the existing % singleton*.

% H = NDBSX returns the handle to a new NDBSX or the handle to % the existing singleton*.

% NDBSX('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in NDBSX.M with the given input arguments. % NDBSX('Property','Value',...) creates a new NDBSX or raises the

% existing singleton*. Starting from the left, property value pairs are % applied to the GUI before NDBSX_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application % stop. All inputs are passed to NDBSX_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 NDBSX % Last Modified by GUIDE v2.5 04-May-2011 15:41:28 % Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @NDBSX_OpeningFcn, ...

'gui_OutputFcn', @NDBSX_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 NDBSX is made visible.

% 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 NDBSX (see VARARGIN) % Choose default command line output for NDBSX

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes NDBSX wait for user response (see UIRESUME) % uiwait(handles.figure1);

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

function chon_anh_Callback(hObject, eventdata, handles)

% hObject handle to chon_anh (see GCBO)

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

[filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.gif';'*.*'}, 'Pick an Image File'); S = imread([pathname,filename]);

axes(handles.axes1); imshow(S);

% handles.S=S;

% guidata(hObject, handles);

J=rgb2gray(S);

% chuyen sang anh Gray

[angle, line] = find_angle(J); K=imrotate(J,angle,'bilinear'); axes(handles.axes2); imshow(K); handles.K=K; guidata(hObject, handles); % threshold = graythresh(K); % lay nguong

% imagen =~im2bw(K,threshold);%~ doi bit anh nhi phan,dang mau trang thanh mau den

% axes(handles.axes4); % imshow(imagen);

% handles.imagen=imagen; % guidata(hObject, handles);

% --- Executes on button press in webcam.

function webcam_Callback(hObject, eventdata, handles)

% hObject handle to webcam (see GCBO)

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

a=get(handles.webcam,'String'); axes(handles.axes1);

dev_info = imaqhwinfo('winvideo',1); celldisp(dev_info.SupportedFormats); obj = videoinput('winvideo',1);

set(obj, 'SelectedSourceName', 'input1'); src_obj = getselectedsource(obj);

get(src_obj); preview(obj); w = waitforbuttonpress; S = getsnapshot(obj); imshow(S); delete(obj); handles.S=S; guidata(hObject, handles);

% --- Executes on button press in select.

function select_Callback(hObject, eventdata, handles)

% hObject handle to select (see GCBO)

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

axes(handles.axes2);

% sz = size(S);%hien thi sz thi ra hinh ma tran 1:1

handles.hRect = imrect(gca,[50 5 600 500]); % 2 so

% dau la toa do x,y di chuyen, 2 so sau la chieu rong va chieu cao

handles.api = iptgetapi(handles.hRect);

% tao ra cai khung cat hinh

guidata(hObject, handles);

% --- Executes on button press in crop.

function crop_Callback(hObject, eventdata, handles)

% hObject handle to crop (see GCBO)

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

handles.loc = handles.api.getPosition(); K = handles.K;

handles.img_crop = imcrop(K,handles.loc);

% cat anh S voi kich thuuoc lay o tren khung da chon

I=handles.img_crop; imshow(I);

% handles.I=I;

% guidata(hObject, handles);

% J=rgb2gray(I);% chuyen sang anh Gray % [angle, line] = find_angle(J);

% K=imrotate(J,angle,'bilinear'); % axes(handles.axes3); % imshow(J); % handles.J=J; % guidata(hObject, handles); % imagen=handles.J; threshold = graythresh(I); % lay nguong imagen =~im2bw(I,threshold);

% doi bit anh nhi phan,dang mau trang thanh mau den

axes(handles.axes4); imshow(imagen);

handles.imagen=imagen; guidata(hObject, handles);

% --- Executes on button press in nhandang.

function nhandang_Callback(hObject, eventdata, handles)

% G=handles.J; % h=imhist(I); % h1=h(1:10:256); % horz=1:10:256; % axes(handles.axes10); % bar(horz,h1); imagen=handles.imagen; imagen = bwareaopen(imagen,800);

% loai bo nhung ky tu hay nhung diem nho hon 30 pixels.

Một phần của tài liệu Nhận diện biển số xe dùng Matlab (Full Code) (Trang 34)

Tải bản đầy đủ (DOC)

(66 trang)
w