ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THỐNG TẠI NÚT GIAOTHÔNG SỬ DỤNG ARDUINO....................... ...........................................................................................................................
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THỐNG TẠI NÚT GIAO THÔNG GVHD: ThS Võ Đức Dũng SVTH: Nguyễn Hoàn Hảo Huỳnh Ngọc Giang Tp Hồ Chí Minh - 12/2019 15141148 15141140 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THỐNG TẠI NÚT GIAO THÔNG GVHD: ThS Võ Đức Dũng SVTH: Nguyễn Hoàn Hảo MSSV: 15141148 SVTH: Huỳnh Ngọc Giang MSSV: 15141140 Tp Hồ Chí Minh - 12/2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Hoàn Hảo Huỳnh Ngọc Giang Kỹ thuật Điện Tử Truyền Thơng Đại học quy 2015 MSSV: 15141148 MSSV: 15141140 Chuyên ngành: Mã ngành: 01 Hệ đào tạo: Mã hệ: 01 Khóa: Lớp: 15141DT1A 15141DT2B I TÊN ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG II NHIỆM VỤ Các số liệu ban đầu: - Matlab phiên R2017a - Vi điều khiển Arduino Mega 2560 - video đầu vào Nội dung thực hiện: Xây dựng hệ thống đèn giao thông tự động dựa việc đếm đối tượng qua hình ảnh Đầu vào từ video chứa đối tượng phương tiện giao thơng nói chung Kết đếm gửi xuống vi điều khiển Arduino Mega 2560 để điều khiển cột đèn giao thơng mơ hình Nhóm chúng em thực nội dung sau: Nội dung 1: Tìm hiểu nghiên cứu phần mềm matlab, kit Arduino Mega 2560, cách kết nối Arduino với matlab, xây dựng thư viện cho Arduino Nội dung 2: Tìm hiểu thuật toán phát vật thể, phương tiện giao thơng Nội dung 3: Tìm hiểu, nghiên cứu, xây dựng trình xử lý ảnh đầu vào Nội dung 4: Thiết kế, xây dựng hệ thống đếm phương tiện qua ảnh, lập trình giao diện sử dụng để thu thập liệu gửi liệu xuống kit Arduino Nội dung 5: Thiết kế mơ hình thành phẩm Nội dung 6: Đánh giá kết thực III NGÀY GIAO NHIỆM VỤ: 06/09/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 25/12/2019 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Võ Đức Dũng CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH i TRƯỜNG ĐẠI HỌC SPKT TPHCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC Tp Hồ Chí Minh, ngày 18 tháng 12 năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Nguyễn Hoàn Hảo Lớp: 15141DT2B MSSV: 15141148 Họ tên sinh viên 2: Huỳnh Ngọc Giang Lớp: 15141DT1A MSSV: 15141140 Tên đề tài: ỨNG DỤNG XỬ LÍ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THƠNG TẠI NÚT GIAO THÔNG Xác nhận Tuần/ngày Nội dung GVHD Nhận đề tài, tìm hiểu đề tài (26/8 – 08/9) Tìm hiểu hoạt động arduino matlab (11/9 – 17/9) 3-4-5 Tìm hiểu hàm sử dụng (18/9 – 7/10) 5-6-7 (7/10 – 21/10) 8-9-10 (21/10 – 10/11) 11-12-13 (11/11 – 2/12) 15 (3/12 – 18/12) 16 19/10/2019 Tìm hiểu thuật toán xử lý ảnh đầu vào Lựa chọn linh kiện Xây dựng cách giao tiếp vi điều khiển led đoạn đôi, led đơn Viết lưu đồ chương trình Tiến hành viết chương trình Xây dựng mơ hình Kiểm tra, viết báo cáo,kiểm tra phần cứng Làm slide trình chiếu Hồn thành nhiệm vụ đồ án GV HƯỚNG DẪN (Ký ghi rõ họ tên) ii LỜI CAM ĐOAN Đồ án tốt nghiệp cơng trình tự thực nghiên cứu nhóm chúng em hướng dẫn Thạc sĩ Võ Đức Dũng Các số liệu kết đồ án “ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG” trung thực khơng chép từ cơng trình khác Nhóm chúng em chịu trách nhiệm lời cam đoan Người thực đề tài Nguyễn Hồn Hảo - Huỳnh Ngọc Giang iii LỜI CẢM ƠN Trong thời gian làm đồ án tốt nghiệp, em nhận nhiều giúp đỡ, đóng góp ý kiến bảo nhiệt tình thầy cơ, gia đình bạn bè Em xin gửi lời cảm ơn chân thành đến Th.s Võ Đức Dũng, giảng viên trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, người tận tình hướng dẫn, bảo cho chúng em suốt q trình làm khố luận Em xin chân thành cảm ơn thầy cô giáo trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, thầy cô Bộ môn Điện Tử Công Nghiệp nói riêng dạy dỗ cho em kiến thức môn đại cương môn chuyên ngành, giúp em có sở lý thuyết vững vàng tạo điều kiện giúp đỡ em suốt trình học tập Cuối cùng, em xin chân thành cảm ơn gia đình bạn bè, ln tạo điều kiện, quan tâm, giúp đỡ, động viên em suốt q trình học tập hồn thành đồ án tốt nghiệp Xin chân thành cảm ơn! Người thực đề tài Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang iv MỤC LỤC NHIỆM VỤ ĐỒ ÁN i LỊCH TRÌNH THỰC HIỆN ii LỜI CAM ĐOAN iii LỜI CẢM ƠN iv MỤC LỤC v LIỆT KÊ HÌNH ẢNH viii LIỆT KÊ BẢNG VẼ .xiv TÓM TẮT xv CHƯƠNG TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU ĐỀ TÀI 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN ĐỀ TÀI 1.5 BỐ CỤC CHƯƠNG CƠ SỞ LÝ THUYẾT .5 2.1 GIỚI THIỆU XỬ LÝ ẢNH .5 2.1.1 Quá trình thu nhận ảnh .6 2.1.2 Quá trình tiền xử lý ảnh .6 2.1.3 Quá trình phân đoạn ảnh 2.1.4 Biểu diễn mô tả 2.1.5 Nhận dạng nội suy ảnh 2.1.6 Cơ sở tri thức 2.2 CÁC PHƯƠNG PHÁP XỬ LÝ CƠ BẢN VỚI MỘT SỐ ẢNH ĐỐI TƯỢNG ĐẦU VÀO 2.2.1 Chuyển đổi ảnh màu sang ảnh màu xám 2.2.2 Nhị phân hóa ảnh 10 2.2.3 Các phương pháp lọc nhiễu ảnh nhằm cải thiện ảnh .10 2.2.4 Làm trơn nhiễu lọc tuyến tính 11 2.2.5 Lọc trung bình khơng gian 11 2.2.6 Lọc thông thấp 12 v 2.3 GIỚI THIỆU VỀ MATLAB 14 2.4 CÁC HÀM CƠ BẢN ĐƯỢC SỬ DỤNG .15 2.4.1 Hàm imread() 15 2.4.2 Hàm imshow() imagesc() 15 2.4.3 Hàm rgb2gray() 16 2.4.4 Hàm imadjust() .17 2.4.5 Hàm tự tính ngưỡng để chuyển sang ảnh nhị phân graythresh(), hàm chuyển đổi ảnh nhị phân imbinarize() 18 2.4.6 Hàm imdilate() 18 2.4.7 Hàm imerode() 20 2.4.8 Hàm bwareaopen() 21 2.4.9 Hàm bwlable 21 2.5 GIỚI THIỆU LỊCH SỬ HÌNH THÀNH ARDUINO 21 2.6 GIỚI THIỆU ARDUINO MEGA 2560 23 2.7 KẾT NỐI GIỮA MATLAB VÀ ARDUINO 25 CHƯƠNG TÍNH TỐN VÀ THIẾT KẾ 27 3.1 GIỚI THIỆU 27 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 27 3.2.1 Thiết kế sơ đồ khối hệ thống 27 3.2.2 Thiết kế khối hệ thống 28 3.2.3 Thiết kế mơ hình ngã tư 35 3.2.4 Sơ đồ nguyên lý toàn mạch .35 CHƯƠNG THI CÔNG HỆ THỐNG 38 4.1 THI CÔNG HỆ THỐNG .38 4.1.1 Thi công bo mạch dạng bus .38 4.1.2 Thi cơng cột đèn tín hiệu giao thông .40 4.1.3 Lắp ráp kiểm tra 42 4.1.4 Thiết kế giao diện cho người điều khiển 43 4.2 ĐĨNG GĨI VÀ THI CƠNG MƠ HÌNH 44 4.3 LẬP TRÌNH HỆ THỐNG 45 4.3.1 Lập trình phần mềm matlab .45 4.3.1.1 Sơ đồ khối đếm số lượng phương tiện .45 4.3.1.2 Lưu đồ chi tiết xử lí ảnh đầu vào 45 vi 4.3.2 Lưu đồ tổng quát arduino 47 4.4 GIỚI THIỆU VỀ PHẦN MỀM LẬP TRÌNH 49 4.4.1 Giới thiệu matlab GUI 49 4.4.2 Cách sử dụng matlabGUI 49 4.4.3 Giới thiệu arduino IDE .52 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC…………………….54 CHƯƠNG KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 56 5.1 KẾT QUẢ 56 5.2 NHẬN XÉT - ĐÁNH GIÁ 71 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 72 6.1 KẾT LUẬN 72 6.2 HƯỚNG PHÁT TRIỂN 72 TÀI LIỆU THAM KHẢO PHỤ LỤC vi LIỆT KÊ HÌNH VẼ Hình Trang Hình 2.1 Sơ đồ trình xử lý ảnh Hình 2.2 Chuyển ảnh màu thành ảnh xám .9 Hình 2.3 Lược đồ xám Hình 2.4 Ảnh xám ảnh nhị phân .10 Hình 2.5 Hiển thị ảnh hàm imshow() 16 Hình 2.6 Hiển thị ảnh hàm imagesc() 16 Hình 2.7 Chuyển đổi ảnh màu thành ảnh xám .17 Hình 2.8 Tăng cường độ tương phản anh hàm imadjust() 18 Hình 2.9 Chuyển đổi ảnh xám sang ảnh nhị phân 18 Hình 2.10 Ảnh đầu vào hàm imdilate() 19 Hình 2.11 Ảnh đầu hàm imdilate() 19 Hình 2.12 Ảnh đầu vào hàm imerode() 20 Hình 2.13 Ảnh đầu hàm imerode() 20 Hình 2.14 So sánh ảnh gốc ảnh sau xử lý hàm bwareaopen() 21 Hình 2.15 Máy in 3D Materia 101 22 Hình 2.16 Xe điều khiển từ xa .23 Hình 2.17 Board Arduino Mega 2560 23 Hình 2.18 Sơ đồ chức chân Arduino Mega 2560 .24 Hình 2.19 Giao tiếp máy tính arduino thơng qua chuẩn UART .25 Hình 2.20 Giao tiếp hệ thống dùng chuẩn UART 26 Hình 2.21 Nguyên lý hoạt động chuẩn UART 26 Hình 3.1 Sơ đồ khối hệ thống 27 Hình 3.2 Sơ đồ chân, sơ đồ nguyên lý Led đoạn digit anode chung .30 Hình 3.3 Led đoạn digit thực tế .31 Hình 3.4 Led đơn màu xanh, đỏ, vàng thực tế .32 Hình 3.5 Sơ đồ kết nối Led đơn với điện trở 32 Hình 3.6 Sơ đồ kết nối Led đoạn với điện trở 33 Hình 3.7 IC ổn áp AMS1117 34 Hình 3.8 Mặt mơ hình sau thiết kế .35 Hình 3.9 Mặt mơ hình sau thiết kế 35 Hình 3.10 Sơ đồ ngun lý tồn mạch 37 viii PHỤ LỤC % handles % varargin structure with handles and user data (see GUIDATA) command line arguments to luachonchedo (see VARARGIN) % Choose default command line output for luachonchedo handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes luachonchedo wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = luachonchedo_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 pushbutton1 function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global cd cd = 1; close; Lc_ll; % - Executes on button press in pushbutton2 function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global cd cd = 0; close; DO_AN_TOT_NGHIEP_1; % - Executes during object deletion, before destroying properties function figure1_DeleteFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) out = instrfind; fclose(out); function figure1_CreateFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC % eventdata % handles reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns calle logo = imread('logokhoa.jpg'); imshow(logo); global s; s = serial('COM6'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); % if(strcmp(get(s, 'Status'),'closed')) % fopen(s); % end Giao diện chương trình đk tay function varargout = GIAO_DIEN_1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @ GIAO_DIEN_1OpeningFcn, 'gui_OutputFcn', @ GIAO_DIEN_1OutputFcn, '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 function GIAO_DIEN_1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = GIAO_DIEN_1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function edit_xanh1_Callback(hObject, eventdata, handles) function edit_xanh1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit_xanh2_Callback(hObject, eventdata, handles) function edit_xanh2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btn_bd_Callback(hObject, eventdata, handles) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC global a1; global b1; global s; a = get(handles.edit_xanh1,'String'); b = get(handles.edit_xanh2,'String'); if isempty(str2num(a)) || isempty(str2num(b)) set(handles.edit_xanh1,'String',''); set(handles.edit_xanh2,'String',''); F = msgbox('HAY NHAP DU LIEU SO', 'lOI','error'); else set(handles.btn_bd,'visible','off'); a1 = str2num(['uint8(',a,')']); b1 = str2num(['uint8(',b,')']); fwrite(s,a1); s.BytesAvailableFcn = {@read_data,handles}; end function pushbutton3_Callback(hObject, eventdata, handles) close; chon_che_do; global s; s = serial('COM6'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); function figure1_DeleteFcn(hObject, eventdata, handles) out = instrfind; fclose(out); function read_data(obj, event, handles) global s; global a1; global b1; data = fread(obj,1) if (mod(data,2)==1) fwrite(s,b1); else fwrite(s,a1); end Chương trình nhúng video vào matlab function fig fig2 = gcf; PushButton = uicontrol(fig2, 'Style', 'push', 'String', 'Play', 'Position', [0.0 0.0 50 50], 'CallBack', @play, 'UserData', 0); PushButton1 = 'Position', 'CallBack', 'UserData', uicontrol(fig2, 'Style', 'push', 'String', 'Pause', [50 50 50], @pause, 1); ax11 = subplot(2,1,1, 'Parent', fig2); ax12 = subplot(2,1,2, 'Parent', fig2); function pause(PushButton, EventData) if(strcmp(get(PushButton1,'String'),'Pause')) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC set(PushButton1,'String','Countinue'); uiwait(); else set(PushButton1,'String','Pause'); uiresume(); end end function play(PushButton, EventData) v1 = VideoReader('vua_xe_lan11.mp4'); v2 = VideoReader('vua_xe_lan2.mp4'); i1 = 0; i2 = 0; while i1 < v1.NumberOfFrames || i2 < v2.NumberOfFrames if i1 < v1.NumberOfFrames i1 = i1+1; frame = v1.read(i1); imwrite(frame,'input_1.jpg','jpg'); if ishandle(ax11) image(ax11, frame); title(ax11,'LÀN 1'); else break; %axes is gone, figure is probably gone too end else i1=0; end if i2 < v2.NumberOfFrames i2 = i2+1; frame2 = v2.read(i2); imwrite(frame2,'input_2.jpg','jpg'); if ishandle(ax12) image(ax12, frame2); title(ax12,'LÀN 2'); else break; %axes is gone, figure is probably gone too end else i2=0; end drawnow end end end - Chương trình điều khiển tay function varargout = GIAO_DIEN_1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @DO_AN_TOT_NGHIEP_1_OpeningFcn, 'gui_OutputFcn', @DO_AN_TOT_NGHIEP_1_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 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC gui_mainfcn(gui_State, varargin{:}); end function DO_AN_TOT_NGHIEP_1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = DO_AN_TOT_NGHIEP_1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function edit_Sgiayxanh1_Callback(hObject, eventdata, handles) function edit_Sgiayxanh1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit_Sgiayxanh2_Callback(hObject, eventdata, handles) function edit_Sgiayxanh2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btn_bd_Callback(hObject, eventdata, handles) global a1; global b1; global s; a = get(handles.edit_Sgiayxanh1,'String'); b = get(handles.edit_Sgiayxanh2,'String'); if isempty(str2num(a)) || isempty(str2num(b)) set(handles.edit_Sgiayxanh1,'String',''); set(handles.edit_Sgiayxanh2,'String',''); F = msgbox('HAY NHAP DU LIEU SO', 'lOI','error'); else set(handles.btn_bd,'visible','off'); a1 = str2num(['uint8(',a,')']); b1 = str2num(['uint8(',b,')']); fwrite(s,a1); s.BytesAvailableFcn = {@read_data,handles}; end function pushbutton3_Callback(hObject, eventdata, handles) close; luachonchedo; function figure1_CreateFcn(hObject, eventdata, handles) img = imread('logo.png'); img2 = imresize(img, [200 1400]); imshow(img2); global s; s = serial('COM3'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); function figure1_DeleteFcn(hObject, eventdata, handles) out = instrfind; fclose(out); function read_data(obj, event, handles) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC global s; global a1; global b1; data = fread(obj,1) if (mod(data,2)==1) fwrite(s,b1); else fwrite(s,a1); end - Chương trình xử lý với lưu lượng xe bình thường function varargout = guiit_xe(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @guiit_xe_OpeningFcn, 'gui_OutputFcn', @guiit_xe_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 function guiit_xe_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = guiit_xe_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btn_bd_Callback(hObject, eventdata, handles) set(handles.btn_bd,'visible','off'); global s; global anhnen_lan1; global anhnen_lan2; img = imread('logo.png'); img2 = imresize(img, [200 1400]); imshow(img2,'Parent',handles.axes4); %===??c ?nh n?n==== anhnen_lan1 = imread('hinhnenitxel1.jpg'); anhnen_lan2 = imread('hinhnenitxel2.jpg'); %===??c ?nh ??u vào 1======= MV = imread('input_1.jpg'); MV1 = anhnen_lan1; A = double(rgb2gray(MV));%chuy?n sang ?nh xám B= double(rgb2gray(MV1));% [height, width] = size(A);%l?y kích th??c ?nh %=== so sánh ?nh === thresh=33; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg);%t?ng ?? t??ng ph?n level=graythresh(sd);%l?y ng??ng ?? nh? phân ?nh bw=imbinarize(sd,level); se = strel('square',8); anh_mo_rong = imdilate(bw,se);%m? r?ng ?i?m ?nh se = strel('square', 10);%l?c nhi?u filteredForeground = imopen(anh_mo_rong, se); bw_0= filteredForeground; anh_lap_lo=imfill(bw_0,'holes');%l?p l? tr?ng ??i t??ng anh_xoa = bwareaopen(anh_lap_lo,1000);%xóa ??i t??ng nh? labeled = bwlabel(anh_xoa,8);%?ánh nhãn ??i t??ng blobMeasurements = regionprops(labeled,'all');%l?y thông tin ??i t??ng ? ánh nhãn numberofcars = size(blobMeasurements, 1);%l?y s? l??ng ??i t??ng ? nh axes(handles.axes1); MV2 = imresize(MV, [700 1200]); imshow(MV2,'Parent',handles.axes1);%hi?n th? ?nh axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11);%hi?n th? k?t qu? sau x? lý set(handles.ed_slxe,'String',numberofcars);%hi?n th? s? l??ng ??i t?? ng ??m ???c set(handles.ed_lanxe,'String','LÀN 1');%hi?n th? xe ?ang x? lý %quy ??i hi?n th? th?i gian ?èn xanh if (numberofcars