Đồ án Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh

TRƯỜNG ĐH. SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP. HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH Tp. HCM, ngày 16 tháng 07 năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Thái Dương Duy MSSV: 13141040 Chuyên ngành: Kỹ thuật Điện Tử Truyền Thông Mã ngành: 01 Hệ đào tạo: Đại học chính quy Mã hệ: 01 Khóa: 2013 I. TÊN ĐỀ TÀI: THIẾT KẾ THI CÔNG HỆ THỐNG ĐIỀU KHIỂN TÍN HIỆU ĐÈN GIAO THÔNG THÔNG QUA X

pdf116 trang | Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 379 | Lượt tải: 0download
Tóm tắt tài liệu Đồ án Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
XỬ LÝ ẢNH. II. NHIỆM VỤ 1. Các số liệu ban đầu: - Video đầu vào: 6 video, 2 video khi đường ít xe, 2 video khi làn nhiều xe. - Matlab phiên bản 2017a. - Kit điều khiển chính: Arduino Mega 2560, 2 Module Led 7 đoạn đôi, 6 led đơn (2 đỏ, 2 vàng, 2 xanh). 2. Nội dung thực hiện: Đề tài thực hiện nội dung xây dựng hệ thống đếm đối tượng qua hình ảnh với đầu vào là từ video là ảnh chứa các đối tượng (phương tiện giao thông). Kết quả đếm được sẽ được gửi xuống kit Arduino để điều khiển 2 cặp module led 7 đoạn và led đơn. Nhóm sẽ thực hiện các nội dung như sau:  Tìm hiểu về kit Arduino Mega 2560.  Tìm hiểu về phần mềm matlab.  Cài đặt nguồn thư viện cho kit Arduino, cách kết nối Arduino với Matlab.  Tìm hiểu các thuật toán phát hiện phương tiện giao thông.  Xây dựng quá trình xử lý ảnh đầu vào.  Xây dựng hệ thống đếm phương tiện trong ảnh, lập trình giao diện sử dụng để mô phỏng quá trình thu thập dữ liệu và gửi dữ liệu xuống kit Arduino.  Xây dựng chương trình điều khiển điều tín hiệu đèn giao thông trên kit Arduino.  Đánh giá kết quả thực hiện. ii III. NGÀY GIAO NHIỆM VỤ: 21/03/2018 IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 03/07/2018 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 iii 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ử Độc lập - Tự do - Hạnh phúc Bộ Môn Điện Tử Công Nghiệp – Y Sinh Tp. Hồ Chí Minh, ngày 12 tháng 07 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Thái Dương Duy. Lớp: 13141DT3A MSSV: 13141040 Tên đề tài: THIẾT KẾ THI CÔNG HỆ THỐNG ĐIỀU KHIỂN TÍN HIỆU ĐÈN GIAO THÔNG THÔNG QUA XỬ LÝ ẢNH. Xác nhận Tuần/ngày Nội dung GVHD - Gặp giáo viên hướng dẫn để phổ biến quy định: thực hiện chọn đề tài, tên đề tài, thời gian 1 làm việc. (19-25/3) - Duyệt đề tài. - Viết đề cương cho đề tài. 2 - Tìm hiểu hoạt động Arduino và Matlab. (26/3-1/4) - Cài đặt Matlab, Arduino. 3 - Lập trình Arduino với các chân I/O để nhúng (2/4-8/4) dữ liệu. - Tìm hiểu các thuật toán xử lý ảnh đầu vào. 4 - Các hàm cơ bản xử dụng cho việc sử lý ảnh (9/4-15/4) đầu vào. - Thiết kế sơ đồ khối giải thuật xử lý ảnh đêm 5 đối tượng ảnh đầu vào. (16/4-22/4) - Tìm hiểu cách giao tiếp Arduino với module 6 Led 7 đoạn 2 digit. (23/4-29/4) - Tính toán các thông số dòng và áp. Để lựa iv chọn các linh kiện phù hợp. - Viết lưu đồ chương trình đèn giao thông. 7 - Tiến hành viết chương trình và hiệu chỉnh (30/4-6/5) chương trình. 8 - Tìm hiểu cách kết nối giữa matlab và adruino. (7/5-13/5) - Tiến hành gửi dữ liệu từ Matlab sang arduino. - Xây dựng mô hình. 9 - Kiểm tra, hoàn thiện mô hình, chạy thử và sửa (14/5-20/5) lỗi. Viết báo cáo. - Kiểm tra, hoàn thiện mô hình, chạy thử và sửa 10 lỗi. (21/5-27/5) - Viết báo cáo. 11 - Hoàn thiện, chỉnh sửa báo cáo gửi cho GVHD (28/5-3/6) để xem xét góp ý lần cuối trước khi in báo cáo. 12 - Nộp quyển báo cáo và làm Slide báo cáo. (4/6-10/6) GV HƯỚNG DẪN (Ký và ghi rõ họ và tên) v LỜI CAM ĐOAN Chúng tôi cam đoan đồ án tốt nghiệp là công trình nghiên cứu của bản thân chúng tôi dưới sự hướng dẫn của thạc sĩ Võ Đức Dũng. Các kết quả công bố trong đồ án tốt nghiệp “Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh” là trung thực và không sao chép từ công trình nào khác. Người thực hiện đề tài. Nguyễn Thái Dương Duy vi LỜI CẢM ƠN Trong quá trình làm đồ án tốt nghiệp, chúng em đã nhận được rất nhiều sự ủng hộ, giúp đỡ đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè. Chúng em xin gửi lời cảm ơn chân thành đến Th.S Võ Đức Dũng - Trường Đại học Sư phạm Kỹ thuật Tp.HCM đã tận tình hướng dẫn chỉ bảo trong suốt thời gian làm luận án tốt nghiệp. Thầy đã tạo nhiều điều kiện và cho những lời khuyên quý báu giúp chúng em hoàn thành tốt khóa luận. Xin chân thành cảm ơn thầy cô giáo trong Trường Đại học Sư phạm Kỹ thuật Tp.HCM nói chung, các thầy cô trong Bộ môn Điện tử Công Nghiệp – Y Sinh nói riêng đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức quý báu và tạo điều kiện giúp đỡ trong suốt quá trình học tập trong những năm học vừa qua, giúp chúng em có được cơ sở lý thuyết vững vàng. Cuối cùng, chúng em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện, quan tâm, ủng hộ, giúp đỡ, động viên chúng em trong suốt quá trình học tập và hoàn thành đồ án tốt nghiệp. Chúng em xin chân thành cảm ơn! Người thực hiện đề tài. Nguyễn Thái Dương Duy. vii MỤC LỤC Trang bìa .................................................................................................................... i Nhiệm vụ đồ án ......................................................................................................... ii Lịch trình ................................................................................................................ iv Cam đoan ................................................................................................................ vi Lời cảm ơn .............................................................................................................. vii Mục lục .................................................................................................................. viii Liệt kê hình vẽ ......................................................................................................... xi Liệt kê bảng vẽ ....................................................................................................... xiv Tóm tắt ................................................................................................................... xv CHƯƠNG 1. TỔNG QUAN .......................................................................... 1 1.1 Đặt vấn đề ........................................................................................................ 1 1.2 Mục tiêu .......................................................................................................... 3 1.3 Nội dung nghiên cứu ........................................................................................ 3 1.4. Giới hạn .......................................................................................................... 3 1.5 Bố cục ............................................................................................................. 4 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT .............................................................. 6 2.1 Giới thiệu xử lý ảnh......................................................................................... 6 2.2 Tổng quan về Matlab ....................................................................................... 7 2.3 Giới thiệu về lịch xử hình thành Arduino ........................................................ 8 2.4 Giới thiệu phần cứng ..................................................................................... 10 2.4.1 Kit arduino mega 2560 ............................................................................... 10 2.4.2 Led quét 7 đoạn loại 2 digit ........................................................................ 13 2.4.2.1 Led 7 đoạn ............................................................................................... 13 2.4.2.2 Led quét 7 đoạn loại 2 digit ..................................................................... 14 2.4.3 Led đơn ...................................................................................................... 15 2.5 Quy trình xử lý ảnh ....................................................................................... 15 2.5.1 Xử lý ảnh là gì? .......................................................................................... 15 2.5.2 Quá trình thu nhận ảnh ............................................................................... 16 2.5.3 Quá trình tiền xử lý ảnh ............................................................................. 16 2.5.4 Quá trình phân đoạn ảnh ............................................................................. 16 2.5.5 Biểu diễn và mô tả ...................................................................................... 17 viii 2.5.6 Nhận dạng và nội suy ảnh ........................................................................... 17 2.5.7 Cơ sở tri thức.............................................................................................. 18 2.6 Các phương pháp xử lý cơ bản với một đối tượng ảnh đầu vào ..................... 18 2.6.1 Chuyển đổi ảnh màu sang ảnh màu xám ..................................................... 18 2.6.2 Nhị phân hóa ảnh ....................................................................................... 20 2.6.3 Các phương pháp lọc nhiễu ảnh nhằm cải thiện ảnh ................................... 21 2.6.4 Làm trơn nhiễu bằng lọc tuyến tính ............................................................ 21 2.6.5 Làm trơn nhiễu bằng lọc phi tuyến ............................................................. 24 2.6.6 Phân vùng ảnh ............................................................................................ 24 2.7 Các hàm cơ bản được sử dụng trong quá trình phát hiện và đếm số lượng phương tiện trong đề tài ................................................................................ 25 2.7.1 Hàm imread() ............................................................................................. 25 2.7.2 Hàm imshow() và imagesc() ....................................................................... 25 2.7.3 Hàm rgb2gray() .......................................................................................... 26 2.7.4 Hàm imadjust() .......................................................................................... 27 2.7.5 Hàm tự tính ngưỡng để chuyển sang ảnh nhị phân graythresh(), và hàm chuyển đổi ảnh nhị phân imbinarize() ........................................................... 28 2.7.6 Hàm imdilate() ........................................................................................... 28 2.7.7 Hàm imerode() ........................................................................................... 29 2.7.8 Hàm bwareaopen() ..................................................................................... 30 2.7.9 Hàm bwlable .............................................................................................. 31 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ. ............................................... 32 3.1 Giới thiệu ....................................................................................................... 32 3.2 Tính toán và thiết kế hệ thống ........................................................................ 32 3.2.1 Thiết kế sơ đồ khối hệ thống ....................................................................... 32 3.2.2 Thiết kế các khối hệ thống ................................................................................. 33 3.2.3 Thiết kế mô hình đèn giao thông ................................................................. 40 3.2.4 Sơ đồ nguyên lý của toàn mạch ................................................................... 41 CHƯƠNG 4. THI CÔNG HỆ THỐNG .................................................... 43 4.1 Giới thiệu. ...................................................................................................... 43 4.2 Thi công hệ thống ............................................................................................ 43 4.2.1 Thi công bo mạch ......................................................................................... 43 4.2.2 Lắp ráp và kiểm tra ....................................................................................... 44 ix 4.2.3 Thiết kế giao diện cho người điều khiển ....................................................... 45 4.3 Đóng gói và thi công mô hình .................................................................................... 45 4.4 Lập trình hệ thống ........................................................................................... 46 4.4.1 Lập trình trên phần mềm matlab ................................................................... 46 4.4.1.1 Lưu đồ tổng quát trên matlab ..................................................................... 46 4.4.1.2 Chi tiết về hệ thống.................................................................................... 46 4.4.2 Lập trình trên kit arduino mega 2560 ............................................................ 53 4.4.2.1 Lưu đồ tổng quát trên arduino .................................................................... 53 4.4.2.2 Chương trình điều khiển trên arduino ........................................................ 54 4.5 Viết tài liệu hướng dẫn sử dụng, tháo tác ......................................................... 60 4.5.1 Viết tài liệu hướng dẫn sử dụng .................................................................... 60 4.5.2 Quy trình thao tác trên giao diện ................................................................... 60 CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ ................................ 61 5.1 Kết quả ............................................................................................................ 61 5.2 Nhận xét .......................................................................................................... 72 5.3 Đánh giá .......................................................................................................... 73 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN. .......................... 74 6.1 Kết luận ........................................................................................................... 74 6.2 Hướng phát triển ............................................................................................. 74 TÀI LIỆU THAM KHẢO PHỤ LỤC ........................................................................................................... x LIỆT KÊ HÌNH VẼ Hình Trang Hình 2.1 Máy in 3D Makerbot điều khiển bằng Arduino Mega 2560 ................... 9 Hình 2.2: Xe tự hành ............................................................................................ 10 Hình 2.3: Ambilight dùng Arduino uno ............................................................... 10 Hình 2.4: Sơ đồ và chức năng chân Arduino Mega 2560 ...................................... 11 Hình 2.5: Giao tiếp 2 hệ thống dùng chuẩn UART ............................................... 13 Hình 2.6: Nguyên lý hoạt động chuẩn UART ....................................................... 13 Hình 2.7 Sơ đồ chân LED 7 thanh Anode ............................................................. 14 Hình 2.8: Cấu tạo thanh led 7 đoạn 2 digit ............................................................ 14 Hình 2.9: Sơ đồ chân Led 7 đoạn loại 2 digit. ....................................................... 15 Hình 2.10: Led đơn sắc. ........................................................................................ 15 Hình 2.11: Sơ đồ chân led đơn sắc ........................................................................ 15 Hình 2.12: Kết quả đầu ra của quá trình xử lý ảnh ................................................ 16 Hình 2.13: Sơ đồ quá trình xử lý ảnh .................................................................... 16 Hình 2.14: Chuyển ảnh màu thành ảnh xám ......................................................... 19 Hình 2.15: Lược đồ xám ....................................................................................... 20 Hình 2.16: Ảnh xám và ảnh nhị phân ................................................................... 20 Hình 2.17: Ví dụ bộ lọc trung bình ....................................................................... 22 Hình 2.18: Hiển thị ảnh bằng hàm imshow() ......................................................... 26 Hình 2.19: Hiển thị ảnh bằng hàm imagesc() ........................................................ 26 Hình 2.20: Chuyển đổi ảnh màu thành ảnh xám ................................................... 27 Hình 2.21: Tăng cường độ tương phản của anh bằng hàm imadjust() ................... 27 Hình 2.22: Chuyển đổi ảnh xám sang ảnh nhị phân .............................................. 28 Hình 2.23: Ảnh đầu vào ........................................................................................ 29 Hình 2.24: Ảnh sau khi giản nở ............................................................................ 29 Hình 2.25: Ảnh đầu vào ........................................................................................ 30 Hình 2.26: Ảnh sau khi xói mòn ........................................................................... 30 Hình 2.27: So sánh ảnh gốc và ảnh sau khi xử lý bằng hàm bwareaopen() ........... 31 Hình 3.1: Sơ đồ khối hệ thống .............................................................................. 32 Hình 3.2: Sơ đồ nối dây vi điều khiển trong Broad Arduino Mega ....................... 34 Hình 3.3: Sơ đồ nối dây mạch nạp trong Arduino Mega ....................................... 35 xi Hình 3.4: Sơ đồ nguyên lý led 7 đoạn 2 digit anode chung ................................... 36 Hình 3.5: Led 7 đoạn 2 digit thực tế ..................................................................... 36 Hình 3.6: Led đơn màu xanh, đỏ, vàng thực tế ..................................................... 38 Hình 3.7 Sơ đồ kết nối led đơn với điện trở .......................................................... 38 Hình 3.8 Sơ đồ kết nối led 7 đoạn với điện trở ...................................................... 38 Hình 3.9: Mặt trên của mô hình sau khi thiết kế ................................................... 40 Hình 3.10: Mặt dưới của mô hình sau khi thiết kế ................................................ 41 Hình 3.11: Sơ đồ nguyên lý toàn mạch ................................................................. 42 Hình 4.1 Mô hình sau khi thi công ........................................................................ 43 Hình 4.2. Hỉnh ảnh thực tế sau khi thi công .......................................................... 44 Hình 4.3. Giao diện điều khiển chính trên PC ....................................................... 45 Hình 4.4. Mô hình sau khi thi công ....................................................................... 46 Hình 4.5. Sơ đồ khối tổng quát chính của hệ thống đếm đối tượng trên matlab .... 46 Hình 4.6. Lưu đồ xử lý ảnh đầu vào...................................................................... 48 Hình 4.7. Ảnh đầu vào .......................................................................................... 49 Hình 4.8. Ảnh nền ................................................................................................ 49 Hình 4.9. Ảnh được nhị phân ................................................................................ 50 Hình 4.10. Ảnh sau khi giản nở điểm ảnh ............................................................. 51 Hình 4.11. Ảnh sau khi lấp lỗ trống ...................................................................... 51 Hình 4.12. Ảnh sau khi sói mòn ........................................................................... 52 Hình 4.13. Ảnh sau xóa các đối tượng nhỏ ........................................................... 52 Hình 4.14. Kết quả sau khi xử lý .......................................................................... 53 Hình 4.15. Sơ đồ khối chương trình nhận dữ liệu từ Matlab sang Aruduino ......... 53 Hình 4.16. Lưu đồ chương trình điều khiển ứng dụng trên Arduino ..................... 54 Hình 4.17. Quy trình thao tác với thuật toán đếm số lượng phương tiện ............... 60 Hình 5.1 Giao diện điều khiển chính .................................................................... 61 Hình 5.2. Giao diện lựu chọn lưu lượng phương tiện để quan sát ......................... 61 Hình 5.3. Kết quả quan sát trên giao diện làn 1 khi ít xe ....................................... 62 Hình 5.4. Kết quả quan sát trên mô hình làn 1 khi ít xe ........................................ 63 Hình 5.5. Kết quả quan sát trên giao diện làn 2 khi ít xe ....................................... 63 Hình 5.6. Kết quả quan sát trên mô hình làn 2 khi ít xe ........................................ 64 Hình 5.7. Kết quả quan sát trên giao diện làn 1 khi vừa xe ................................... 65 Hình 5.8. Kết quả quan sát trên mô hình làn 1 khi vừa xe ..................................... 66 xii Hình 5.9. Kết quả quan sát trên giao diện khi làn 2 vừa xe ................................... 66 Hình 5.10. Kết quả quan sát trên mô hình khi làn 2 vừa xe ................................... 67 Hình 5.11. Kết quả quan sát trên giao diện làn 1 khi đông xe ............................... 68 Hình 5.12. Kết quả quan sát trên mô hình làn 1 khi đông xe ................................. 69 Hình 5.13. Kết quả quan sát trên giao diện làn 2 khi đông xe ............................... 69 Hình 5.14. Kết quả quan sát trên mô hình làn 2 khi đông xe ................................. 70 Hình 5.15. Kết quả điều khiển bằng tay làn 1 ....................................................... 71 Hình 5.16. Kết quả điều khiển bằng tay làn 2 ....................................................... 71 xiii LIỆT KÊ BẢNG Bảng Trang Bảng 3.1: Mã hiển thị từ 0 – 9 loại anode chung .....................................................37 Bảng 3.2 Số giây đèn xanh ứng với số xe đếm được ................................................39 Bảng 3.3 Liệt kê điện áp và dòng các linh kiện sử dụng trong mạch ........................39 Bảng 4.1 Danh sách các linh kiện ............................................................................47 Bảng 5.1 Kết quả đếm xe làn 1 khi ít xe ..................................................................64 Bảng 5.2 Kết quả đếm xe làn 2 khi ít xe ..................................................................65 Bảng 5.3 Thống kê kết quả đếm xe làn 1 khi vừa xe ................................................67 Bảng 5.4 Thống kê kết quả đếm xe làn 2 khi vừa xe ................................................68 Bảng 5.5 Kết quả đếm xe làn 1 khi đông xe .............................................................70 Bảng 5.6 Kết quả đếm xe làn 2 khi đông xe .............................................................71 xiv TÓM TẮT Sự phát triển nhanh chóng của nền kinh tế và lượng dân cư đông đúc. Nhu cầu đi lại, vận chuyển cũng tăng lên nhanh chóng đi kèm theo nó là bài toán tắc nghẽn ùn tắc giao thông. Ùn tắc giao thông gây thiệt hại không nhỏ cho sự phát triển kinh tế quốc gia, giảm hiệu suất lao động và tăng các chi phí không cần thiết trong quá trình sản xuất. Trong bối cảnh kinh tế lạm phát và khó khăn như hiện nay, lãng phí trong giao thông lại đặt thêm một gánh nặng đối với đời sống kinh tế của người dân. Nguyên nhân của vấn đề này một phần là do cơ sở hạ tầng chưa đáp ứng được nhu cầu lưu thông hiện nay, một phần là do việc phân chia, định thời gian của hệ thống đèn giao thông hiện tại ở các giao lộ chưa hợp lý khiến cho số lượng phương tiện giao thông bị ùn tắc theo thời gian rồi dẫn đến tắc nghẽn giao thông. Qua thực trạng đó, nhóm muốn xây dựng một hệ thống điều thiết giao thông tự động, phân luồng trực tiếp và hiệu quả hơn phần nào đó giảm bớt tình trạng ùn tắc giao thông. Đồng thời tiêu tiếp cận, bổ sung các kiến thức mới, cũng như củng cố lại những kỹ năng kiến thức trong suốt quá trình học tập tại trường. Do đó, nhóm thực hiện đồ án chọn đề tài: “Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh”. Nghiên cứu này nhằm mục tiêu phát triển giải thuật điều khiển hệ thống đèn giao thông cho một giao lộ, với chu kỳ đèn tín hiệu tùy thuộc vào tình trạng xe lưu thông trên hai tuyến đường quan sát được bởi 2 camera. Giải thuật đếm số lưu lượng xe trên đường được xây dựng để quyết định thời gian của chu kỳ đèn xanh kế tiếp cho tuyến đường tương ứng. Hình ảnh thu được từ camera sẽ được phần mềm mô phỏng giả lập để kiểm chứng giải thuật điều khiển. Kết quả mô phỏng cho thấy tuyến đường nào có lưu lương xe lớn hơn thì chu kỳ đèn xanh của tuyến đường đó dài hơn và ngược lại. Người thực hiện đề tài. Nguyễn Thái Dương Duy. xv xvi CHƯƠNG 1. TỔNG QUAN Chương 1. TỔNG QUAN. 1.1 ĐẶT VẤN ĐỀ. Trong những năm gần đây, mặc dù còn mới mẻ trong lĩnh vực khoa học và công nghệ nhưng xử lý ảnh đang được nghiên cứu và phát triển với tốc độ nhanh chóng bởi các trung tâm nghiên cứu, trường đại học và học viện với rất nhiều ứng dụng trên các lĩnh vực khác nhau [1]. Việc áp dụng công nghệ xử lý ảnh để tạo ra các thiết bị điện tử tự động hóa, phần nào đó thay thế được số lượng các cảm biến cần sử dụng giúp nhà đầu tư và người sử dụng vừa tiết kiệm được chi phí và nâng cao hiệu suất làm việc. Trên thực tế các có rất nhiều bài toán đa dạng về các lĩnh vực công nghiệp, nông nghiệp, an ninh thậm chí là y tế được giải quyết nhờ việc áp dụng công nghệ xử lý ảnh. Hiện nay với sự phát triển nhanh chóng của nền kinh tế nước nhà và lượng dân cư đông đúc. Nhu cầu đi lại, vận chuyển cũng tăng lên nhanh chóng đi kèm theo nó là bài toán tắc nghẽn ùn tắc giao thông. Ùn tắc giao thông gây thiệt hại không nhỏ cho sự phát triển kinh tế quốc gia, giảm hiệu suất lao động và tăng các chi phí không cần thiết trong quá trình sản xuất. Trong bối cảnh kinh tế giảm phát và khó khăn như hiện nay, lãng phí trong giao thông lại đặt thêm một gánh nặng đối với đời sống kinh tế của người dân. Nguyên nhân của vấn đề này một phần là do cơ sở hạ tầng chưa đáp ứng được nhu cầu lưu thông hiện nay, một phần là do việc phân chia, định thời gian của hệ thống đèn giao thông hiện tại ở các nút giao thông chưa hợp lý khiến cho số lượng phương tiện giao thông bị ùn tắc theo thời gian rồi dẫn đến tắc nghẽn giao thông. Hiện tại có rất nhiều giải pháp để nâng cao hiểu phia chia thời gian các làn đường ở các nút giao thông trọng điểm. Như lập trình bộ điều khiển tín hiệu theo khung giờ cao điểm, hay trực tiếp phân luồng bởi con người. Tuy vậy các giải pháp chỉ mang tính tương đối và tốn tài nguyên về con nguời. Ở các quốc gia tiên tiến, giải pháp đưa ra là lắp đặt các hệ thống camera để tự động điều tiết giao thông tại các giao lộ trọng yếu. Trong quá trình phát triển hệ thống kiểm soát giao thông, đã có rất nhiều công bố về việc nghiên cứu thông BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1 CHƯƠNG 1. TỔNG QUAN qua mô phỏng và thực nghiệm nhằm tối ưu hóa các bộ điều khiển đèn tín hiệu. Trong đó, các nghiên cứu điển hình về việc sử dụng kỹ thuật xử lý ảnh kết hợp với điều khiển mờ (fuzzy control) đèn tín hiệu đã được áp dụng thành công [6- 9]. Các hệ thống này có giá rất cao, ví dụ một hệ thống đèn giao thông thông minh thương mại sử dụng máy tính công nghiệp và các camera giám sát được giới thiệu bởi AdvanTech lên đến hàng tỉ đồng cho mỗi chốt giao thông[10]. Ở nước ta, hầu hết các hệ thống đèn giao thông hiện đại đều được nhập khẩu với giá thành cao và kèm theo hàng loạt các vấn đề cần khắc phục, do chúng ta chưa làm chủ được công nghệ. Chẳng hạn, để lắp đặt 121 trụ đèn giao thông do Tây Ban Nha sản xuất, trong dự án “Tăng cường năng lực giao thông thành phố Hồ Chí Minh”, cần đến 3,5 triệu USD. Tuy nhiên, chưa đầy một năm sử dụng, chúng ta đã “phơi nắng” số tiền khổng lồ này, do các trụ đèn giao thông trên không hoạt động được[11]. Năm 2007, Sở Giao Thông Công Chánh thành phố Hồ Chí Minh triển khai lắp đặt 48 chốt đèn gắn cảm biến để điều tiết giao thông tự động, bằng nguồn vốn ODA[12]. Tuy vậy, mới sau một thời gian ngắn sử dụng, các chốt đèn giao thông này đã bị bệnh “nan y”. Ủy Ban Nhân Dân thành phố Hồ Chí Minh phải chi hơn 8.456USD để mời chuyên gia nước ngoài “chẩn bệnh”[13]. Rõ ràng làm chủ công nghệ đèn giao thông là nhu cầu thiết thực mà xã hội đã và đang đặt ra. Nghiên cứu này hướng tới việc kiểm chứng giải pháp thiết kế đèn giao thông có thể thay đổi được số giây đèn xanh cho mỗi làn đường để điều tiết lưu lương cho hợp lý dựa trên công nghệ xử lý ảnh. Hệ thống dùng 2 camera hồng ngoại để quan sát 2 tuyến đường của 1 giao lộ. Tuyến đường nào có lưu lượng xe cao hơn thì chu kì đèn xanh tương ứng cho tuyến đường đó sẽ dài hơn tuyến đường còn lại. Do đó, nhóm thực hiện đồ án chọn đề tài: “Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh”. Nhằm góp phần vào việc xây dựng một phương pháp điều khiển đèn tín hiệu giao thông một cách hợp lý hơn, giúp tình trạng giao thông tại các ngã tư ở nước ta được ổn định hơn. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2 CHƯƠNG 1. TỔNG QUAN 1.2 MỤC TIÊU. Mục tiêu của đề tài là xây dựng hệ thống đếm đối tượng (phương tiện) qua hình ảnh với đầu vào là ảnh có chứa đối tượng cần đếm từ ảnh chụp. Thông qua quá trình xử lý ảnh sẽ cho ra kết quả là số lượng phương tiện của mỗi làn đường từ đó sẽ gửi dữ liệu xuống kít điều khiển arduino để điều khiển tín hiệu đèn giao thông điều tiết giao thông. 1.3 NỘI DUNG NGHIÊN CỨU. Mục tiêu xây dựng đề tài: “Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh” nhóm sẽ thực hiện những nội dung như sau:  NỘI DUNG 1: Tìm hiểu về kit Arduino Mega 2560.  NỘI DUNG 2: Tìm hiểu về phần mềm matlab.  NỘI DUNG 3: Cài đặt thư viện cho ki... trưng trên. Phân vùng ảnh là một bước quan trọng trong nhiều lĩnh vực khác nhau như lĩnh vực hình ảnh y tế (medical imaging), phát hiện và nhận dạng đối tượng, hệ thống camera giám sát, hệ thống điều khiển giao thông, Kỹ thuật này là bước tiền xử lý quan trọng trong hầu hết các hệ thống xử lý ảnh, kết phân vùng tốt sẽ giúp cho quá trình xử lý về sau đạt hiệu quả cao hơn nhằm tiết kiệm về chi phí tính toán, thời gian cũng như tăng độ chính xác của các ứng dụng trên. 2.7 CÁC HÀM CƠ BẢN ĐƯỢC SỬ DỤNG TRONG QUA TRÌNH PHÁT HIỆN VÀ ĐẾM SỐ LƯỢNG PHƯƠNG TIỆN TRONG ĐỀ TÀI[3]. 2.7.1 Hàm imread(). Lệnh imread() sẽ đọc một file thành một ma trận. Matlab trợ giúp rất nhiều định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG, TIFF Để biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online của Matlab. Kết quả trả về của hàm imread() là một ma trận có cùng kích thước với ảnh đầu vào 2.7.2 Hàm imshow() và imagesc(). Để hiển thị hình ảnh trong matlab ta dùng 2 lệnh sau imshow() và imagesc(). Lệnh imshow () cho chúng ta một hình ảnh trong định dạng tiêu chuẩn là 8-bit, giống như trong một trình duyệt web. Lệnh imagesc () hiển thị các hình ảnh trên các trục đồ thị với giá trị min là màu đen và giá trị tối đa là màu trắng. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 25 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Ví dụ: img = imread('ImageProcessing_1/BerkeleyTower.png'); imshow(img); imagesc(img); Kết quả sau khi chạy code. Hình 2.18. Hiển thị ảnh bằng hàm imshow() Hình 2.19 Hiển thị ảnh bằng hàm imagesc() 2.7.3 Hàm rgb2gray(). Lệnh rgb2gray() chuyển đổi hình ảnh RGB thành trắng đen bằng cách loại bỏ các thông tin màu sắc và độ bão hòa nhưng vẫn giữ độ sáng. Ví dụ: img = imread('ImageProcessing_1/BerkeleyTower.png'); gray = rgb2gray(img); imshow(gray); Kết quả sau khi chạy code. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 26 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.20. Chuyển đổi ảnh màu thành ảnh xám. 2.7.4 Hàm imadjust() Lệnh imadjust() điều chỉnh giá trị cường độ hình ảnh. Câu lệnh này làm tăng độ tương phản của hình ảnh đầu ra Ví dụ: img = imread('BerkeleyTower.png'); gray = rgb2gray(img); adj_img = imadjust(gray); subplot(121); imshow(gray); subplot(122); imshow(adj_img); Kết quả sau khi chạy code. Hình 2.21. Tăng cường độ tương phản của anh bằng hàm imadjust() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 27 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.7.5 Hàm tự tính ngưỡng để chuyển sang ảnh nhị phân graythresh(), và hàm chuyển đổi ảnh nhị phân imbinarize(). Bằng cách so sánh giá trị điểm ảnh với một ngưỡng T cố định. Nếu giá trị điểm ảnh lớn hơn T thì gán điểm ảnh màu trắng và ngược lại. Trong phần mềm matlab có hỗ trợ lệnh graythresh() với đầu với là 1 ảnh xám và trả về một hằng số T phục vụ cho quá trinh chuyển đổi ảnh nhị phân qua hàm imbinarize(). Ví dụ: img = imread('BerkeleyTower.png'); gray = rgb2gray(img); T = graythresh(gray) binary_img = imbinarize(gray,T); subplot(121); imshow(gray); subplot(122); imshow(binary_img); Kết quả sau khi chạy code. Hình 2.22. Chuyển đổi ảnh xám sang ảnh nhị phân. 2.7.6 Hàm imdilate() Lệnh imdilate() là lệnh thao tác giãn nở/ phình to các đối tượng ảnh. Ví dụ: A= imread('text.png'); B = strel('line',11,90); A1 = imdilate(BW,B); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 28 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT figure; imshow(A), title('Original') figure; imshow(A1), title('Dilated') B chính là nhân tạo hình. Trong Matlab, chương trình cũng cung cấp cho ta nhiều nhân tạo hình khác nhau, để biết thêm chi tiết gõ help strel. Hình 2.23. Ảnh đầu vào. Hình 2.24. Ảnh sau khi giản nở. 2.7.7 Hàm imerode() Lệnh imerode() có chưc năng làm xói mòn/ co hẹp các đối tượng ảnh đơn sắc. A = imread('text.png'); B = strel('line',11,90); A2= imerode(A,B); Figure; imshow(A), title('Original') Figure; imshow(A2), title('eroded') BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Cũng giống như hàm imdilate(). B đóng vai trò là nhân tạo hình. Hình 2.25. Ảnh đầu vào. Hình 2.26. Ảnh sau khi xói mòn. 2.7.8 Hàm bwareaopen(). Lệnh bwareaopen() dùng để xóa các đối tượng nhỏ có số lượng pixel nhỏ hơn mong muốn để lấy được các đướng tượng cần phân tích. A= imread('text.png'); A2 = bwareaopen(A, 50); imshowpair(A,A2,'montage') BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.27. So sánh ảnh gốc và ảnh sau khi xử lý bằng hàm bwareaopen() 2.7.9 Hàm bwlable Lệnh bwlable có chức năng gắn nhãn các thành phần được kết nối trong hình ảnh nhị phân. Ví dụ: BW = logical 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 0 L = bwlabel(BW,4) L = 1 1 1 0 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 0 2 2 0 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 3 3 0 1 1 1 0 0 0 0 0 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Chương 3. TÍNH TOÁN VÀ THIẾT KẾ. 3.1 GIỚI THIỆU. Mục tiêu của đồ án: thiết kế được mô hình và giao diện chương trình trên matlab đếm đối tượng từ ảnh đầu vào. Đếm đối tượng bằng cách xử lý lý ảnh đầu vào bằng các phương pháp, thuật toán khác nhau như đã nêu ở chương 2 để đưa ra được kết quả là số đối tượng cụ thể có trong ảnh. Cuối cùng truyền tín hiệu điều khiển xuống Arduino để điều khiển tín hiệu đèn giao thông phù hợp với đối tượng đếm được. 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 3.2.1 Thiết kế sơ đồ khối hệ thống. Ảnh đầu vào Bộ xử lý ảnh đầu vào (máy tính) Bộ điều khiển (arduino) Hiển thị (đèn giao thông) Người tham gia giao thông Hình 3.1. Sơ đồ khối hệ thống. Chức năng của từng khối:  Khối ảnh đầu vào: Ảnh được camera đặt trên mỗi trục đường mở mỗi ngã tư sẽ chụp số phương tiện tham gia thông trên mỗi trục đường. Hình ảnh BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ được chụp dưới định dạng file đuôi .PNG, .JPEG, .PEG, để thuận tiện cho việc truyền dữ liệu xuống bộ xử lý ảnh đầu vào (máy tính).  Bộ xử lý ảnh đầu vào (máy tính): Máy tính sẽ thu nhận tín hiệu hình ảnh từ camera để làm dữ liệu ảnh đầu vào cho bộ xử lý ảnh. Bộ xử lý ảnh cụ thể là phần mềm Matlab sẽ phân tích và xử lý hình ảnh để đưa ra kết quả tổng số lượng phương tiện tham gia trên mỗi tuyến đường.  Khối điều khiển (arduino): Nhận giá trị từ bộ xử lý ảnh thông qua chuẩn kết nối UART, xử lý tính toán thời gian các đèn xanh, đỏ, vàng trên mỗi tuyến đường.  Khối hiển thị: Nhận tín hiệu ngõ ra từ khối điều khiển hiển thị số giây đèn xanh, đỏ, vàng trên led 7 đoạn và đèn xanh, đỏ, vàng trên led đơn.  Người tham gia giao thông tuân thủ tín hiệu đèn giao thông. Khi tín hiệu đèn đỏ gần kết thúc camera xe tiếp chụp ảnh làn đường và gửi về bộ xử lý ảnh đầu vào. 3.2.2 Thiết kế các khối hệ thống. Hệ thống được xây dựng toàn bộ trên nền Matlab nhúng dữ liệu xuống kit Arduino nên quá trình tính toán và thiết kế được thực hiện chủ yếu trên phần mềm. a) Thiết kế khối ảnh đầu vào. Camera được lắp đặt tại hai trục đường trước mỗi ngã tư có nhiệm vụ thu nhận hình ảnh các phương tiện tham gia giao thông trên tuyến đường mà nó được lắp đặt sau đó truyền hình ảnh xuống bộ xử lý ảnh đầu vào (máy tính). b) Thiết kế bộ xử lý ảnh đầu vào. Thiết kế một chương trình để xử lý hình ảnh đầu vào bằng các lệnh, hàm được thư viện matlab hỗ trợ. Để đếm được đối tượng hai hình ảnh sẽ được đưa vào. Một là hình ảnh không có xe cộ và ảnh còn lại với đầy đủ các phương tiện. Hình ảnh đầu vào sau đó được chuyển đổi từ rbg sang màu xám bằng cách sử dụng hàm rbg2gray(). Bây giờ so sánh hai ảnh đầu vào và tìm ra sự khác biệt giữa hai ảnh. Để phân biệt các đối tượng và nền trong ảnh xám thì ta chuyển ảnh xám sang ảnh nhị phân. Trước khi chuyển sang ảnh nhị phân ta nên tìm cường độ ngưỡng phù hơp cho ảnh bằng hàm graythresh() từ ngưỡng đó ta tạo ảnh nhị phân bằng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ cách sử dụng hàm im2bw(I,graythresh). Tiếp theo là loại bỏ khuyết điểm, tình trạng thiếu trong hình ảnh và cung cấp thông tin về hình thức và cấu trúc của các hoạt động ảnh sử dụng các hình thái học như xói mòn, giản nỡ, đóng hoặc mở đối tượng, Cuối cùng sử dụng thuật toán đánh nhãn để thực hiện phép đếm đối tượng. c) Lựa chọn khối xử lý trung tâm. Do ta đã chọn Board vi điều khiển Arduino Mega làm khối điều khiển trung tâm ở chương 2 với ngõ ra đủ để kết nối với các thiết bị ngoại vi nên chương này ta chỉ tìm hiểu về cấu tạo bên trong Arduino Mega. Hình 3.2 Sơ đồ nối dây vi điều khiển trong Broad Arduino Mega. Chân RESET của MCU được được nối với nút nhấn tích cực mức cao. Với điện trở kéo lên, đầu vào của vi điều khiển sẽ đọc trạng thái là 5V (HIGH) nếu nút nhấn không được nhấn. Khi nút nhấn được nhấn, nó sẽ kết nối trực tiếp đầu vào vi điều khiển với GND, vì thế mức điện áp đọc tại đầu vào MCU là 0V (LOW), đồng thời MCU sẽ được khởi động lại (RESET). Nếu không có điện trở kéo lên, khi ta nhấn nút sẽ xảy ra hiện tượng đoản mạch. Chân XTAL1 và XTAL2 của MCU được nối vào 2 đầu thạch 16MHz tạo mạch dao động ngoại. Hai tụ 22pF không phân cực được gán vào chân thạch anh để ổn định nhiệt. Để nạp chương trình cho vi điều khiển ta sẽ dùng mạch nạp được tích hợp sẵn trong board Arduino Mega. Dưới đây là sơ đồ đi dây mạch nạp. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Hình 3.3 Sơ đồ nối dây mạch nạp trong Arduino Mega. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Mạch này giao tiếp với MCU thông qua chuẩn UART bằng 2 chân RX, TX và giao tiếp với máy tính bằng cổng USB. Để giao tiếp Arduino Mega với máy tính ta phải cài Driver CH340 trên máy tính. Vì MCU chỉ hỗ trợ 1 chuẩn UART nên mỗi lần muốn nạp chương trình cho MCU ta phải ngắt các kết nối liên quan đến chuẩn UART. d) Thiết kế khối hiển thị. Để hiển thị số giây ở 2 trục đường chính ta sử dụng 2 led 7 đoạn 2 digit. Dưới đây là sơ đồ nguyên lý của led 7 đoạn 2 digit anode chung. Hình 3.4 Sơ đồ nguyên lý led 7 đoạn 2 digit anode chung. Thông số kỹ thuật led 5261BS. - Màu đỏ, A chung ,10 chân. - Điện áp rơi trên LED là 2.2V. - Dòng tối đa chạy qua mỗi LED là 25mA. - Dòng chạy bình thường: 10mA. Hình 3.5 Led 7 đoạn 2 digit thực tế. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Bảng 3.1: Mã hiển thị từ 0 – 9 loại anode chung. Chữ số DB G F E D C B A 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 2 1 0 1 0 0 1 0 0 3 1 0 1 1 0 0 0 0 4 1 0 0 1 1 0 0 1 5 1 0 0 1 0 0 1 0 6 1 1 0 0 0 0 1 0 7 1 1 1 1 1 0 0 0 8 1 0 0 0 0 0 0 0 9 1 0 0 1 0 0 0 0 Nguyên lý hoạt động của led 7 đoạn quét: Dựa trên độ lưu ảnh của mắt một hình ảnh mắt ta thấy nhưng phải mất 40ms mới xử lý xong (cỡ 24-25 hình trong 1 giây), do đó nếu các hình xuất hiện trước mắt ta mà chớp tắt nhanh hơn 25 hình/ giây thì ta không thấy nó chớp nữa. Dựa vào đó bằng cách cho luân phiên nhiều led hiển thị thông tin khác nhau ta có cảm giác nhiều led 7 đoạn sáng đồng thời, với cách này ta chỉ cần 1 bus dữ liệu nối song song cho tất cả các led (gồm 8 dây db, g, f, e, d, c, b, a) mỗi led được điều khiển bằng một tín hiệu khác sao cho tại một thời điểm chỉ có duy nhất một led 7 đoạn được phép hiển thị. Delay nó 1 khoảng thời gian, sau đó chuyển sang led 7 đoạn khác. Thứ tự các chân khi đặt led 7 đoạn ở vị trí các điểm thập phân ở dưới cùng. Ở phía dưới cùng, từ trái sang phải: 1, 2, 3, 4, 5. Ở phí trên cùng, từ trái sang phải: 10, 9, 8, 7, 6. Phần lớn các chân này được nối trực tiếp tới ardunio, tuy nhiên đối với chân cờ bit là chân 7 và chân 8 sẽ được kết nối tới 1 điện trở hạn dòng sau đó kết nối tới arduino. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Thứ tự hiển thị các số đươc điều khiển bởi chân số 7 và chân số 8. Hai chân này có thể khác nhau tùy vào nhà sản xuất. Chân 8 ánh xạ đến chữ sô 1 và chân 7 ánh xạ đến chữ số 2 theo như sơ đồ nguyên lý ở trên. Để hiện thị đèn báo ta sử dụng 3 led đơn với 3 màu xanh, đỏ, vàng ở mỗi trục đường. Hình 3.6 Led đơn màu xanh, đỏ, vàng thực tế. Để cho led sáng, ta cần cấp dòng ILED chọn cấp dòng ILED khoảng 10mA và điện áp VLED là 1,7V phù hợp với điều kiện của mỗi led ở trên. Như vậy ta phải mắc thêm điện trở có giá trị là: Hình 3.7 Sơ đồ kết nối led đơn với điện trở. , RLED= = ≈ 330Ω (3.1) × Led 7 đoạn 2 digit dòng chạy bình thường là 10mA và điện áp rơi trên led là 2.2VDC. Hình 3.8 Sơ đồ kết nối led 7 đoạnvới điện trở. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ . R= = = 280Ω (3.2) × Chọn R= 330 Ω. Trong quá trình nhóm thực hiện đi khảo sát thực tế thì số giây đèn xanh ít nhất khi làn ít xe là 25 giây. Do đó nhóm đã ước lượng tương ứng số giây đèn xanh tương ứng với số xe đếm được để giao lộ không bị ách tắc dưới bảng sau. Bảng 3.2 Số giây đèn xanh ứng với số xe đếm được. Số xe đếm được Số giây đèn xanh Nhỏ hơn 2 xe 25s 2 < Số xe <=4 27s 4 < Số xe <=7 29s 7 < Số xe <=10 35s 10< Số xe<=13 40s 13< Số xe<=17 45 Số xe > 17 50s Từ số giây đèn xanh ta có số giây đèn đỏ = số giây đèn xanh + 3 giây đèn vàng. e) Thiết kế khối nguồn. Bảng 3.3 Liệt kê điện áp và dòng các linh kiện sử dụng trong mạch Điện áp định mức Dòng điện định mức Tên linh kiện Số lượng (VDC) (mA) Arduino mega 1 5 30 2560 Led đơn 6 5 10 Led 7 đoạn 2 digit 2 5 10 Từ bảng trên, ta có khối nguồn như sau: Tổng dòng tiêu thụ Itổng= 30+(6*10)+(10*2)=110 (mA) (3.3) Như vậy ta sẽ sử dụng nguồn: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ - Điện áp: 5V. - Dòng điện: 500mA. Do yêu cầu của đề tài không cần nguồn di chuyển nên sẽ lựa chọn dùng nguồn thông qua cổng USB của máy tính. 3.2.3 Thiết kế mô hình đèn giao thông. Mô hình thực nghiệm đèn giao thông có kích thước 25cm x 25cm, mô hình thiết kế nhằm mô phỏng một ngã tư gồm 2 tuyến đường một chiều giao nhau. Mỗi trụ đèn gồm có:  1 đèn led 7 đoạn 2 digit.  3 đèn led xanh, đỏ, vàng.  Yêu cầu thiết kế mô hình: - Nhỏ gọn, chắc chắn, dễ di chuyển. - Mô hình sẽ có 2 mặt và 4 cạnh bên: Mặt trên sẽ trang trí sao cho giống ngã tư và xác định vị trí đặt 2 led 7 đoạn 2 digit và 6 led đơn sao cho phù hợp. Mặt dưới sẽ để arduino mega. Hai mặt sẽ được cố định song song thông qua 4 cạnh bên sẽ được dán chặt vào mỗi mặt. Hình 3.9 Mặt trên của mô hình sau khi thiết kế. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Dây kết nối PC & Arduino mega arduino 2560 Hình 3.10 Mặt dưới của mô hình sau khi thiết kế. 3.2.4 Sơ đồ nguyên lý của toàn mạch. Nguyên lý hoạt động của toàn bộ hệ thống: Có 2 camera được lắp đặt tại 2 trục đường trước mỗi ngã tư. Camera này có nhiệm vụ thu nhận hình ảnh các phương tiện tham gia giao thông trên mỗi tuyến đương mà nó được lắp đặt. Do điều kiện thực tế phải lắp đặt camera ở trên cao để quay làn đường. Điều này gây khó khăn cho nhóm thực hiện. Nên ở đây nhóm thực hiện sẽ đi khảo sát thực tế và quay video 2 làn đường bằng smartphone. Sau đó video sẽ được nhúng vào matlab để mô phỏng camera đang quay trực tiếp 2 làn đường. Hình ảnh thu được từ các camera sẽ được truyền về máy tính đặt tại ngã tư. Máy tính sẽ thu nhận hình ảnh từ camera làm dữ liệu đầu vào cho bộ xử lý ảnh (Matlab). Bộ xử lý ảnh sẽ có nhiệm vụ phân tích và xử lý hình ảnh để đưa ra kết quả số lượng phương tiện tham gia giao thông ở mỗi tuyến đường. Sau khi so sánh số lượng phương tiện ở mỗi tuyến đường bộ xử lý ảnh sẽ tính toán thời gian các đèn xanh ở làn 1 trước, khi làn 1 kết thúc số giây đèn vàng camera của làn 2 sẽ bắt đầu chụp số lượng phương tiện tham gia trên làn 2 và truyền về bộ xử lý ảnh để đưa ra số giây đèn xanh cho làn 2. Khi làn 2 kết thúc số giây đèn vàng thì camera của làn 1 sẽ chụp số lượng phương tiện tham gia trên làn 1 để xử lý và đưa ra số giây đèn xanh cho làn 1. Quy trình sẽ được lặp đi lặp lại như vậy. Khi tính toán được số giây đèn xanh, đỏ, vàng bộ xử lý ảnh sẽ gửi dữ liệu xuống arduino. Arduino sẽ có nhiệm vụ hiển thị số BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ giây, đèn xanh, đỏ, vàng lên led 7 đoạn và led đơn để người tham gia giao thông quan sát Hình 3.11 Sơ đồ nguyên lý toàn mạch. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42 CHƯƠNG 4. THI CÔNG HỆ THỐNG Chương 4. THI CÔNG HỆ THỐNG. 4.1 GIỚI THIỆU. Chương này nhóm giới thiệu về hệ thống nhóm đã thực hiện, lưu đồ tổng quát của hệ thống, lưu đồ cho chương trình xử lý ảnh đầu vào, lưu đồ chương trình đếm ảnh, lưu đồ cho chương trình nhận và gửi dữ liệu từ matlab sang arduino trên phần mềm matlab và lưu đồ cho chương trình nhận và gửi dữ liệu từ arduino sang matlab trên kit điều khiển Arduio. 4.2 THI CÔNG HỆ THỐNG. 4.2.1 Thi công bo mạch.  Các bước thi công sản phẩm: - Vẽ mạch nguyên lý trong Proteus - Vẽ mạch in ra chân cho các linh kiện để kết nối. - Làm mạch và hàn linh kiện. - Kiểm tra hoạt động của mạch thi công - Kết quả sau khi làm mạch bao gồm khối xử lý trung tâm và khối hiển thị. Hình 4.1. Sơ đồ mạch in ra chân từ arduino. Sơ đồ mạch in ra chân từ arduino được vẽ bằng phần mềm Proteus là phần mềm chuyên về mô phỏng và vẽ mạch in. Mạch có kích thước là 3 x 3cm. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43 CHƯƠNG 4. THI CÔNG HỆ THỐNG Bảng 4.1 Danh sách các linh kiện. STT Tên linh kiện Giá trị Chú thích Số lượng 1 Arduino Mega 5V; 30mA Module 1 2 Led 7 đoạn 2 digit 2.2V; 10mA 2 3 Led đỏ 1,8V; 10mA 2 4 Led xanh 1,8V; 10mA 2 5 Led vàng 1,8V; 10mA 2 6 Điện trở 330Ω 22 4.2.2 Lắp ráp và kiểm tra. Ta tiến hành hàn các linh kiện trong khối theo kích thước từ nhỏ đến lớn. Tiếp đó ta lấy dây bus kết nối giữa các khối lại với nhau. Hình 4.2. Hình ảnh thực tế sau khi thi công. Sau khi lắp ráp và hàn linh kiện hoàn tất ta tiến hành cấp nguồn từ cổng USB của máy tính vào để kiểm tra mạch xem đèn led trên arduino mega có sáng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44 CHƯƠNG 4. THI CÔNG HỆ THỐNG đèn không. Sau đó nạp thử một đoạn chương trình để kiểm tra led đơn là led 7 đoạn. 4.2.3 Thiết kế giao diện cho người điều khiển. Hình 4.3. Giao diện điều khiển chính trên PC. Mô hình bao gồm 2 làn đường 1 chiều. Ở mỗi làn sẽ có 1 led 7 đoạn quét loại 2 digit hiển thị số giây và 3 led đơn biểu hiện tín hiệu đèn giao thông. Sẽ có 2 chế độ điều khiển là AUTO và MANUAL. - Chế độ AUTO: camera sẽ tự động chụp hình ảnh ở mỗi làn, đếm số lượng phương tiện và hiển thị số giây đèn xanh, đỏ, vàng cho phù hợp. - Chế độ MANUAL: Cho phép người điều khiển nhập số giây đèn xanh ở mỗi làn. Phòng trường hợp sự cố xảy ra. 4.3 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH. Để mạch hoạt động ổn định, không bị va đập và hỏng hóc ta sẽ thiết kế thêm phần vỏ mica bao bên ngoài mỗi khối. Mỗi vỏ mica sẽ bao gồm 6 mặt tạo thành một hình hộp và ta sẽ cố định mạch vào mặt dưới cùng của vỏ bằng keo 502. Ta sẽ dùng phần mềm CorelDraw để thiết kế Mặt trên và mặt dưới của mô hình sẽ có cùng kích thước 25 x 25cm. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45 CHƯƠNG 4. THI CÔNG HỆ THỐNG Bốn cạch bên sẽ có kích thước 3 x 25cm. Một cạch sẽ được khoét 1 lỗ để cho cổng kết nối đưa ra kết nối với máy tính. Về phần mặt trên của mô hình người thiết kế dùng phần mềm CorelDraw để vẽ một ngã tư sau đó in ra và được dán lên mặt trên của mô hình Hình 4.4. Mô hình sau khi thi công. 4.4 LẬP TRÌNH HỆ THỐNG 4.4.1 Lập trình trên phần mềm Matlab. 4.4.1.1 Sơ đồ khối tổng quát trên matlab. Ngõ Xác định nền Chuyển đổi Xác định Đếm số vào (background) không gian đối tượng đối tượng Hình 4.5. Sơ đồ khối tổng quát chính củmàua hệ thống đếmtrong đối ảtưnhợ ng trên matlab. Đầu tiên hệ thống sẽ lấy video đầu vào được quay từ camera (do mô hình là mô phỏng nếu áp dụng vào thực thế hệ thống sẽ lấy ảnh video được quay trực tiếp thực tế từ smartphone). Video sau khi lấy được sẽ được nâng cao độ tương phản, khử nhiễu, khử bóng, khử độ lệch loại bỏ các đối tượng không quan tâm để giảm sai số cho quá trình đếm đối tương. Sau quá trình xử lý ảnh đầu vào chương trình đếm đối tượng sẽ đếm tất cả các đối tượng còn lại trên ảnh. Kết quả cuối cùng sẽ là số lượng phương tiện có trên hình sẽ được gửi đến vi điều khiển để điểu khiển mô hình. 4.4.1.2 Chi tiết về hệ thống. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46 CHƯƠNG 4. THI CÔNG HỆ THỐNG Xử lý ảnh đầu vào. Ảnh đầu vào được chụp từ camera điện thoại trước khi đưa vào chương trình xử lý ảnh đầu vào. Sau đó chương trình xử lý ảnh đầu vào được tiến hành theo các bước sau: Bắt đầu B=Lấy ảnh nền A=Lấy ảnh có đối tượng Chuyển đổi ảnh qua ảnh xám Tìm kích thước ảnh (chiều rộng & chiều dài) Đặt giá trị ngưỡng = 33 fg=abs(A - B) i, j =1 Đ j < chiều dài 2 1 Đ S i=1; j=j+1 i < chiều rộng S Đ fg(i, j)=0 fg(i, j)>33 fg(i, j)=A(i, j) i=i+1 1 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47 CHƯƠNG 4. THI CÔNG HỆ THỐNG 2 Tăng độ tương phản của ảnh Chuyển đổi sang ảnh nhị phân Lọc nhiễu Lấp đầy lỗ trống Xóa các đối tượng nhỏ Dán nhãn đối tượng bằng hàm bwlable() Đếm các đối tượng bằng hàm regionprops() Gửi dữ liệu sang arduino Kết thúc Hình 4.6. Lưu đồ xử lý ảnh đầu vào. Bước đầu hệ thống sẽ lấy hai ảnh đầu vào một ảnh nền chụp làn đường khi không có xe và một ảnh khi làn có xe. Hai ảnh này sẽ được chuyển thành ảnh xám để dễ xử lý. Sau đó hệ thống sẽ so sánh hai ảnh trên để tìm ra những đối tượng khác biệt ở đây là các phương tiện đang dừng trước đèn đỏ. Kết quả sau khi so sánh sẽ được khử bóng và tăng độ chi tiết. Sau đó ảnh sẽ được nhị phân hóa, kế tiếp là sử dụng các phương pháp hình thái học như co giãn ảnh, xói mòn, đóng mở đối tượng trong ảnh để thu được các đối tượng trong ảnh cũng loại bỏ các đối tượng không mong muốn. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48 CHƯƠNG 4. THI CÔNG HỆ THỐNG Code xử lý ảnh đầu vào. MV = imread(anh_dau_vao.jpg'); % đọc ảnh cần xử lý đầu vào imshow(MV); Hình 4.7. Ảnh đầu vào. MV1 = imread(‘anh_nen.jpg’); % đọc ảnh nền đầu vào imshow(MV1); Hình 4.8. Ảnh nền. A = double(rgb2gray(MV));%chuyển đổi sang ảnh xám B= double(rgb2gray(MV1)); [height, width] = size(A); %Lấy kích thước của ảnh thresh=33; %lấy ngưỡng fr_diff = abs(A-B); %so sánh ảnh %nếu điểm ảnh nhỏ hơn ngưỡng đã chọn gán giá trị điểm ảnh bằng 0 ngược lại giữ nguyên giá trị. 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 49 CHƯƠNG 4. THI CÔNG HỆ THỐNG fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg);% tăng độ tương phản của ảnh level=graythresh(sd);%Lấy ngưỡng tự đông bw=imbinarize(sd,level);%nhị phân ảnh imshow(bw); Hình 4.9. Ảnh được nhị phân. SE1 = strel('square',2); anh_mo_rong = imdilate(bw,SE1); %giản nở điểm ảnh imshow(anh_mo_rong); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50 CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.10. Ảnh sau khi giản nở điểm ảnh. anh_lap_lo=imfill(anh_mo_rong,'holes');%lấp lỗ trống đối tượng imshow(anh_lap_lo); Hình 4.11. Ảnh sau khi lấp lỗ trống. se = strel('square',8); anh_xoi_mon= imerode(anh_lap_lo,se);%sói mòn đối tượng imshow(anh_xoi_mon); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.12. Ảnh sau khi sói mòn. bw3 = bwareaopen(anh_xoi_mon,250); %xóa các đối tượng nhỏ imshow(bw3); Hình 4.13. Ảnh sau xóa các đối tượng nhỏ. Lable = bwlable(bw3,8); imagesc(labeled), title (['Foreground']); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.14. Kết quả sau khi xử lý. Đếm đối tượng trong ảnh, mỗi đối tượng sẽ được hiển thị bằng một màu sắc khác nhau. Sau khi dán nhãn được đối tượng. Sử dụng hàm blobMeasurements = regionprops(labeled,'all'); %trả về các phép đo tập hợp các thuộc tính của mỗi đối tượng. numberofcars = size(blobMeasurements, 1); %trả về số lượng đối tượng có trong ảnh Tuy nhiên với phương pháp này có hạn chế nếu các đối tượng quá sát nhau thì sẽ đếm thành 1 đối tượng. Không thể phân loại được phương tiện hoặc người đi bộ. 4.4.2 Lập trình trên kit arduino mega 2560. 4.4.2.1 Sơ đồ khối tổng quát trên Arduino. Quá trình gửi kết quả xuống Arduino được thực hiện như sau: Dữ liệu từ Arduino điều Hiển thị (Led 7 matlab khiển đoạn, led đơn) Hình 4.15. Sơ đồ khối chương trình nhận dữ liệu từ Matlab sang Aruduino. Điều khiển ứng dụng trên Arduino: Sau khi nhận được kết quả từ matlab. Arduino sẽ dựa trên kết quả nhận được để quy định số giây đen xanh và trạng thái của các đèn tín hiệu của làn 1. Tiến hành đếm ngược khi hoàn tất chu kì đầu tiên (kết thúc đèn vàng). Arduino sẽ gửi trả dữ liệu về matlab để tiếp tục quá trình lấy ảnh để xử lý. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.4.2.2 Chương trình điều khiển trên arduino. Bắt đầu Biến làn = 0 Sai While (true) Kết thúc Đúng Sai Đọc được dữ liệu matlab Đúng Biến làn +1 Sai Biến làn = 3 Đúng Biến làn =1 Đúng Sai Biến làn = 1 Hiển thị điều Hiển thị điều khiển làn 1 khiển làn 2 Gửi dữ liệu lên matlab Hình 4.16. Lưu đồ chương trình điều khiển ứng dụng trên Arduino. Code điều khiển ứng dụng trên arduino. //=========khai bao thư viện led 7 đoạn============ #include "C:\Users\Dell\Desktop\do_an_2\LEDDisplay.h" LEDDisplay *led; //khai báo biến BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 CHƯƠNG 4. THI CÔNG HỆ THỐNG int counter; int chuc1,donvi1,chuc2,donvi2,num1,num2; unsigned long lastUpdate; int do2 = 14; int vang2 = 15; int xanh2 = 16; int do1 = 17; int vang1 =18; int xanh1 = 19; int test = 24; int txanh,t; int tx2,tx1,td1,td2; int dem=0; int data =0; void setup() { //=========khởi tạo Serial========= Serial.begin(9600); //khởi tạo led 7 đoạn int digitFlagPins[] = {10,11,12,13}; int segmentPins[] = {2, 3, 4, 5 ,6 ,7 ,8, 9}; int decimalPointPin = 9; led = new LEDDisplay(4, digitFlagPins, segmentPins, decimalPointPin); //định nghĩa chân pinMode(do1, OUTPUT); pinMode(vang1, OUTPUT); pinMode(xanh1, OUTPUT); pinMode(do2, OUTPUT); pinMode(vang2, OUTPUT); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 CHƯƠNG 4. THI CÔNG HỆ THỐNG pinMode(xanh2, OUTPUT); pinMode(test, OUTPUT); } //=========chương trình con hiển hiện led 7đoạn quét========= void ht1(void) { int c; for(c=0;c<100;c++) { chuc1=num1/10; donvi1=num1%10; led->displayNumber(chuc1, 1);//den1=m[chuc1]; delay(2); led->displayNumber(donvi1, 0); delay(2); chuc2=num2/10; donvi2=num2%10; led->displayNumber(chuc2, 3);//den1=m[chuc1]; delay(2); led->displayNumber(donvi2, 2); delay(2); } } //=========ham chinh========= void loop() { if(Serial.available()>0) { txanh = Serial.read(); //=======mỗi lần đọc được dữu liệu từ matlab sẽ xữ lý điều khiển làn tiếp theo luân phiên xử lý 2 làn. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 CHƯƠNG 4. THI CÔNG HỆ THỐNG //======= quy ước khi biến dem =1 xử lý làn 1, khi biến dem = 2 xử lý làn 2 dem=dem+1; if (dem ==3) { dem=1; } // ========xử lý điều khiển làn 1 gián tiếp điều khiển làn 2============= if (dem==1) { tx1= txanh;// thời gian đèn xanh làn 1 được gán bằng dữ liệu nhận về từ matlab td2= tx1+3;//thời gian đèn đỏ làn 2 sẽ dựa vào đèn xanh làn một công thêm 3 giây đèn vàng. num1=td2; num2=tx1; do { digitalWrite(xanh1, HIGH);//x1=bat; digitalWrite(do2, HIGH);//d2=bat; digitalWrite(vang2, LOW);//v2=tat; digitalWrite(do1, LOW);//d1=bat ht1(); //gọi hàm con để hiển hiện led 7 đoạn num1--; num2--; } //======code xư lý chu kì đèn vàng======= while(num2!=0); num1=num2=3; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 CHƯƠNG 4. THI CÔNG HỆ THỐNG do { digitalWrite(xanh1, LOW);//x1=tat; digitalWrite(vang1, HIGH);//v1=bat; digitalWrite(do2, HIGH);//d2=bat; ht1(); num1--; num2--; if (num1==1) { data=data+1; Serial.write(data); } } while(num1!=0); } // ========xử lý điều khiển làn 2 gián tiếp điều khiển làn 1============= else { tx2= txanh;// thời gian đèn xanh làn 2 được gán bằng dữ liệu nhận về từ matlab td1= tx2+3;//thời gian đèn đỏ làn 2 sẽ dựa vào đèn xanh làn một công thêm 3 giây đèn vàng. num2=td1; num1=tx2; do { digitalWrite(xanh2, HIGH);//x1=bat; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 CHƯƠNG 4. THI CÔNG HỆ THỐNG digitalWrite(do1, HIGH);//d2=bat; digitalWrite(vang1, LOW);//v2=tat; digitalWrite(do2, LOW);//d1=bat ht1(); num1--; num2--; } //======code xử lý đèn vàng===== while(num1!=0); num1=num2=3; do { digitalWrite(xanh2, LOW);//x1=tat; digitalWrite(vang2, HIGH);//v1=bat; digitalWrite(do1, HIGH);//d2=bat; ht1(); num1--; num2--; if (num1==1) { data=data+1; Serial.write(data); } } while(num1!=0); } } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC. 4.5.1 Viết tài liệu hướng dẫn sử dụng. Bước 1: Kết nối với kit Arduino với máy tính. Bước 2: Chạy video. Bước 3: Tiến hành chạy chương trình đếm phương tiên giao thông. Bước 4 Quan sát kết quả. Chuẩn bị Kết nối với Chạy video Arduino Quan sát Chạy chương kết quả trình H...= fread(obj,1) if (mod(data,2)==1) fwrite(s,b1); else fwrite(s,a1); end - Chương trình xử lý làn ít xe 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 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC 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 làn 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) 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 các ??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 trên ?nh BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC 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 khi 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? làn xe ?ang x? lý %quy ??i và hi?n th? th?i gian ?èn xanh if (numberofcars <= 2) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 4) fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 7) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); else fwrite(s,35); set(handles.ed_sogiayxanh,'String',35); end %=========th?c hi?n hàm read_data khi matlab nh?n ???c d? li?u t? arduino s.BytesAvailableFcn = {@read_data,handles}; function ed_lanxe_Callback(hObject, eventdata, handles) function ed_lanxe_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_slxe_Callback(hObject, eventdata, handles) function ed_slxe_CreateFcn(hObject, eventdata, handles) . if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_sogiayxanh_Callback(hObject, eventdata, handles) function ed_sogiayxanh_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function figure1_CreateFcn(hObject, eventdata, handles) 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(hObject, eventdata, handles) %===kh?i t?o bi?n==== global s; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC global anhnen_lan1; global anhnen_lan2; data = fread(hObject,1);% ??c d? li?u t? Arduino if (mod(data,2)==1) % x? lý làn 2 set(handles.ed_lanxe,'String','LÀN 2'); MV = imread('input_2.jpg'); MV1 = anhnen_lan2; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV)); B= double(rgb2gray(MV1)); [height, width] = size(A); thresh=33; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square',8); anh_mo_rong = imdilate(bw,se); se = strel('square', 10); filteredForeground = imopen(anh_mo_rong, se); bw_0= filteredForeground; anh_lap_lo=imfill(bw_0,'holes'); anh_xoa = bwareaopen(anh_lap_lo,1000); labeled = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled,'all'); numberofcars = size(blobMeasurements, 1); axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); elseif (mod(data,2) == 0)% x? lý làn 1 MV = imread('input_1.jpg'); set(handles.ed_lanxe,'String','LÀN 1'); MV1 = anhnen_lan1; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV)); B= double(rgb2gray(MV1)); [height, width] = size(A); thresh=33; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); else fg(k,j) = 0; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square',8); anh_mo_rong = imdilate(bw,se); se = strel('square', 10); filteredForeground = imopen(anh_mo_rong, se); bw_0= filteredForeground; anh_lap_lo=imfill(bw_0,'holes'); anh_xoa = bwareaopen(anh_lap_lo,1000); labeled = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled,'all'); numberofcars = size(blobMeasurements, 1); end axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); set(handles.ed_slxe,'String',numberofcars); if (numberofcars <= 2) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 4) fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 7) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); else fwrite(s,35); set(handles.ed_sogiayxanh,'String',35); end % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) close; % thoát và m? giao di?n lc_ll Lc_ll; function edit4_Callback(hObject, eventdata, handles) function edit4_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit5_Callback(hObject, eventdata, handles) function edit5_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC set(hObject,'BackgroundColor','white'); end function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit8_Callback(hObject, eventdata, handles) function edit8_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit9_Callback(hObject, eventdata, handles) function edit9_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function pushbutton4_Callback(hObject, eventdata, handles) - Chương trình xử lý ảnh làn vừa xe function varargout = guivua_xe(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @guivua_xe_OpeningFcn, ... 'gui_OutputFcn', @guivua_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 guivua_xe_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = guivua_xe_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btn_bd_Callback(hObject, eventdata, handles) set(handles.btn_bd,'visible','off'); %?n nút nh?n b?t ??u. global s; global anhnen_lan1; global anhnen_lan2; img = imread('logo.png'); img2 = imresize(img, [200 1400]); imshow(img2,'Parent',handles.axes4); anhnen_lan1 = imread('nenvua1.jpg'); anhnen_lan2 = imread('nenvua2.jpg'); MV = imread('input_1.jpg'); MV1 = anhnen_lan1; A = double(rgb2gray(MV));%chuy?n ??i ?nh sang Gray B= double(rgb2gray(MV1)); [height, width] = size(A); %l?y kích th??c ?nh BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC %==so sánh ?nh== thresh=35; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); elseif(fr_diff(k,j)>=255) fg(k,j) = 1; else fg(k,j) = 0; end end end sd=imadjust(fg);% t?ng ?? t??ng ph?n c?a ?nh level=graythresh(sd);%l?y ng??ng và chuy?n ?nh nh? phân bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; anh_xoa = bwareaopen(filteredForeground,300); SE1 = strel('line',10,90);%m? r?ng ??i v?i m?t n? ???ng th?ng v?i góc 90 ?? anh_mo_rong = imdilate(anh_xoa,SE1); SE1 = strel('square',8);%m? r?ng ??i t??ng v?i m?t n? hình vuông anh_mo_rong = imdilate(anh_mo_rong,SE1); anh_lap_lo=imfill(anh_mo_rong,'holes');% l?p l? tr?ng se = strel('line',20,0);%xói mòn ??i t??ng v?i m?t n? ???ng th?ng góc 0 ?? anh_xoi_mon= imerode(anh_lap_lo,se); anh_xoa = bwareaopen(anh_xoi_mon,500);%xóa các ??i t??ng nh? labeled1 = bwlabel( anh_xoa,8);%?ánh nh?n d?i t??ng blobMeasurements = regionprops(labeled1,'all');%l?y thông tin ??i t??ng numberofcars = size(blobMeasurements, 1); axes(handles.axes1); MV2 = imresize(MV, [700 1200]); imshow(MV2,'Parent',handles.axes1); % hi?n th? ?nh x? lý axes(handles.axes11); imagesc(labeled1,'Parent',handles.axes11);% hi?n th? k?t qu? sau khi x? lý set(handles.ed_slxe,'String',numberofcars);%hi?n th? s? l??ng ??i t??ng set(handles.ed_lanxe,'String','LÀN 1');%hi?n th? làn xe %quy ??i, hi?n th? g?i d? li?u th?i gian ?èn xanh sang arduino if (numberofcars <= 5) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 7) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 9) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); elseif (numberofcars <= 14) fwrite(s,35); set(handles.ed_sogiayxanh,'String',35); elseif (numberofcars <= 17) fwrite(s,40); set(handles.ed_sogiayxanh,'String',40); else fwrite(s,45); set(handles.ed_sogiayxanh,'String',45); end s.BytesAvailableFcn = {@read_data,handles};%hàm con th?c hi?n khi nhân ???c d? li?u t? Arduino function ed_lanxe_Callback(hObject, eventdata, handles) function ed_lanxe_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_slxe_Callback(hObject, eventdata, handles) function ed_slxe_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_sogiayxanh_Callback(hObject, eventdata, handles) function ed_sogiayxanh_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function figure1_CreateFcn(hObject, eventdata, handles) 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(hObject, eventdata, handles) global s; global anhnen_lan1; global anhnen_lan2; data = fread(hObject,1); if (mod(data,2)==1) %x? lý làn 2 set(handles.ed_lanxe,'String','LÀN 2'); MV = imread('input_2.jpg'); MV1 = anhnen_lan2; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV)); B= double(rgb2gray(MV1)); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC [height, width] = size(A); thresh=33; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; anh_xoa = bwareaopen(bw_0,700); %% x? lý nhi?u if(anh_xoa(752,1)==1 ||anh_xoa(756,215)==1 ||anh_xoa(750,124)==1) anh_lap_lo=imfill(anh_xoa,'holes');% l?p l? SE1 = strel('square',5); anh_mo_rong = imdilate(anh_lap_lo,SE1);% m? r?ng ?i?m ?nh anh_lap_lo=imfill(anh_mo_rong,'holes'); %l?p l? se = strel('line',15,90);%xói mòn ?i?m ?nh anh_xoi_mon= imerode( anh_lap_lo,se); anh_xoa = bwareaopen(anh_xoi_mon,800);%xóa ??i t??ng nh? SE1 = strel('line',20,90); anh_mo_rong = imdilate(anh_xoa ,SE1); labeled1 = bwlabel(anh_mo_rong,8); else se = strel('line',10,90); anh_mo_rong = imdilate(anh_xoa ,se); labeled1 = bwlabel(anh_mo_rong,8); end blobMeasurements = regionprops(labeled1,'all'); numberofcars = size(blobMeasurements, 1); axes(handles.axes11); imagesc(labeled1,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC elseif (mod(data,2) == 0) MV = imread('input_1.jpg'); set(handles.ed_lanxe,'String','LÀN 1'); MV1 = anhnen_lan1; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV));%convert to gray B= double(rgb2gray(MV1));%convert 2nd image to gray [height, width] = size(A); %image size? thresh=35; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; anh_xoa = bwareaopen(filteredForeground,300); SE1 = strel('line',10,90); anh_mo_rong = imdilate(anh_xoa,SE1); SE1 = strel('square',8); anh_mo_rong = imdilate(anh_mo_rong,SE1); anh_lap_lo=imfill(anh_mo_rong,'holes'); se = strel('line',15,0); anh_xoi_mon= imerode( anh_lap_lo,se); anh_xoa = bwareaopen(anh_xoi_mon,500); labeled1 = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled1,'all'); numberofcars = size(blobMeasurements, 1); end axes(handles.axes11); imagesc(labeled1,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); set(handles.ed_slxe,'String',numberofcars); if (numberofcars <= 5) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 7) fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 9) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); elseif (numberofcars <= 14) fwrite(s,35); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC set(handles.ed_sogiayxanh,'String',35); elseif (numberofcars <= 17) fwrite(s,40); set(handles.ed_sogiayxanh,'String',40); else fwrite(s,45); set(handles.ed_sogiayxanh,'String',45); end % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) close; % thoa và chay chuong trinh Lc_ll Lc_ll; function edit4_Callback(hObject, eventdata, handles) function edit4_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit5_Callback(hObject, eventdata, handles) function edit5_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit8_Callback(hObject, eventdata, handles) function edit8_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit9_Callback(hObject, eventdata, handles) function edit9_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function pushbutton4_Callback(hObject, eventdata, handles) - Chương trình xử lý ảnh làn đông xe function varargout = guidong_xe(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @guidong_xe_OpeningFcn, ... 'gui_OutputFcn', @guidong_xe_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC 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 guidong_xe_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = guidong_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); anhnen_lan1 = imread('hinhnendongxelan1.jpg'); anhnen_lan2 = imread('hinhnendongxelan2.jpg'); MV = imread('input_1.jpg'); MV1 = anhnen_lan1; A = double(rgb2gray(MV)); B= double(rgb2gray(MV1)); [height, width] = size(A); %image size? thresh=55; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); elseif(fr_diff(k,j)>=255) fg(k,j) = 1; else fg(k,j) = 0; end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; SE1 = strel('square',6); anh_mo_rong = imdilate(bw_0,SE1); anh_lap_lo=imfill(anh_mo_rong,'holes'); anh_xoa = bwareaopen(anh_lap_lo,100); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC labeled1 = bwlabel(anh_lap_lo,8); se = strel('disk',5); anh_xoi_mon= imerode(anh_xoa,se); anh_xoa = bwareaopen(anh_xoi_mon,500); labeled = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled,'all'); numberofcars = size(blobMeasurements, 1); axes(handles.axes1); MV2 = imresize(MV, [700 1200]); imshow(MV2,'Parent',handles.axes1); axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11); set(handles.ed_slxe,'String',numberofcars); set(handles.ed_lanxe,'String','LÀN 1'); if (numberofcars <= 5) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 7) fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 9) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); elseif (numberofcars <= 14) fwrite(s,35); set(handles.ed_sogiayxanh,'String',35); elseif (numberofcars <= 17) fwrite(s,40); set(handles.ed_sogiayxanh,'String',40); else fwrite(s,45); set(handles.ed_sogiayxanh,'String',45); end s.BytesAvailableFcn = {@read_data,handles}; function ed_lanxe_Callback(hObject, eventdata, handles) function ed_lanxe_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_slxe_Callback(hObject, eventdata, handles) function ed_slxe_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function ed_sogiayxanh_Callback(hObject, eventdata, handles) function ed_sogiayxanh_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function figure1_CreateFcn(hObject, eventdata, handles) global s; s = serial('COM3'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); % --- Executes during object deletion, before destroying properties. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC function figure1_DeleteFcn(hObject, eventdata, handles) out = instrfind; fclose(out); function read_data(hObject, eventdata, handles) global s; global anhnen_lan1; global anhnen_lan2; data = fread(hObject,1); if (mod(data,2)==1) set(handles.ed_lanxe,'String','LÀN 2'); MV = imread('input_2.jpg'); MV1 = anhnen_lan2; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV));%convert to gray B= double(rgb2gray(MV1));%convert 2nd image to gray [height, width] = size(A); %image size? thresh=33; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg); level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; SE1 = strel('square',6); anh_mo_rong = imdilate(bw_0,SE1); anh_lap_lo=imfill(anh_mo_rong,'holes'); anh_xoa = bwareaopen(anh_lap_lo,1000); se = strel('disk',5); anh_xoi_mon= imerode(anh_xoa,se); anh_xoa = bwareaopen(anh_xoi_mon,700); labeled = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled,'all'); numberofcars = size(blobMeasurements, 1); axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); elseif (mod(data,2) == 0) MV = imread('input_1.jpg'); set(handles.ed_lanxe,'String','LÀN 1'); MV1 = anhnen_lan1; MV2 = imresize(MV, [700 1200]); A = double(rgb2gray(MV));%convert to gray BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC B= double(rgb2gray(MV1));%convert 2nd image to gray [height, width] = size(A); %image size? thresh=55; fr_diff = abs(A-B); for j = 1:width for k = 1:height if (fr_diff(k,j)>thresh) fg(k,j) = A(k,j); elseif(fr_diff(k,j)>=255) fg(k,j) = 1; else fg(k,j) = 0; end end end sd=imadjust(fg);% adjust the image intensity values to the color map level=graythresh(sd); bw=imbinarize(sd,level); se = strel('square', 3); filteredForeground = imopen(bw, se); bw_0= filteredForeground; SE1 = strel('square',6); anh_mo_rong = imdilate(bw_0,SE1); anh_lap_lo=imfill(anh_mo_rong,'holes'); anh_xoa = bwareaopen(anh_lap_lo,100); labeled1 = bwlabel(anh_lap_lo,8); se = strel('disk',5); anh_xoi_mon= imerode(anh_xoa,se); anh_xoa = bwareaopen(anh_xoi_mon,500); labeled = bwlabel(anh_xoa,8); blobMeasurements = regionprops(labeled,'all'); numberofcars = size(blobMeasurements, 1); end axes(handles.axes11); imagesc(labeled,'Parent',handles.axes11); axes(handles.axes1); imshow(MV2,'Parent',handles.axes1); set(handles.ed_slxe,'String',numberofcars); if (numberofcars <= 5) fwrite(s,25); set(handles.ed_sogiayxanh,'String',25); elseif (numberofcars <= 7) fwrite(s,27); set(handles.ed_sogiayxanh,'String',27); elseif (numberofcars <= 9) fwrite(s,29); set(handles.ed_sogiayxanh,'String',29); elseif (numberofcars <= 14) fwrite(s,35); set(handles.ed_sogiayxanh,'String',35); elseif (numberofcars <= 17) fwrite(s,40); set(handles.ed_sogiayxanh,'String',40); else fwrite(s,45); set(handles.ed_sogiayxanh,'String',45); end function pushbutton2_Callback(hObject, eventdata, handles) close; Lc_ll; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC function edit4_Callback(hObject, eventdata, handles) function edit4_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit5_Callback(hObject, eventdata, handles) function edit5_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit8_Callback(hObject, eventdata, handles) function edit8_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit9_Callback(hObject, eventdata, handles) function edit9_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function pushbutton4_Callback(hObject, eventdata, handles) - 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 = uicontrol(fig2, 'Style', 'push', 'String', 'Pause', ... 'Position', [50 0 50 50], ... 'CallBack', @pause, ... 'UserData', 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')) set(PushButton1,'String','Countinue'); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC 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 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

Các file đính kèm theo tài liệu này:

  • pdfdo_an_thiet_ke_thi_cong_he_thong_dieu_khien_tin_hieu_den_gia.pdf
Tài liệu liên quan