(Đồ án hcmute) robot nhận biết màu và hình sử dụng phương pháp nhận dạng đường biên

99 4 0
(Đồ án hcmute) robot nhận biết màu và hình sử dụng phương pháp nhận dạng đường biên

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐIỆN - ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THƠNG ROBOT NHẬN BIẾT MÀU VÀ HÌNH SỬ DỤNG PHƯƠNG PHÁP NHẬN DẠNG ĐƯỜNG BIÊN GVHD: TS NGUYỄN VĂN THÁI SVTH: ĐINH BÁ CAO MSSV: 12141019 SVTH: ĐƯỜNG QUỐC QUYỀN MSSV: 12141186 SKL 0 4 Tp Hồ Chí Minh, tháng 07/2016 an 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 - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ROBOT NHẬN BIẾT MÀU VÀ HÌNH SỬ DỤNG PHƯƠNG PHÁP NHẬN DẠNG ĐƯỜNG BIÊN GVHD: TS Nguyễn Văn Thái SVTH: Đinh Bá Cao MSSV: 12141019 SVTH: Đường Quốc Quyền MSSV: 12141186 Tp Hồ Chí Minh – 7/2016 an 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 - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THƠNG ĐỀ TÀI: ROBOT NHẬN BIẾT MÀU VÀ HÌNH SỬ DỤNG PHƯƠNG PHÁP NHẬN DẠNG ĐƯỜNG BIÊN GVHD: TS Nguyễn Văn Thái SVTH: Đinh Bá Cao MSSV: 12141019 SVTH: Đường Quốc Quyền MSSV: 12141186 Tp Hồ Chí Minh – 7/2016 an LỜI CAM ĐOAN Đề tài tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài an LỜI CẢM ƠN Trong suốt thời gian học Trường Đại học Sư phạm Kỹ thuật TP.HCM, nhờ giúp đỡ tận tình quý thầy cô mặt nên đề tài tốt nghiệp chúng em hoàn thành Chúng em xin gởi lịng biết ơn chân thành đến Bộ mơn Điện tử công nghiệp quý thầy cô khoa Điện-Điện Tử giảng dạy kiến thức chuyên môn làm sở để nhóm sinh viên chúng em thực tốt đề tài Đặc biệt, chúng em xin gởi lời cảm ơn sâu sắc đến Thầy TS Nguyễn Văn Thái trực tiếp hướng dẫn suốt trình làm đồ án thầy ln quan tâm, tận tình giúp đỡ tạo điều kiện để chúng em hoàn thành tốt đề tài Em gửi lời đồng cảm ơn đến bạn lớp 12141DT1C chia sẻ, đóng góp ý kiến, trao đổi kiến thức kinh nghiệm quý báu thời gian thực đề tài Cảm ơn đến cha mẹ người thân tận tình nhắc nhở chúng em, tạo cho chúng em nguồn động lực to lớn để hoàn thành đề tài Chúng em xin chân thành cảm ơn! Nhóm Sinh viên thực Đinh Bá Cao Đường Quốc Quyền an MỤC LỤC Trang bìa i Nhiệm vụ đồ án ………ii Lịch trình iii Cam đoan iv Lời cảm ơn v Mục lục vi Liệt kê hình vẽ ix Liệt kê bảng vẽ xi Tóm tắt xii CHƯƠNG TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ XỬ LÝ ẢNH 2.1.1 Tổng quan xử lý ảnh 2.1.2 Một số khái niệm xử lý ảnh 2.1.2.1 Điểm ảnh 2.1.2.2 Phân loại ảnh 2.1.2.3 Độ phân giải 2.1.3 Không gian màu HSV 2.1.4 Thư viện EmguCV 2.2 KHỐI VI ĐIỀU KHIỂN 2.2.1 Sơ lược cấu trúc vi điều khiển 2.2.2 Vi điều khiẻn PIC 18F4550 10 2.2.3 Sơ đồ chân PIC18F4550 12 an 2.2.4 Khối điều chế độ rộng xung PWM 15 2.2.4.1 Cấu trúc khối điều chế độ rộng xung PWM 17 2.2.4.2 Tính chu kỳ xung PWM 17 2.2.4.3 Tính hệ số chu kỳ xung PWM 18 2.2.5 Ngắt vi điều khiển PIC18F4550 18 2.2.6 Truyền/nhận liệu UART 19 2.3 MỘT SỐ THIẾT BỊ NGOẠI VI KHÁC 20 2.3.1 Cảm biến ENCODER 20 2.3.2 PICKit FULL Program/Debug 21 2.3.3 PL2303 HX Cable 22 2.3.4 Động DC 22 2.3.5 Relay OEG-OMI-SS-124L 23 2.3.6 OPTO PC817 24 2.3.7 MOSFET IRF540N 25 2.3.8 Webcam Logitech C615 26 2.3.9 Cảm biến siêu âm SRF005 27 CHƯƠNG : THIẾT KẾ VÀ TÍNH TOÁN 29 3.1 GIỚI THIỆU 29 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 29 3.2.1 Sơ đồ khối hệ thống 29 3.2.1.1 Ứng dụng nhận dạng màu sắc 30 3.2.1.2 Lưu đồ điều khiển Robot 38 3.2.2 Tính toán thiết ké ứng dụng 39 3.2.3 Tính tốn thiết kế mạch 43 3.2.3.1 Mạch nguồn 43 3.2.3.2 Khối điều khiển động cơ: 44 3.2.4 Sơ đồ ngun lí tồn mạch 50 CHƯƠNG : THI CÔNG HỆ THỐNG 51 4.1 THI CÔNG ỨNG DỤNG 51 4.1.1 Phần mềm thiết kế 51 an 4.1.2 Ngơn ngữ lập trình C# : 51 4.1.3 Thi công giao diện: 53 4.1.4 Thi công mẫu vật 57 4.2 THI CÔNG MẠCH 57 4.3 LẮP RÁP VÀ ĐÓNG GÓI MẠCH 61 4.4 QUY TRÌNH THAO TÁC SỬ DỤNG 67 CHƯƠNG : KẾT QUẢ NHẬN XÉT VÀ ĐÁNH GIÁ 69 5.1 BOARD MẠCH IN 69 5.2 NGUỒN 69 5.3 ĐỘNG CƠ DC 69 5.4 CẢM BIẾN ENCODER: 69 5.5 KẾT QUẢ MÔ PHỎNG ỨNG DỤNG 70 5.6 KẾT QUẢ MÔ PHỎNG ROBOT 73 CHƯƠNG : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 75 6.1 TÓM TẮT ĐỀ TÀI 75 6.2 KẾT LUẬN 75 6.3 HƯỚNG PHÁT TRIỂN 76 TÀI LIỆU THAM KHẢO : 77 MỘT SỐ TRANG WEB THAM KHẢO KHÁC : 78 PHỤ LỤC 79 an LIỆT KÊ HÌNH VẼ Hình 2.1: Khơng gian màu HSV Hình 2.2 : Vi điều khiển PIC16F4550 10 Hình 2.3 : Cấu hình PIC18F4550 12 Hình 2.4 : Sơ đồ chân PIC18F4550 13 Hình 2.5 : Điều chế độ rộng xung với hệ số chu kì khác 16 Hình 2.6 : Cấu trúc khối điều chế độ rộng xung PWM 17 Hình 2.7 : Encoder bánh xe gắn cho encoder 20 Hình 2.8 : Hình mơ cách đếm số xung từ encoder 20 Hình 2.9 : Xung từ hai kênh encoder 21 Hình 2.10 :Mạch nạp cho vi điều khiển PIC 22 Hình 2.11 : Cáp PL2303 HX 22 Hình 2.12 : Điều khiển động DC chạy thuận 23 Hình 2.13 : Điều khiển động DC chạy ngược 23 Hình 2.14 : Relay loại chân 24 Hình 2.15 : Opto PC817 24 Hình 2.16 : Hình dáng ký hiệu IRF540 25 Hình 2.17 : Webcam Logitech C615 26 Hình 2.18 : Cảm biến siêu âm SRF005 27 Hình 3.1 : Sơ đồ tổng quát 29 Hình 3.2 : Sơ đồ khối giao diện điều khiển 30 Hình 3.3 : Lưu đồ giải thuật tiền xử lý ảnh nhận dạng màu sắc 31 Hình 3.4 : Lưu đồ giải thuật nhận dạng hình tam giác 33 Hình 3.5 : Lưu đồ giải thuật nhận dạng hình chữ nhật 35 Hình 3.6 : Lưu đồ giải thuật nhận dạng hình trịn 36 Hình 3.7 : Lưu đồ giải thuật truyền/nhận liệu ứng dụng Robot 37 Hình 3.8 : lưu đồ điều khiển Robot 38 Hình 3.9 : Chọn số HSV để nhận dạng 40 Hình 3.10 : Khung ảnh giá trị màu H 40 Hình 3.11 : RadioButton chọn hình khối 41 an Hình 3.12 : Khung ảnh hiển thị ảnh tiền xử lý sau xử lý 41 Hình 3.13 : Nút nhấn ứng dụng 41 Hình 3.14 : Nút nhấn Combobox để kết nối với cổng COM 42 Hình 3.15 : TextBox hiển thị liệu truyền nhận 42 Hình 3.16 : TextBox hiển thị tọa độ tâm vật 42 Hinh 3.17 : mạch nguồn 43 Hình 3.18 : Điều khiển động DC dùng cặp Relay đảo chiều 45 Hình 3.19 : Mạch điều xung (PWM) mạch động lực đảo chiều động 46 Hình 3.20 : Mạch đảo chiều động 48 Hình 3.21 : Mạch điều khiển xung PWM 49 Hình 3.22 : Sơ đồ ngun lý tồn mạch 50 Hình 4.1 : Giao diện khởi động Visual Studio 2013 53 Hình 4.2 : Tạo ứng dụng Visual Studio 2013 54 Hình 4.3 : Giao diện thiết kế ứng dụng 55 Hình 4.4 : Thêm control EmguCV vào Toolbox 56 Hình 4.5 : Mẫu vật màu xanh đỏ 57 Hình 4.6 : Lấy linh kiện ORCAD 59 Hình 4.7 : Cách tạo file Netlist 60 Hình 4.8 : Chỉnh lại độ phân giải hình ORCAD 61 Hình 4.9 : Khung xe pin 62 Hình 4.10 : Động bánh xe trái 62 Hình 4.11 : Động bánh xe phải 63 Hình 4.12 : Bánh xe đa hướng trước 63 Hình 4.13 : Encoder trái phải 64 Hình 4.14 : Thân sau Robot 64 Hình 4.16 : Mặt mạch điều khiển Robot 65 Hình 4.17 : Mặt mạch điều khiển Robot 66 Hình 4.18 : Robot hồn chỉnh 66 Hình 4.19 : Kết nối ứng dụng với Robot 67 Hình 4.20 : bước sử dụng ứng dụng 68 an CHƯƠNG KẾT QUẢ NHẬN XÉT VÀ ĐÁNH GIÁ Hình 5.8 : Ứng dụng chạy thực tế 5.6 KẾT QUẢ MÔ PHỎNG ROBOT Bảng 5.1 : Thống kê Robot di chuyển tới vật: Lần Sai lệch Sai lệch Sai lệch chạy bên trái vị bên phải khoảng trí nhận vị trí nhận dạng hình dạng hình mẫu vật ảnh(cm) ảnh(cm) (cm) - Tốc độ động phải lớn động trái - Tốc độ động phải lớn động trái 3 - Tốc độ động trái lớn động phải - Tốc độ động phải lớn động trái - Tốc độ động trái lớn động phải - Tốc độ động trái lớn động phải Nguyên nhân BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an cách với 73 CHƯƠNG KẾT QUẢ NHẬN XÉT VÀ ĐÁNH GIÁ - Tốc độ động trái lớn động phải - Tốc độ động phải lớn động trái - Tốc độ động phải lớn động trái 10 - Tốc độ động trái lớn động phải 11 - Tốc độ động trái lớn động phải 12 - Tốc độ động phải lớn động trái 13 - Tốc độ động phải lớn động trái 14 - Tốc độ động phải lớn động trái 15 - Tốc độ động trái lớn động phải 16 - - 17 - Tốc độ động trái lớn động phải 18 - Tốc độ động trái lớn động phải 19 - Tốc độ động phải lớn động trái 20 - Tốc độ động trái lớn động phải 21 0 - 22 - Tốc độ động phải lớn động trái 23 - Tốc độ động phải lớn động trái 24 - Tốc độ động trái lớn động phải 25 0 26 0 27 0 28 0 29 0 30 0 0 Sai lệch trung bình BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP an 1.3 74 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CHƯƠNG : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1 TÓM TẮT ĐỀ TÀI Đề tài “ROBOT NHẬN BIẾT MÀU VÀ HÌNH SỬ DỤNG PHƯƠNG PHÁP NHẬN DẠNG ĐƯỜNG BIÊN” hoàn thành yêu cầu đặt chọn đề tài:  Thiết kế nguyên lý Robot mô hình với hình khối màu sắc cụ thể  Thiết kế giao diện ứng dụng nhận biết hình khối màu sắc máy tính phần mềm Visual Studio 2013  Sau xác định xác hình khối màu sắc, Robot tiến hành di chuyển tới vị trí hình khối màu sắc theo yêu cầu 6.2 KẾT LUẬN Sau thời gian gần học với hướng dẫn tận tình Thầy TS Nguyễn Văn Thái, đồ án hoàn thành thời hạn Đây đề tài sử dụng kiến thức tổng hợp liên quan đến kiến thức xử lý ảnh, vi điều khiển, vi mạch số, lập trình, truyền số liệu, giao tiếp máy tính…Điều giúp cho sinh viên thực đề tài làm quen với việc hệ thống, tổng hợp kiến thức học trình làm việc thực tế Ngoài ra, thực đề tài sinh viên thực làm quen với việc tự tìm tịi kiến thức thơng qua việc sử dụng ngơn ngữ lập trình C# (đây loại ngôn ngữ cấp cao), thiết kế giao diện ngôn ngữ C#, thiết kế vẽ mạch in phần mềm ORCARD 10.5 Với nỗ lực tâm sinh viên thực hiện, đề tài hồn thành, q trình thực gặp nhiều khó khăn việc tìm hiểu vấn đề mới, vấn đề liên quan đến thiết kế phần cứng lập trình Thơng qua đề tài này, sinh BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 75 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN viên thực tích lũy cho nhiều kinh nghiệm thực tế liên quan đến vấn đề thiết kế phần cứng, lập trình Đề tài góp phần giúp sinh viên thực tìm hạn chế kinh nghiệm thực tế để có cách hoàn thiện khắc phục Với hạn chế định, đề tài không tránh khỏi sai sót Vì vậy, sinh viên thực đề tài mong nhận đóng góp ý kiến quý thầy cô bạn sinh viên để đồ án hoàn thiện 6.3 HƯỚNG PHÁT TRIỂN  Có thêm hệ thống Camera để theo dõi hoạt động Robot  Phát triển từ mơ hình Robot lên Robot thực công việc cụ thể (ví dụ hệ thống dán nhãn chai nước)  Máy vi tính lưu trữ cơng việc Robot làm ngày, tuần…  Từ mơ hình Robot phát triển thành thiết tự động hóa khác tay máy, dây chuyền tự động hóa BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 76 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO : [1] “Lập trình xử lý ảnh ứng dụng”, https://www.facebook.com/LAPTRINHXULYANHUNGDUNG/posts/150428513647400 1?comment_tracking=%7B%22tn%22%3A%22O%22%7D, 31 Tháng 2014 [2] Nguyễn Thanh Hải, “Giáo trình xử lý ảnh”, NXB ĐH Quốc Gia tp.HCM, 2014 [3] , “Một vài khái niệm ảnh số (digital image)”, 19/06/2013, https://vtct.wordpress.com/2013/06/19/mot-vai-khai-niem-co-ban-ve-anh-so-digitalimage/ [4] Đạt Trương, “Giới Thiệu Thư Viện EmguCV Và Cách Tích Hợp Vào NET”, 22/08/2015, http://www.stdio.vn/articles/read/362/gioi-thieu-thu-vien-emgucv-va-cachtich-hop-vao-net [5] Nuyễn Thế Anh, “Đề tài Chuyên Đổi Từ Thiết Bị Flash PIC 18F Sang PIC 18FXXJ”, 06/2008, http://doc.edu.vn/tai-lieu/de-tai-chuyen-doi-tu-thiet-bi-flash-pic-18f-sang-pic18fxxj-23976/ [6] Nguyễn Đình Phú, “Giáo trình vi xử lý”, Trường ĐH Sư Phạm Kỹ Thuật Tp.HCM, 2014 [7] “cambien”, thg 6, 2011, https://www.wattpad.com/1506828-cambien [8] “PICKIT2 (PICKit FULL Program/Debug)”, 22/01/2013, http://www.tme.vn/Product.aspx?id=209#page=pro_info [9] “USB TO COM PL2303 V1”, 27 thg 7, 2012, http://mualinhkien.vn/san-pham/51/usbto-com-pl2303-v1.html [10] “ĐIỀU KHIỂN DC MOTOR”, http://eyeteck.vn/KTCN/dieu-khien-DC-motor.htm [12] “Relay OEG-OMI-SS-124L”, http://thegioiic.com/products/solid-state-relay-modulessr-2 [12] “OPTO LÀ GÌ ? - KHÁI NIỆM VÀ ỨNG DỤNG CỦA OPTO”, http://phipdong.blogspot.com/2013/09/opto-la-gi-khai-niem-va-ung-dung-cua.html [13] datasheet, “IRF540N”, http://www.uni-kl.de/elektronik-lager/413915 [14] “Microsoft_Visual_Studio”, 26 tháng năm 2016, https://vi.wikipedia.org/wiki/Microsoft_Visual_Studio [15] “Giới thiệu ngơn ngữ C#”, http://hoclaptrinh.edu.vn/gioi-thieu-co-ban-vengon-ngu-c/ BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP an 77 TÀI LIỆU THAM KHẢO MỘT SỐ TRANG WEB THAM KHẢO KHÁC : http://www.electoday.com/index.php?topic=10344.0 http://stackoverflow.com/ http://www.emgu.com/wiki/index.php/Main_Page BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 78 PHỤ LỤC PHỤ LỤC CHƯƠNG TRÌNH CHÍNH C# using using using using using using using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System.IO.Ports; Emgu.CV; Emgu.CV.CvEnum; Emgu.CV.Structure; Emgu.Util; System.Diagnostics; System.Media; namespace testColor { public partial class Form1 : Form { #region Globle Var SerialPort _serialPort; private Capture capture= null; private bool captureInProgress = false; private bool imageInProgress; Image ImageFrame = new Image(320, 240); Image ImageHSVwheel = new Image("hsv.jpg"); Image hsvImage = new Image(0, 0); String X_cir, Y_cir, X_tri, Y_tri, X_rec, Y_rec; String DT_Cir, DT_Tri, DT_Rec; bool Flag_stopTri = false, Flag_stopRec = false, Flag_stopCir = false; bool flagT = false, flagC = false, flagR = false; String temR,temT,temC; Double[] toado = new Double[] { 20, 160, 290 }; Double[] dia = new Double[4]; bool _REC_detected = false, _TRI_detected = false, _CIR_detected = false; bool _Orange = false, _Green=false, _Blue=false, _Red =false; string[] coms = SerialPort.GetPortNames(); #endregion public Form1() { InitializeComponent(); imageBox3.Image = ImageHSVwheel; Application.Idle += ProcessFrame; comboBox1.Items.AddRange(coms); } #region Main Program BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 79 TÀI LIỆU THAM KHẢO private void ProcessFrame(object sender, EventArgs e) { if (captureInProgress) { ImageFrame = capture.QueryFrame(); ImageFrame = ImageFrame.Resize(imageBox1.Width, imageBox1.Height,// Scale the image to the specific size Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR);// phép nội suy sông tuyến imageBox1.Image = ImageFrame; ImageProcessing(); } } private void ImageProcessing() { // for camera Image ImageFrameDetection = cvAndHsvImage( ImageFrame, Convert.ToInt32(numeric_HL.Value), Convert.ToInt32(numeric_HH.Value), Convert.ToInt32(numeric_SL.Value), Convert.ToInt32(numeric_SH.Value), Convert.ToInt32(numeric_VL.Value), Convert.ToInt32(numeric_VH.Value), checkBox_IV.Checked); // show color detected Image imgF = new Image(ImageFrame.Width, ImageFrame.Height); Image imgD = ImageFrameDetection.Convert(); CvInvoke.cvAnd(ImageFrame, imgD, imgF, IntPtr.Zero); // imageBoxvd.Image = imgF; for (int x = 0; x < imgF.Width; x++) { for (int y = 0; y < imgF.Height; y++) { Bgr c = imgF[y, x]; if (c.Red == && c.Blue == && c.Green == 0) { imgF[y, x] = new Bgr(255, 255, 255); } } } imageBox2.Image = imgF; if (RB_Circle.Checked == false && RB_Circle.Checked == false && RB_Circle.Checked == false) { imageBox_DT.Image = new Image(ImageFrame.Width, ImageFrame.Height); } // for image detected Image ImageHSVwheelDetection = cvAndHsvImage( ImageHSVwheel, Convert.ToInt32(numeric_HL.Value), Convert.ToInt32(numeric_HH.Value), Convert.ToInt32(numeric_SL.Value), Convert.ToInt32(numeric_SH.Value), Convert.ToInt32(numeric_VL.Value), Convert.ToInt32(numeric_VH.Value), checkBox_IV.Checked); // for detect color Image ImageDetectionShape = cvAndHsvImage( ImageFrame, Convert.ToInt32(numeric_HL.Value), Convert.ToInt32(numeric_HH.Value), BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 80 TÀI LIỆU THAM KHẢO Convert.ToInt32(numeric_SL.Value), Convert.ToInt32(numeric_SH.Value), Convert.ToInt32(numeric_VL.Value), Convert.ToInt32(numeric_VH.Value), checkBox_IV.Checked); #region detection triangle vs Rectangle Image imgFF = imgF.Convert(); //Convert the image to grayscale and filter out the noise List triangleList = new List();//initializes a new 2D triangle List boxList = new List(); using (MemStorage storage = new MemStorage()) for ( Contour contours = ImageDetectionShape.FindContours( Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, storage); contours != null; contours = contours.HNext) { Contour currentContour = contours.ApproxPoly( contours.Perimeter * 0.022, storage); if (contours.Area > 20) { #region detect Triangle if (RB_Triangle.Checked) { if (currentContour.Total == 3) { Point[] pts = currentContour.ToArray(); triangleList.Add(new Triangle2DF( pts[0], pts[1], pts[2] )); } foreach (Triangle2DF triangle in triangleList) { if (txtXY_Triangle.Text != "") txtXY_Triangle.AppendText(Environment.NewLine); txtXY_Triangle.AppendText("Position: x=" + triangle.Centeroid.X.ToString().PadLeft(4) + " , y=" + triangle.Centeroid.Y.ToString().PadLeft(4) ); txtXY_Triangle.ScrollToCaret(); // draw Triangle imgFF.Draw(triangle, new Bgr(Color.Red), 3); // data send // DT_Tri = triangle.Area.ToString().PadLeft(4); X_tri = triangle.Centeroid.X.ToString().PadLeft(4); Y_tri = triangle.Centeroid.Y.ToString().PadLeft(4); //Double SS = Convert.ToDouble(DT_Tri); //if (SS >= 10000) { Flag_stopTri = false; } //else Flag_stopTri = true; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 81 TÀI LIỆU THAM KHẢO if (X_tri != "") { if (temT != X_tri) { temT = X_tri; flagT = true; } else flagT = false; } } imageBox_DT.Image = imgFF; } #endregion #region detect Rectangle if (RB_Rectangle.Checked) { if (currentContour.Total == 4) //The contour has vertices { // determine if all the angles in the contour are within [80, 100] degree bool isRectangle = true; Point[] pts = currentContour.ToArray(); LineSegment2D[] edges = PointCollection.PolyLine(pts, true); for (int i = 0; i < edges.Length; i++) { double angle = Math.Abs( edges[(i + 1) % edges.Length].GetExteriorAngleDegree(edges[i])); if (angle < 80 || angle > 100) { isRectangle = false; break; } } if (isRectangle) boxList.Add(currentContour.GetMinAreaRect()); } foreach (MCvBox2D Rectangle in boxList) { if (txtXY_Rectangle.Text != "") txtXY_Rectangle.AppendText(Environment.NewLine); // if we not on the first line in the text box insert a new line char txtXY_Rectangle.AppendText("Position: x=" + Rectangle.center.X.ToString().PadLeft(0) + // x position center point of Rectangle " , y=" + Rectangle.center.Y.ToString().PadLeft(0) + // y position center point of Rectangle ",size =" + Rectangle.size.ToString().PadLeft(0) ); txtXY_Rectangle.ScrollToCaret(); // draw Rectangle imgFF.Draw(Rectangle, // current Rectangle we are on in foreach loop BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 82 TÀI LIỆU THAM KHẢO new Bgr(Color.Red), 3); // draw pure red // thickness of Rectangle in pixels // data send //DT_Rec = Rectangle.size.Width.ToString().PadLeft(4); //Double SS = Convert.ToDouble(DT_Rec); X_rec = Rectangle.center.X.ToString().PadLeft(0); Y_rec = Rectangle.center.Y.ToString().PadLeft(0); //if (SS >= 140) { Flag_stopRec = false; } //else Flag_stopRec = true; if (X_rec != "") { if (temR != X_rec) { temR = X_rec; flagR = true; } else flagR = false; } } imageBox_DT.Image = imgFF; } #endregion } } #endregion #region detect circle if (RB_Circle.Checked) { //ImageDetectionShape = ImageDetectionShape.SmoothGaussian(9); CircleF[] circles = ImageDetectionShape.HoughCircles(new Gray(100), new Gray(50), 2, ImageDetectionShape.Height / 4, 10, 400)[0]; foreach (CircleF circle in circles) { if (txtXY_Circle.Text != "") txtXY_Circle.AppendText(Environment.NewLine); txtXY_Circle.AppendText("Position: x=" + circle.Center.X.ToString().PadLeft(4) + " , y=" + circle.Center.Y.ToString().PadLeft(4) //+ ", radius=" + circle.Radius.ToString("###.00").PadLeft(4) ); txtXY_Circle.ScrollToCaret(); // draw circle imgFF.Draw(circle, new Bgr(Color.Red), 3); // data send BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 83 TÀI LIỆU THAM KHẢO //DT_Cir = circle.Area.ToString().PadLeft(4); //Double SS = Convert.ToDouble(DT_Cir); X_cir = circle.Center.X.ToString().PadLeft(4); Y_cir = circle.Center.Y.ToString().PadLeft(4); //if (SS >= 9000) { Flag_stopCir = false; } //else Flag_stopCir = true; if (X_cir != "") { if (temC != X_cir) { temC = X_cir; flagC = true; } else { flagC = false; } } } imageBox_DT.Image = imgFF; } #endregion ////////// if (numeric_HH.Value > && numeric_HH.Value < 23) { _Orange = true; } if (numeric_HH.Value > 90 && numeric_HH.Value < 124) { _Blue = true; } if (numeric_HH.Value > 32 && numeric_HH.Value < 75) { _Green = true; } if (numeric_HH.Value < && numeric_HH.Value > 175) { _Red = true; } ////////// #region trans data detected RECTANGLE if (flagR == true) { Double _X_rec = Convert.ToDouble(X_rec); _REC_detected = true; //Double vitri ; if (_X_rec < 178 && _X_rec > 140) { Write_data("G"); text_Truyen.AppendText("chu nhat : G " + Environment.NewLine); text_Truyen.ScrollToCaret(); } if (_X_rec = 170) { Write_data("R"); text_Truyen.AppendText("chu nhat : R " + Environment.NewLine); text_Truyen.ScrollToCaret(); } flagR = false; } #endregion #region trans data detected TRIANGLE if (flagT == true) { Double _X_tri = Convert.ToDouble(X_tri); _TRI_detected = true; if (_X_tri < 180 && _X_tri > 140) { Write_data("G"); text_Truyen.AppendText("tam giac : G " + Environment.NewLine); text_Truyen.ScrollToCaret(); } if (_X_tri = 180) { Write_data("R"); text_Truyen.AppendText("tam giac : R " + Environment.NewLine); text_Truyen.ScrollToCaret(); } flagT = false; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 84 TÀI LIỆU THAM KHẢO #endregion #region trans data detected CIRCLE if (flagC == true) { // Double vitri ; _CIR_detected = true; Double _X_cir = Convert.ToDouble(X_cir); if (_X_cir < 180 && _X_cir > 140) { Write_data("G"); text_Truyen.AppendText("hinh tron : G " + Environment.NewLine); text_Truyen.ScrollToCaret(); } if (_X_cir = 180) { Write_data("R"); text_Truyen.AppendText("hinh tron : R " + Environment.NewLine); text_Truyen.ScrollToCaret(); } flagC = false; } #endregion #region MP3 //circle/// if (_CIR_detected) { if (_Orange) { baihat(31); } if (_Blue) { baihat(32); } if (_Green) { baihat(33); } if (_Red) { baihat(34); } } //Triangle// if (_TRI_detected == true) { if (_Orange == true){ baihat(11); } if (_Blue){ baihat(12); } if (_Green){ baihat(13); } if (_Red){ baihat(14); } } //Rectangle// if (_REC_detected) { if (_Orange){ baihat(21); } if (_Blue) { baihat(22); } if (_Green) { baihat(23); } if (_Red) { baihat(24); } } #endregion BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 85 TÀI LIỆU THAM KHẢO } #endregion #region Image Processing private Image cvAndHsvImage(Image imgFame, int L1, int H1, int L2, int H2, int L3, int H3, bool I) { Image hsvImage = imgFame.Convert(); Image ResultImage = new Image(hsvImage.Width, hsvImage.Height); Image ResultImageH = new Image(hsvImage.Width, hsvImage.Height); Image ResultImageS = new Image(hsvImage.Width, hsvImage.Height); Image ResultImageV = new Image(hsvImage.Width, hsvImage.Height); Image img1 img2 img3 img4 img5 = = = = = inRangeImage(hsvImage, inRangeImage(hsvImage, inRangeImage(hsvImage, inRangeImage(hsvImage, inRangeImage(hsvImage, L1, H1, 0); L2, H2, 1); L3, H3, 2); 0, L1, 0); H1, 180, 0); #region checkBox Color Mode if (I) { CvInvoke.cvOr(img4, img5, img4, System.IntPtr.Zero); ResultImageH = img4; } else { ResultImageH = img1; } ResultImageS = img2; ResultImageV = img3; CvInvoke.cvAnd(ResultImageH, ResultImageS, ResultImageH, System.IntPtr.Zero); CvInvoke.cvAnd(ResultImageH, ResultImageV, ResultImageH, System.IntPtr.Zero); ResultImage = ResultImageH; #endregion CvInvoke.cvErode(ResultImage, ResultImage, (IntPtr)null, 0); return ResultImage; } private Image inRangeImage(Image hsvImage, int Lo, int Hi, int con) { Image ResultImage = new Image(hsvImage.Width, hsvImage.Height); Image IlowCh = new Image(hsvImage.Width, hsvImage.Height, new Gray(Lo)); Image IHiCh = new Image(hsvImage.Width, hsvImage.Height, new Gray(Hi)); CvInvoke.cvInRange(hsvImage[con], IlowCh, IHiCh, ResultImage); return ResultImage; } #endregion BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 86 an

Ngày đăng: 27/12/2023, 03:19

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan