NHẬN DẠNG VÀ XỬ LÝ ẢNH VẬT THỂ ỨNG DỤNG TRONG ĐIỀU KHIỂN

81 34 0
  • Loading ...
1/81 trang

Thông tin tài liệu

Ngày đăng: 12/06/2018, 13:14

BỘ GIÁO DỤC ĐÀO TẠO TRƢỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP NHẬN DẠNG XỬ ẢNH VẬT THỂ ỨNG DỤNG TRONG ĐIỀU KHIỂN Họ tên sinh viên: ĐẶNG MINH CHỨC PHẠM TRƢỜNG GIANG Niên khóa: 2007-2011 Tháng 5/2011 NHẬN DẠNG XỬ ẢNH VẬT THỂ ỨNG DỤNG TRONG ĐIỀU KHIỂN ĐẶNG MINH CHỨC PHẠM TRƯỜNG GIANG Ts NGUYỄN VĂN HÙNG Tháng 5/2011 i LỜI CẢM ƠN ầy Nguyễ ầ Xin trân trọng Đặng Minh Chức Phạm Trƣờng Giang ii TÓM TẮT Đề tài nghiên cứu “ nhận dạng xử ảnh ứng dụng điều khiển” thực trường Đại Học Nông Lâm Thành Phố Hồ Chí Minh, thời gian tháng từ tháng đến ngày tháng năm 2011 Đề tài thực thành công đạt kết khả quan điều khiển robot đến vị trí nhận dạng thực thao tác hái cà chua Đây xem kết đề tài, để thực tốt kết chúng tơi phải thực thành cơng q trình xử ảnh nhận dạng vật thể, vị trí vật thể khơng gian chiều Webcame thơng qua chương trình Matlab cảm biến SRF10 thông qua vi điều khiển ATMEGA 16 Để từ đó, chúng tơi lấy tín hiệu điều khiển robot Ngồi ra, chúng tơi thiết kế giao diện giao tiếp với người quan sát đồ thị lập trình GUI Matlab cách thân thiện ,dễ hiểu dễ điều khiển iii MỤC LỤC LỜI CẢM ƠN ii TÓM TẮT iii MỤC LỤC iv DANH MỤC HÌNH .vii DANH MỤC VIẾT TẮT .ix Chƣơng MỞ ĐẦU .1 1.1 Đặt vấn đề 1.2 Mục đích Chƣơng TỔNG QUAN 2.1 thuyết xử ảnh 2.1.1 Hệ thống xử ảnh 2.1.1.1 Thu nhận ảnh số hóa 2.1.1.2 Phân tích ảnh 2.1.1.3 Hệ định 2.1.2 Thu nhận ảnh lưu trữ ảnh 2.1.2.1 Thu nhận ảnh .4 2.1.2.2 Lưu trữ ảnh 2.1.3 Phân tích ảnh 2.1.3.1 Khái niệm pixel pixel lân cận .8 2.1.3.2 Mộtsố không gian màu .9 2.1.3.3 Một số công cụ trợ giúp xử ảnh 13 2.1.3.4 Tiền xử ảnh 15 2.1.3.5 Làm trơn ảnh 17 2.1.3.6 Biên phương pháp phát biên 20 2.2 Xác định khoảng cách sóng siêu âm 21 2.2.1 Khái niệm siêu âm 21 2.2.2 Cảm biến siêu âm nguyên tắc TOF 21 2.2.2.1 Cảm biến siêu âm 21 2.2.2.2 Cấu tạo nguyên hoạt động cảm biến siêu âm 22 iv 2.2.2.3 Nguyên tắc TOF 24 2.2.2.4 Ưu điểm nhược điểm cảm biến siêu âm 26 2.2.3 Cảm biến siêu âm SRF10 27 2.3 Phần mềm matlab ứng dụng xử ảnh 30 2.3.1 Khái niệm MATLAB 30 2.3.2 Giao diện Matlab 30 2.3.3 Khả ứng dụng Matlab 31 2.3.4 Hệ thống lệnh xử ảnh Matlab (Matlab Funtion) 32 Chƣơng NỘI DUNG PHƢƠNG PHÁP NGHIÊN CỨU 34 3.1 Bố trí thực đề tài 34 3.1.1 Thời gian 34 3.1.2 Địa điểm 34 3.2 Phƣơng tiện nghiên cứu 34 3.3 Phƣơng pháp nghiên cứu 35 3.3.1 Phương pháp thuyết 35 3.3.2 Phương pháp thực nghiệm 35 Chƣơng KẾT QUẢ THẢO LUẬN 37 4.1 Xây dựng quy trình nhận dạng xử ảnh 37 4.1.1 Quy trình nhận dạng xử ảnh 37 4.1.2 Quy trình xác định khoảng cách sử dụng cảm biến siêu âm 38 4.2 Kết nhận dạng xử ảnh 39 4.2.1 Quá trình nhận dạng xử ảnh 39 4.2.1.1 Sơ đồ khối xử 39 4.2.1.2 Nhận dạng xử ảnh 39 4.2.2 Q trình nhận tín hiệu cảm biến SRF10 46 4.2.2.1 Sơ đồ xử tín hiệu cảm biến 46 4.2.2.2 Kết nối, chuyển đổi hiển thị 46 4.2.3 Kết chương trình 47 4.3 Kết chế tạo điều khiển robot 49 4.3.1 Mơ hình chế tạo robot 49 4.3.2 Kết chế tạo 49 v 4.3.3 Điều khiển robot 50 4.3.4 Kết khảo nghiệm sơ 52 4.4 Nhận xét 54 Chƣơng KẾT LUẬN ĐỀ NGHỊ 55 5.1 Kết luận 55 5.2 Đề nghị 55 TÀI LIỆU THAM KHẢO 56 PHỤ LỤC 57 vi DANH MỤC HÌNH HÌNH 2.1 Sơ đồ hệ thống xử ảnh HÌNH 2.2 Sensor qt dòng CCD HÌNH 2.3 Quy ước tọa độ cho biểu diễn ảnh HÌNH 2-4 Pixel P lân cận P HÌNH 2.5 Mơ hình màu RGB 10 HÌNH 2.6 Các màu gốc bù pha trộn chúng 10 HÌNH 2.7 Sự biến đổi từ RGB thành CMY 11 HÌNH 2.8 Mơ hình màu HSV 12 HÌNH 2.9 Mơ hình màu HLS 13 HÌNH 2.10 Một lân cận kích thước 3x3 quanh điểm (x,y) 16 HÌNH 2.11 Các lân c ận p sử dụng để làm nhẵn ảnh nhị phân 19 HÌNH 2.12 Làm trơn hình ảnh nhị phân 20 HÌNH 2.13 Vùng hoạt động cảm biến siêu âm( nguồn internet) 23 HÌNH 2.14 Khu vực mù cảm biến siêu âm( nguồn internet) 23 HÌNH 2.15 Thời gian truyền nguyên TOF 25 HÌNH 2.16 Tầm quét cảm biến siêu âm 25 HÌNH 2.17 Cảm biến siêu âm SRF10 27 HÌNH 2.18 Sơ đồ kết nối SRF10 28 HÌNH 2.19 Giao diện Matlab 31 HÌNH 3.1 Sơ đồ phương pháp điều khiển robot 35 HÌNH 3.2 Phương pháp điều khiển hồi tiếp 36 HÌNH 4.1 Sơ đồ nhận dạng xử ảnh 37 HÌNH 4.2 Sơ đồ xác định khoảng cách sử dụng cảm biến SRF10 38 HÌNH 4.3 Sơ đồ mạch vi điều khiển 38 HÌNH 4.4 Sơ đồ nhận dạng xử ảnh ứng dụng điều khiển 39 HÌNH 4.5 Hình ảnh thu nhận từ Webcame 40 HÌNH 4.6 Sơ đồ nhận dạng trích đối tượng 40 HÌNH 4.7 Ảnh sau chuyển sang ảnh xám 41 HÌNH 4.8 Ảnh trích xuất gam màu đỏ 42 vii HÌNH 4.9 Sơ đồ q trình xử phân tích ảnh 42 HÌNH 4.10 Ảnh sau lọc trung vị 43 HÌNH 4.11 Lọc bỏ vùng 300px 44 HÌNH 4.12 Ảnh định tâm đóng khung 44 HÌNH 4.13 Xác định khoảng cáchhiển thị tọa độ tới tâm hình 45 HÌNH 4.14 Kết hệ định 45 HÌNH 4.15 Sơ đồ khối q trình nhận tín hiệu cảm biến SRF10 46 HÌNH 4.16 Kết hiển thị hình LCD 47 HÌNH 4.17 Kết hiển thị tín hiệu cảm biến Matlab 47 HÌNH 4.18 Giao diện hiển thị chương trình xử ảnh 48 HÌNH 4.19 Giao diện hiển thị kết hệ thống 48 HÌNH 420 Mơ hình robot ứng dụng xử ảnh 49 HÌNH 4.21 Robot ứng dụng xử ảnh 50 HÌNH 4.22 Giải thuật điều khiển robot 51 HÌNH 4.23 Biểu đồ khảo nghiệm độ phận giải xác định khoảng cách 52 HÌNH 42.4 Biểu đồ thời gian đáp ứng 53 viii DANH MỤC VIẾT TẮT CCD Charge Coupled Device CMOS Complementary Metal-Oxide-Semiconductor GIF Graphics Interchange Format P Pixel CMY Cyan, Magenta, Yellow TOF Time Of Flight RLE Run-Length-Encoded RGB Red, Green, Bule HSL Hue, Saturation, Lightness LED Light Emitting Diode ix PHỤ LỤC Chƣơng trình Matlab xử ảnh function varargout = nhandangmau(varargin) % NHANDANGMAU M-file for nhandangmau.fig % NHANDANGMAU, by itself, creates a new NHANDANGMAU or raises the existing % singleton* % % H = NHANDANGMAU returns the handle to a new NHANDANGMAU or the handle to % the existing singleton* % % NHANDANGMAU('CA LLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in NHANDANGMAU.M with the given input arguments % % NHANDANGMAU('Property','Value', ) creates a new NHANDANGMAU or raises the % existing singleton* Starting from the left, property value pairs are % applied to the GUI before nhandangmau_OpeningFcn gets called An % unrecognized property name or invalid value makes property application % stop All inputs are passed to nhandangmau_OpeningFcn via varargin % % *See GUI Options on GUIDE's Tools menu Choose "GUI allo ws only one % instance to run (singleton)" % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help nhandangmau % Last Modified by GUIDE v2.5 06-Jun-2011 21:53:12 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @nhandangmau_OpeningFcn, 'gui_OutputFcn', @nhandangmau_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 nhandangmau is made visible function nhandangmau_OpeningFcn(hObject, ~, handles, varargin) % 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 nhandangmau (see VARARGIN) 57 % Choose default command line output for nhandangmau handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes nhandangmau wait for user response (see UIRESUME) % uiwait(handles.figure1); set(handles.axes1,'visible','off'); % - Outputs from this function are returned to the command line function varargout = nhandangmau_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) varargout{1} = handles.output; % - Executes on button press in pushbutton1 function pushbutton1_Callback(~, ~, 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) s_port=serial('COM1'); %setup cong com set(s_port,'baudrate',9600); s_port.DataBits =8; s_port.Parity = 'none'; s_port.StopBit = 1; s_port.OutputBufferSize=512; s_port.InputBufferSize=512; s_port.BytesAvailableFcnCount = 1; s_port.Terminator = 'LF'; s_port.ReadAsyncMode = 'continuous'; s_port.BytesAvailableFcnMode = 'Byte'; fopen(s_port); %tat tin hieu nhan slider_step(1) = 0.01/(1-0); % xac dinh day cua truot slider_step(2) = 0.1/(1-0); set(handles.slider1,'sliderstep',slider_step,'max',0.9,'min',0); set(handles.axes1,'visible','on'); vid=videoinput('winvideo',1,'RGB24_1600x1200'); triggerconfig(vid,'manual'); set(vid,'FramesPerTrigger',1 ); set(vid,'TriggerRepeat', Inf); %bat dau thu hinh start(vid); trigger(vid); try while(1) tic % Get the snapshot of the current frame data = getsnapshot(vid); % Now to track red objects in real time % subtract the red component from the grayscale image to extract the red components in the image 58 diff_im = imsubtract(data(:,:,1), rgb2gray(data)); % thay doi data(:,:,thay doi) %Use a median filter to filter out noise diff_im = medfilt2(diff_im, [3 3]); % Convert the resulting grayscale image into a binary image x = 0.1+ get(handles.slider1,'value'); diff_im = im2bw(diff_im,x); %thay doi khoang -> % Remove all those pixels less than 300px diff_im = bwareaopen(diff_im,300); % Label all the connected components in the image bw = bwconncomp(diff_im,8); %sai lenh tiet kiem duoc mb bo nho va nhanh hon so voi sai bwlabel % Measure properties of image regions stats = regionprops(bw, 'BoundingBox', 'Centroid'); % Display the image axes(handles.axes1); imshow(data) hold on %Day la vong lap de dong khung chu nhat khu vuc co mau for object = 1:length(stats) %nhan tin hieu tu cong com (dua vao vong lap chuong trinh chay nhanh hon) bb = stats(object).BoundingBox; %tim gi?i h?n bc = stats(object).Centroid; %tim tr?ng tâm plot(bc(1),bc(2),'-m+') % v? tr?ng tâm v?i Line Specification hinh ch? th?p tai t?a ?? tâm rectangle('Position',bb,'EdgeColor','g','LineWidth',1) % ve hình ch? nh?t bao quanh khu v?c gi?i h?n % strcat: Concatenate strings horizontally (bu?c kich th??c ph?i n?m ngang) % text: Create text object in current axes i=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1)-400)), ' Y: ', num2str(round(bc(2)-300)))); set(i, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); x= 400; y= 300; %toa tam cua camera % ve quy dao chuyen dong hl = line('XData',x,'YData',y,'Marker','.','Color','m','MarkerEdgeColor','c','LineStyle',':'); xdat = [x,bc(1)]; ydat = [y,bc(2)]; %toa tam set(hl,'XData',xdat,'YData',ydat); % set thuoc tinh cua duong quy dao % vung cho phep hien thi toa thu if ( 3500 < bc(1) && bc(1) < 4500), if (2500 < bc(2) && bc(2) < 3500), %nhan tin hieu tu cong COM val1 = GetSerialData('co m1', 9600, 4); %su dung file GetSerialData.DLL cua VC++ h= char (val1(1,1)); a= char (val1(1,2)); %chuyen ma ascii sang str hang tram b= char (val1(1,3)); %chuyen ma ascii sang str hang chuc c= char (val1(1,4)); %chuyen ma ascii sang str hang don vi if (h == 'a'), %kiem tra du lieu co hop le khong ? d= str2double (a); %doi tu string sang so hang tram e= str2double (b); %doi tu string sang so hang chuc f= str2double (c); %doi tu string sang so hang donvi g= (d*100+e*10+f); %rap lai so hoan chinh he mm end % stats Statistics Toolbox (h?p cơng c? th?ng kê) rectangle('Position',bb,'EdgeColor','r','LineWidth',2) % ve hình ch? nh?t bao quanh khu v?c gi?i h?n % strcat: Concatenate strings horizontally (bu?c kich th??c ph?i n?m ngang) % text: Create text object in current axes i=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1)-400)), ' Y: ', num2str(round(bc(2)300)), ' Z: ',num2str(round(g)),' mm')); k=text(bc(1)-60,bc(2)-50, strcat('Target locked')); set(i, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'green'); set(k, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end end 59 end %xac dinh vat the can lay if (object > 0), rectangle('Position',bb,'EdgeColor','b','LineWidth',1) % ve hình ch? nh?t bao quanh khu v?c gi?i h?n if ( bc(1) > 450 ), fprintf(s_port,'b'); else if (bc(1) < 350), fprintf(s_port,'c'); else fprintf(s_port,'f'); end end if ( bc(2) > 350 ), fprintf(s_port,'d'); else if ( bc(2) < 250 ), fprintf(s_port,'e'); else fprintf(s_port,'g'); end end end toc hold off flushdata(vid,'triggers'); end fclose(s_port); stop(vid); flushdata(vid,'triggers'); delete(vid); clear all catch fclose(s_port); stop(vid); flushdata(vid); delete(vid); clear all end % - Executes on button press in pushbutton2 function pushbutton2_Callback(~, ~, ~) % 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 vid; % stop(vid); % flushdata(vid); % delete(vid); % clear all close(nhandangmau) % - Executes during object creation, after setting all properties function axes4_CreateFcn(~, ~, ~) % hObject handle to axes4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called 60 imshow('giaodien.bmp'); % Hint: place code in OpeningFcn to populate axes4 Chƣơng trình vi điều khiển nhận tín hiệu điều khiển robot /***************************************************** This program was produced by the CodeWizardAVR V2.03.4 Standard Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l http://www.hpinfotech.com Chip type : ATmega16 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small External RAM size : Data Stack size : 256 *****************************************************/ #include
- Xem thêm -

Xem thêm: NHẬN DẠNG VÀ XỬ LÝ ẢNH VẬT THỂ ỨNG DỤNG TRONG ĐIỀU KHIỂN , NHẬN DẠNG VÀ XỬ LÝ ẢNH VẬT THỂ ỨNG DỤNG TRONG ĐIỀU KHIỂN

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay