4.3.1 Phân vùng ảnh
Phân vùng ảnh là bước then chốt trong xử lý ảnh. Giai đoạn này nhằm phân tích ảnh thành những thành phần có cùng tính chất nào đó dựa theo biên hay các vùng liên thông có thể là cùng mức xám, cùng màu,…
Nếu phân vùng dựa trên các vùng liên thông ta gọi là kỹ thuật phân vùng miền đồng nhất. Nếu ta phân vùng dựa theo biên gọi là kỹ thuật phân vùng biên. Ngoài ra còn có các kỹ thuật khác như phân vùng dựa theo biên độ, phân vùng dựa theo kết cấu. Để phân tích các đối tượng trong ảnh, chúng ta cần phải phân biệt được các đối tượng cần quan tâm với phần còn lại của ảnh. Những đối tượng này có thể tìm được nhờ các kỹ thuật phân đoạn ảnh, theo nghĩa tách phần tiền ảnh ra hậu ảnh.
Có thể hiểu phân vùng là tiến trình chia ảnh thành nhiều vùng, mỗi vùng chứa một đối tượng có thể biểu diễn một hai từ đoạn thẳng tiếp xúc nhau. Ta có phương pháp phân vùng ảnh như sau:
Thuật toán gán nhãn thành phần liên thông:
Kỹ thuật này gán cho mỗi thành phần liên thông của ảnh nhị phân một nhãn riêng biệt. Nhãn thường là các số tự nhiên bắt đầu từ một đến tổng số các thành phần liên thông có trong ảnh. Giải thuật quét ảnh từ trái sang phải và từ trên xuống dưới.
Trong dòng thữ nhất của các pixel, một nhãn duy nhất được gán cho mỗi đường chạy liên tục pixel đen. Với mỗi pixel đen của các dòng tiếp theo, các pixel lân cận trên dòng trước và pixel bên trái được xem xét. Nếu bất kì pixel lân cận nào được gán nhãn, nhãn tương tự được gán cho pixel đen hiện thời, ngược lại nhãn tiếp theo chưa được sử dụng được chọn, thủ tục này tiếp tục cho tới dòng cuối của ảnh.
Ảnh được nhận về là ảnh nhị phân, trong đó có nhiều đối tượng khác nhau ta tiến hành chọn ra đối tượng nào là biển số còn đối tượng nào không phải là biển số. Dựa vào thuật toán gán nhãn liên tiếp các đối tượng cụ thể như sau:
Thuật toán phân vùng ảnh dựa trên kỹ thuật đánh nhãn liên tiếp: Mặt nạ ảnh với 4 điểm lân cận
Mặt nạ ảnh với 8 điểm lân cận
Mặt nạ ảnh với 4 điểm lân cận và 8 điểm lân cận Quy ước khi quét ảnh:
Nếu điểm ảnh có giá trị là 0 thì gọi là điểm ảnh nền Nếu điểm ảnh có giá trị là 1 thì gọi là điểm ảnh nổi Ta chỉ đánh nhãn các điểm ảnh nổi
4.3.2 Trích vùng biển số
Trích ra các đối tượng đem so sánh với điều kiện cụ thể của biển số xe về chiều cao, chiều rộng, tỉ lệ các cạnh, diện tích, trọng tâm,… để thu về vùng biển số.
Dựa vào các thực nghiệm ta thấy chỉ có cùng biển số mới thỏa điều kiện tích nhất định, cong những vùng khác sẽ nhỏ hơn, nhưng trong điều kiện ánh sáng quá chói việc
xác định ngưỡng xám không chính xác sẽ dẫn đến có nhiều vùng có diện tích thỏa điều kiện đưa ra, dẫn đến nhận dạng sai, hoặc không cắt được chính xác vùng biến số, đây cũng là mặt hạn chế của đồ án.
4.4 Phân đoạn biển số
Nhị phân biển số xe là bước quan trọng để nhận dạng biển số xe. Bước này sẽ tìm mức ngưỡng tối ưu, sau đó tiến hành nhị phân hóa ảnh với ngưỡng vừa tìm được (nhằm làm tăng độ tương phản của ký tự với nền biển số).
Hình 4. 3: Nhị phân biển số xe
Biển số được chuẩn hóa về kích thước [240 NaN], sau đó được lấy bù, sau đó chuẩn hóa về hai ảnh có kích thước [120 NaN] để tìm kí tự.
Hình 4. 4: Chuẩn hóa và tìm ký tự
4.5 Nhận dạng biển số 4.5.1 Tạo mẫu ký tự 4.5.1 Tạo mẫu ký tự
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 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 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 với các thành phần của vector đặc trưng.
Qua thực nghiệm đã cắt ra từng ký tựcủa biển số và cho ra kích thước ảnh chuẩn của một ký tự là 24x42. Tiến hành lấy tất cả 15 mẫu ký tự thường được dùng trong biển số xe và 10 mẫu ký tự số. Tổng cổng có 24 mẫu ký tự (24x42) được lưu vào trong hai ma trận mẫu “kytu” va “kyso”. Màu đen tương ứng với bit 0, màu trắng tương ứng với bit 1, như hình 4.5.
Hình 4. 6: Thuật toán tạo mẫu ký tự
4.5.2 Nhận dạng ký tự bằng phương pháp tương quan
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. Thuật toán so sánh mẫu:
Chuẩn hóa ảnh ký tự vừa cắt ra về kích thước 24x42.
Dùng công thức tính hệ số tương quan để tính lần lượt với các mẫu. Lưu các kết quả vừa tìm được vào trong một lớp.
Tìm hệ số tương quan gần bằng 1 nhất trong lớp. Xuất ra ký tự tương ứng với lớp đó.
Hình 4. 7: Thuật toán so sánh mẫu và xuất ký tự Công thức xác định hệ số tương quan:
𝑟 = ∑ ∑ (𝐴𝑚𝑛−𝐴′)(𝐵𝑚𝑛−𝐵′)𝑚 𝑛
√(∑ ∑ (𝐴𝑚𝑛−𝐴′)𝑚 𝑛 2(∑ ∑ (𝐵𝑚𝑛−𝐵′)𝑚 𝑛 2) (4.1)
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
A’ và B’ là giá trị trung bình của ma trận A và B. Ma trận A và B giống nhau khi và chỉ khi r = 1.
Ví dụ: Gọi A là ma trận ảnh chứa ký tự cần nhận dạng là số 1, B là ma trận mẫu số 1, C là ma trận mẫu số 2.
Hình 4. 8: Mẫu ký tự số 1, 2 (42 hàng, 24 cột) Kết quả hệ số tương quan giữa ma trận A với B và A với C: Corr2(A,B) = 1
Corr2(A,C) = 0.3677
Suy ra A và B là 2 ảnh giống nhau, khi đó dựa vào ma trận mẫu là B là ký tự nào thì xuất ký tự đó ra. Hoàn tất quá trình nhận dạng.
Chương 5: KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ 5.1 Kết quả thực hiện
Sau quá trình thiết kế và thi công nhóm đã hoàn thành được mô hình và giao diện quản lý hệ thống trên PC.
Hình 5. 1: Giao diện trên PC và mô hình hệ thống
Và sau khi đã có mô hình và hệ thống, ta sẽ nói về hoạt động và chức năng của hệ thống có thể làm được:
Ở giao diện mới khởi động này thì sẽ không có thông tin nào của xe vì bãi xe chưa hoạt động và chưa có xe trong bãi. Chỉ có 2 camera ngõ ra và ngõ vào hoạt động bình thường thôi.
Tiếp theo, khi có xe vào hệ thống sẽ chụp ảnh của xe ở ngõ vào, phân tích xử lý và đọc đúng biển số xe của khách hàng, đồng thời hiển thị lên dòng chữ “MỜI XE VÀO” và lưu dữ liệu của xe (bao gồm: mã thẻ, biển số xe, thời gian xe vào) vào trong PC.
Hình 5. 3: Giao diện khi có xe vào
Khi có xe ra, hệ thống sẽ chụp ảnh của xe ra, đọc lại biển số của khách hàng, sau đó truy xuất lại dữ liệu tương ứng với mã thẻ, so sánh có đúng với biển số xe hay không, nếu đúng thì mở servo cho xe ra, hiển thị trên màn hình LCD dòng chữ “MỜI XE RA”, “TẠM BIỆT QUÝ KHÁCH, THƯỢNG LÔ BÌNH AN”.
Hình 5. 4: Giao diện khi có xe ra
Trường hợp khi quẹt thẻ, biển số xe ra không giống với dữ liệu ban đầu khi xe vào thì servo sẽ không mở, giữ xe của khách hàng lại và hiển thị dòng chữ “KHÔNG HỢP LỆ”, sau đó chờ nhân viên tới xử lý.
Hình 5. 5: Giao diện khi xe ra không hợp lệ
5.2 Nhận xét – Đánh giá
Sau khi hoàn thiện ta tiến hành chạy thử toàn bộ hệ thống để kiểm tra độ ổn định, cũng như tính chính xác và độ trễ khi điều khiển của hệ thống. Sau quá trình thực nghiệm thì cho thấy hệ thống khi sử dụng một thời gian dài thì mạch điều khiển vẫn chưa ổn định, có thời gian trễ và dễ bị nhiễu.
Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1 Kết luận
Sau thời gian thực hiện đề tài đến nay nhóm đã hoàn thành được các yêu cầu đề ra, đã thiết kế và thi công thành công mô hình bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh, nhận dạng biển số xe trên phần mềm matlab, có giao diện quản lý với những phương pháp và chức năng như sau:
Lập trình Arduino để đọc dữ liệu từ RFID, nhận dữ liệu về để hiển thị LCD và điều khiển động cơ Servo cho xe ra vào.
Sử dụng các chuẩn và phương thức giao tiếp thường gặp là UART. Sử dụng các thuật toán xử lý ảnh để xử lý, tách và nhận dạng biển số.
Ứng dụng công nghệ RFID để đọc và ghi hình ảnh, biển số xe trước và sau khi tách biển số.
Điều khiển động cơ servo để mở thanh barie cho xe ra vào. Ứng dụng phần mểm hỗ trợ xử lý ảnh là matlab.
Tuy nhiên do kiến thức còn hạn hẹp nên không thể tránh khỏi những thiếu xót và nhóm vẫn còn hạn chế về phần thời gian trễ khi quẹt thẻ RFID. (cách vận hành hệ thống nhóm sẽ nêu kỹ trong phần phụ lục 2).
Một số ưu điểm của hệ thống:
Giải quyết cơ bản về vấn đề kẹt xe, mất vé gửi xe, đánh tráo thẻ xe trong các bãi xe truyền thống trước đó.
Giảm rất nhiều thời gian, các khoản chi phí thuê nhân viên quản lý, bảo vệ, thu về được lợi nhuận cao hơn.
Khả năng đọc và ghi lại được dữ liệu nhiều lần. (khi khách hàng trả thẻ và lấy xe ra khỏi bãi có thẻ tái sử dụng lại thẻ với khách hàng mới).
Thẻ RFID rất bền, có thể hoạt động tốt trong các môi trường không thuận lợi như nóng, ẩm, bụi bẩn, ăn mòn, hay có sự va chạm,… tạo được độ tin cậy cao khi sử dụng.
Lưu trữ, kiểm soát được các đội tượng (thông tin của khách hàng) mà không cần phải sắp xếp.
Một số nhược điểm của hệ thống:
Chi phí triển khai cao hơn các bãi xe truyền thống trước đó. Thẻ RFID dễ bị nhiễu sóng trong môi trường nước và kim loại.
Thời gian trễ còn khá lớn (khoảng 2 – 3s), còn trong thực tế các bãi xe lớn thì thời gian trễ rất nhỏ. Vì ở đây là mô hình nên nhóm sử dụng thẻ RFID RC-522
6.2 Hướng phát triển
Để mô hình có thể phát triển trong tương lai nhóm có một số phương án đề xuất sau:
Tích hợp thêm nhiều cảm biến để nâng tính ổn định và đảm bảo cho hệ thống. Lập trình thêm chức năng nhận dạng người lái xe cho hệ thống, tăng cường thêm
tính bảo mật.
Kết hợp thêm các tấm pin năng lượng mặt trời đặt ở bãi xe, hướng tới mục tiêu sử dụng nguồn năng lượng sạch và tiết kiệm.
Upload dữ liệu lên cloud để tránh trường hợp bị mất điện hay hệ thống xảy ra sự cố ngoài ý muốn.
TÀI LIỆU THAM KHẢO Sách:
[1] Giáo trình “Xử lý ảnh – Nguyễn Thanh Hải” – Đại học Sư Phạm Kỹ Thuật Tp.HCM
[2] Giáo trình “Công nghệ nhận dạng vô tuyến RFID – Nguyễn Văn Hiệp” – Đại học Sư Phạm Kỹ Thuật Tp.HCM
[3] Giáo trình “Matlab – Phan Thanh Tao” – Đại học Đà Nẵng
[4] Đồ án tốt nghiệp “Thiết kế, thi công mô hình bãi giữ xe ô tô – Nguyễn Lưu Trọng Đông, Nguyễn Thanh Huy” – Đại học Sư Phạm Kỹ Thuật Tp.HCM
[5] Đồ án tốt nghiệp “Hệ thống bãi giữ xe thông minh ứng dụng công nghệ IoT và RFID – Nguyễn Thanh Bình, Đoàn Nguyễn Như Bảo” – Đại học Sư Phạm Kỹ Thuật Tp.HCM Website: [1] https://www.fecegypt.com/uploads/dataSheet/1522237550_arduino%20uno%20 r3.pdf [2] https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf [3] https://www.vishay.com/docs/37314/lcd020n004l.pdf [4] http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf [5] http://arduino.vn/ [6] https://ww2.mathworks.cn/en/
[7] Mạnh Tùng, “4 bãi giữ xe thông minh được đề xuất xây ở Sài Gòn” VNExpress mục Giao thông, 30/3/2017.
PHỤ LỤC 1: CHƯƠNG TRÌNH 1. Code Arduino #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); char sv; void setup() { Serial.begin(9600); SPI.begin(); while (! Serial); mfrc522.PCD_Init(); } void loop() { sv='0'; if ( mfrc522.PICC_IsNewCardPresent()) { if ( mfrc522.PICC_ReadCardSerial()) {
for (byte i = 0; i <mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i]); } } } } 2. Code Matlab
function varargout = vidu14(varargin) % VIDU14 MATLAB code for vidu14.fig % VIDU14, by itself, creates a new VIDU14 or raises the existing
% singleton*. %
% H = VIDU14 returns the handle to a new VIDU14 or the handle to
% the existing singleton*. %
%
VIDU14('CALLBACK',hObject,eventDat a,handles,...) calls the local
% function named CALLBACK in VIDU14.M with the given input arguments.
%
% VIDU14('Property','Value',...) creates a new VIDU14 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before vidu14_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to vidu14_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 vidu14
% Last Modified by GUIDE v2.5 02-Jun- 2019 04:46:41
% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @vidu14_OpeningFcn, ... 'gui_OutputFcn', @vidu14_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 vidu14 is made visible. function vidu14_OpeningFcn(hObject, ~ , handles, varargin) handles.output = hObject; global vd1 vd2 s s1 s2 ; global data table
table.TD = {}; table.count = 0; data.TD = {}; data.count = 0; delete('EX_LichSuXeVaoRa.xlsx'); delete(instrfind) vd1 = videoinput('winvideo',1,'YUY2_640x480') ; vd1.FramesPerTrigger = 1; vd1.ReturnedColorspace = 'rgb';
img = image (zeros(500,650,3), 'Parent', handles.axes1); preview(vd1,img); vd2 = videoinput('winvideo',2,'YUY2_640x480') ; vd2.FramesPerTrigger = 1; vd2.ReturnedColorspace = 'rgb';
img1 = image (zeros(500,650,3), 'Parent', handles.axes3); preview(vd2,img1); delete(instrfind) s = serial('com4'); s.BytesAvailableFcnMode = 'Byte'; s.BytesAvailableFcnCount = 10; s.Timeout = 0.5; s.InputBufferSize=10; s.BytesAvailableFcn ={@mycallback,handles}; s1= serial('com5'); s1.BytesAvailableFcnMode = 'Byte'; s1.BytesAvailableFcnCount = 10; s1.Timeout = 0.5; s1.InputBufferSize=10; s1.BytesAvailableFcn ={@mycallback,handles}; s2 = serial('com3'); fopen(s); fopen(s1); fopen(s2);
% Update handles structure guidata(hObject, handles);
% UIWAIT makes vidu14 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout =
vidu14_OutputFcn(~, ~, 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