Robot nhận biết màu và hình sử dụng phương pháp nhận dạng đường biên

93 4 0
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

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 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 TỐN 29 3.1 GIỚI THIỆU 29 3.2 TÍNH TỐ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 tố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 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 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 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ơ đồ nguyên lý toà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 Hình 5.1 : Chọn số màu HSV 70 Hình 5.2 : Textbox hiển thị tọa độ vật 70 Hình 5.3 : Kết nối cổng COM 71 Hình 5.4 : Dữ liệu truyền nhận 71 Hình 5.5 : Ảnh tiền xử lý 71 Hình 5.6 : Ảnh sau nhận dạng màu sắc 72 Hình 5.7 : ảnh sau nhận dạng hình khối 72 Hình 5.8 : Ứng dụng chạy thực tế 73 LIỆT KÊ BẢNG VẼ Bảng 2.1 : So sánh bốn loại pic 18F: 12 Bảng 2.2 Một thông số kỹ thuật IRF540(13) 25 Bảng 3.1 : Bảng màu HSV 32 Bảng 3.2 Dòng tiêu thụ số linh kiện mạch 44 Bảng 4.1 : Bảng danh sách linh kiện sử dụng : 58 Bảng 5.1 : Thống kê Robot di chuyển tới vật: 73 CHƯƠNG TỔNG QUAN CHƯƠNG TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ Sau cách mạng khoa học kỹ thuật, phát minh, sáng chế vĩ đại không ngừng xuất hiển biến điều không tưởng thành thật đưa nhân loại bước sang văn minh hồn tồn Trong đó, lĩnh vực công nghệ thông tin, điện tử, tự động hóa, hệ thống truyền thơng sử dụng sóng vơ tuyến… ngày có bước phát triển vượt bậc Nền văn minh nhân loại không ngừng vận động phát triển, quy luật tự nhiên khoa học – cơng nghệ tiến bước mạnh mẽ, sức mạnh mà chúng mang lại đáp ứng gần toàn nhu cầu sống người Năng suất lao động nâng lên cách tối đa, lao động chân tay giảm hẳn, Robot thiết bị tự động hóa khác đảm nhận cơng việc nặng nhọc nhà máy, xí nghiệp Một lĩnh vực góp phần tạo nên thành tựu to lớn cơng nghệ xử lý ảnh Quá trình xử lý ảnh xem trình thao tác ảnh đầu vào nhằm cho kết mong muốn Kết đầu trình xử lý ảnh ảnh tốt kết luận, từ phục vụ xử lý cơng việc xác Thế giới ngày phát triển lĩnh vực tự động hóa cần phải mở rộng Những Robot phục vụ sản xuất sinh hoạt người ngày nhiều Cơng nghệ chế tạo Robot ngày hồn thiện tinh vi Đồng thời, việc ứng dụng xử lý ảnh mang lại nhiều thuận lợi cho người, cơng việc xử lý xác Xuất phát từ nguyên nhân để góp phần cố kiến thức học, nhóm chọn đề 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” để nghiên cứu thi cơng mơ hình sản phẩm 1.2 MỤC TIÊU  Thiết kế Robot mơ hình với hình khối màu sắc cụ thể BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP CHƯƠNG TỔNG QUAN  Viết ứng dụng cho máy tính sử dụng cơng nghệ xử lý ảnh để xác định xác hình khối màu sắc  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 u cầu 1.3 NỘI DUNG NGHIÊN CỨU  NỘI DUNG 1: Thiết kế ứng dụng nhận biết hình khối màu sắc phần mềm Visual Studio  NỘI DUNG 2: Thiết kế, lập trình thi cơng phần cứng Robot  NỘI DUNG 3: Kết nối phần cứng Robot với phần mềm điều khiển  NỘI DUNG 4: Chạy thử nghiệm hệ thống nhận biết hình ảnh màu sắc  NỘI DUNG 5: Cân chỉnh hệ thống  NỘI DUNG 6: Viết sách luận văn  NỘI DUNG 7: Báo cáo đề tài tốt nghiệp 1.4 GIỚI HẠN Để phù hợp với mục đích nghiên cứu chuyên sâu lập trình xử lý ảnh lập trình vi điều khiển điều khiển Robot, nhóm thực đề tài trọng nghiên cứu phần sau:  Thiết kế ngun lý Robot mơ hình với hình khối màu sắc cụ thể  Thiết kế ứ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 Đề tài không giải vấn đề sau:  Các vấn đề tính tốn thiết kế mơ hình khí Robot  Chỉ nhận biết hình ảnh 2D  Các khối nhận biết còn giới hạn : hình tròn, chữ nhật, tam giác  Số lượng mẫu vật nhận dạng còn hạn chế( khoảng mẫu vật) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP CHƯƠNG TỔNG QUAN 1.5 BỐ CỤC  Chương 1: Tổng Quan Chương trình bày đặt vấn đề dẫn nhập lý chọn đề tài, mục tiêu, nôi dung nghiên cứu, giới hạn thông số bố cục đồ án  Chương 2: Cơ Sở Lý Thuyết Chương trình bày số lý thuyết xử lý ảnh, vi điều khiển trình bày số linh kiện sử dụng mạch  Chương 3: Thiết kế tính toán Nội dung chương thiết kế sơ đồ hệ thống, sơ đồ khối Tính tốn thiết kế mạch ứng dụng máy tính  Chương : Thi công hệ thống Nội dung chương thi công mạch thi công ứng dụng  Chương 5: Kết nhận xét đánh giá Trình bày kết trình nghiên cứu làm, nhận xét đánh giá kết đạt  Chương 6: Kết luận hướng phát triển Trình bày kết thu so với dự kiến ban đầu, đề xuất hướng phát triển đề tài BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP CHƯƠNG KẾT QUẢ NHẬN XÉT VÀ ĐÁNH GIÁ khác chuyển thành màu trắng Ảnh nhận tương đối xác với thực tế Hình 5.6 : Ảnh sau nhận dạng màu sắc Hình ảnh sau nhận dạng hình khối : Ảnh nhận sau xử lý nhận dạng hình khối ảnh đầu phần nhận dạng màu sắc, hình khối có ảnh mà chọn để nhận dạng vẽ lại hình vẽ có màu đỏ Phần nhận dạng tương đối xác, độ phụ tuộc nhiều phần nhận dạng màu sắc, phần lấy ảnh đầu phần nhận dạng màu sắc để xử lý Hình 5.7 : ảnh sau nhận dạng hình khối BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 72 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 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 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ế ngun 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 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 hoàn thành, 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 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 hồ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 q thầy 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 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 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 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 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 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 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 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 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 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 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 86 ... chọn đề 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” để nghiên cứu thi cơng mơ hình sản phẩm 1.2 MỤC TIÊU  Thiết kế Robot mô hình với hình khối màu sắc cụ thể... cho Robot Khối nguồn dùng để cấp cho mạch điều khiển Robot động hoạt động 3.2.1.1 Ứng dụng nhận dạng màu sắc Bắt đầu S Webcam mở Nhận dạng hình tam giác Đ Thu nhận ảnh nhận dạng màu sắc Nhận dạng. .. Dựa vào đường biên tìm xác định số đỉnh hình Hình 3.5 : Lưu đồ giải thuật nhận dạng hình chữ nhật BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 35 CHƯƠNG THIẾT KẾ VÀ TÍNH TỐN  Nhận dạng hình trịn Ảnh sau nhận dạng

Ngày đăng: 31/10/2022, 16:50

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

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

Tài liệu liên quan