Đồ án Ứng dụng xử lý ảnh điều khiển đèn giao thông tại nút giao thông

pdf 110 trang phuongvu95 13442
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Ứng dụng xử lý ảnh điều khiển đèn giao thông tại nút giao thông", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfdo_an_ung_dung_xu_ly_anh_dieu_khien_den_giao_thong_tai_nut_g.pdf

Nội dung text: Đồ án Ứng dụng xử lý ảnh điều khiển đèn giao thông tại nút giao thông

  1. BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THỐNG TẠI NÚT GIAO THÔNG GVHD: ThS. Võ Đức Dũng SVTH: Nguyễn Hoàn Hảo 15141148 Huỳnh Ngọc Giang 15141140 Tp. Hồ Chí Minh - 12/2019
  2. BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THỐNG TẠI NÚT GIAO THÔNG GVHD: ThS. Võ Đức Dũng SVTH: Nguyễn Hoàn Hảo MSSV: 15141148 SVTH: Huỳnh Ngọc Giang MSSV: 15141140 Tp. Hồ Chí Minh - 12/2019
  3. NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Hoàn Hảo MSSV: 15141148 Huỳnh Ngọc Giang MSSV: 15141140 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: 2015 Lớp: 15141DT1A 15141DT2B I. TÊN ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG II. NHIỆM VỤ 1. Các số liệu ban đầu: - Matlab phiên bản R2017a. - Vi điều khiển Arduino Mega 2560. - 4 video đầu vào. 2. Nội dung thực hiện: Xây dựng hệ thống đèn giao thông tự động dựa trên việc đếm đối tượng qua hình ảnh. Đầu vào là từ video chứa các đối tượng là phương tiện giao thông nói chung. Kết quả đếm được sẽ được gửi xuống vi điều khiển là Arduino Mega 2560 để điều khiển 4 cột đèn giao thông mô hình. Nhóm chúng em sẽ thực hiện các nội dung như sau: Nội dung 1: Tìm hiểu và nghiên cứu về phần mềm matlab, kit Arduino Mega 2560, cách kết nối Arduino với matlab, xây dựng thư viện cho Arduino. Nội dung 2: Tìm hiểu các thuật toán phát hiện vật thể, phương tiện giao thông. Nội dung 3: Tìm hiểu, nghiên cứu, xây dựng quá trình xử lý ảnh đầu vào. Nội dung 4: Thiết kế, xây dựng hệ thống đếm phương tiện qua ảnh, lập trình giao diện sử dụng để thu thập dữ liệu và gửi dữ liệu xuống kit Arduino. Nội dung 5: Thiết kế mô hình thành phẩm. Nội dung 6: Đánh giá kết quả thực hiện. III. NGÀY GIAO NHIỆM VỤ: 06/09/2019 IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 25/12/2019 V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS. Võ Đức Dũng. CÁN BỘ HƯỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH i
  4. 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 18 tháng 12 năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Nguyễn Hoàn Hảo Lớp: 15141DT2B MSSV: 15141148 Họ tên sinh viên 2: Huỳnh Ngọc Giang Lớp: 15141DT1A MSSV: 15141140 Tên đề tài: ỨNG DỤNG XỬ LÍ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG. Xác nhận Tuần/ngày Nội dung GVHD 1 Nhận đề tài, tìm hiểu đề tài. (26/8 – 08/9) 2 Tìm hiểu hoạt động arduino và matlab. (11/9 – 17/9) 3-4-5 Tìm hiểu các hàm cơ bản sử dụng (18/9 – 7/10) Tìm hiểu các thuật toán xử lý ảnh đầu vào. Lựa chọn linh kiện. 5-6-7 Xây dựng cách giao tiếp giữa vi điều khiển và led (7/10 – 21/10) 7 đoạn đôi, led đơn. Viết lưu đồ chương trình. 8-9-10 Tiến hành viết chương trình . (21/10 – 10/11) Xây dựng mô hình. 11-12-13 Kiểm tra, viết báo cáo,kiểm tra phần cứng. (11/11 – 2/12) 15 Làm slide trình chiếu (3/12 – 18/12) 16 Hoàn thành nhiệm vụ đồ án 19/10/2019 GV HƯỚNG DẪN (Ký và ghi rõ họ và tên) ii
  5. LỜI CAM ĐOAN Đồ án tốt nghiệp đây là công trình tự thực hiện và nghiên cứu của nhóm chúng em dưới sự hướng dẫn của Thạc sĩ Võ Đức Dũng. Các số liệu và kết quả trong đồ án “ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG” là trung thực và không sao chép từ công trình nào khác. Nhóm chúng em sẽ chịu trách nhiệm về lời cam đoan của mình. Người thực hiện đề tài. Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang iii
  6. LỜI CẢM ƠN Trong thời gian làm đồ án tốt nghiệp, em đã nhận được nhiều sự 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è. Em xin gửi lời cảm ơn chân thành đến Th.s Võ Đức Dũng, giảng viên trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, người đã tận tình hướng dẫn, chỉ bảo cho chúng em trong suốt quá trình làm khoá luận. Em cũng xin chân thành cảm ơn các thầy cô giáo trong trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, các thầy cô trong Bộ môn Điện Tử Công Nghiệp nói riêng đã dạy dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập. Cuối cù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, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành đồ án tốt nghiệp. Xin chân thành cảm ơn! Người thực hiện đề tài. Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang iv
  7. MỤC LỤC NHIỆM VỤ ĐỒ ÁN i LỊCH TRÌNH THỰC HIỆN ii LỜI CAM ĐOAN iii LỜI CẢM ƠN iv MỤC LỤC v LIỆT KÊ HÌNH ẢNH viii LIỆT KÊ BẢNG VẼ xiv TÓM TẮT xv CHƯƠNG 1. TỔNG QUAN 1 1.1 ĐẶT VẤN ĐỀ 1 1.2 MỤC TIÊU ĐỀ TÀI 2 1.3 NỘI DUNG NGHIÊN CỨU 3 1.4 GIỚI HẠN ĐỀ TÀI 3 1.5 BỐ CỤC 3 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 5 2.1 GIỚI THIỆU XỬ LÝ ẢNH 5 2.1.1 Quá trình thu nhận ảnh 6 2.1.2 Quá trình tiền xử lý ảnh 6 2.1.3 Quá trình phân đoạn ảnh 6 2.1.4 Biểu diễn và mô tả 7 2.1.5 Nhận dạng và nội suy ảnh 7 2.1.6 Cơ sở tri thức 8 2.2 CÁC PHƯƠNG PHÁP XỬ LÝ CƠ BẢN VỚI MỘT SỐ ẢNH ĐỐI TƯỢNG ĐẦU VÀO 8 2.2.1 Chuyển đổi ảnh màu sang ảnh màu xám 8 2.2.2 Nhị phân hóa ảnh 10 2.2.3 Các phương pháp lọc nhiễu ảnh nhằm cải thiện ảnh 10 2.2.4 Làm trơn nhiễu bằng lọc tuyến tính 11 2.2.5 Lọc trung bình không gian 11 2.2.6 Lọc thông thấp 12 v
  8. 2.3 GIỚI THIỆU VỀ MATLAB 14 2.4 CÁC HÀM CƠ BẢN ĐƯỢC SỬ DỤNG 15 2.4.1 Hàm imread() 15 2.4.2 Hàm imshow() và imagesc() 15 2.4.3 Hàm rgb2gray() 16 2.4.4 Hàm imadjust() 17 2.4.5 Hàm tự tính ngưỡng để chuyển sang ảnh nhị phân graythresh(), và hàm chuyển đổi ảnh nhị phân imbinarize() 18 2.4.6 Hàm imdilate() 18 2.4.7 Hàm imerode() 20 2.4.8 Hàm bwareaopen() 21 2.4.9 Hàm bwlable 21 2.5 GIỚI THIỆU LỊCH SỬ HÌNH THÀNH ARDUINO 21 2.6 GIỚI THIỆU ARDUINO MEGA 2560 23 2.7 KẾT NỐI GIỮA MATLAB VÀ ARDUINO 25 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ 27 3.1 GIỚI THIỆU 27 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 27 3.2.1 Thiết kế sơ đồ khối hệ thống 27 3.2.2 Thiết kế các khối hệ thống 28 3.2.3 Thiết kế mô hình ngã tư 35 3.2.4 Sơ đồ nguyên lý của toàn mạch 35 CHƯƠNG 4. THI CÔNG HỆ THỐNG 38 4.1 THI CÔNG HỆ THỐNG 38 4.1.1 Thi công bo mạch dạng bus 38 4.1.2 Thi công cột đèn tín hiệu giao thông 40 4.1.3 Lắp ráp và kiểm tra 42 4.1.4 Thiết kế giao diện cho người điều khiển 43 4.2 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH 44 4.3 LẬP TRÌNH HỆ THỐNG 45 4.3.1 Lập trình trên phần mềm matlab 45 4.3.1.1 Sơ đồ khối đếm số lượng phương tiện 45 4.3.1.2 Lưu đồ chi tiết xử lí ảnh đầu vào 45 vi
  9. 4.3.2 Lưu đồ tổng quát trên arduino 47 4.4 GIỚI THIỆU VỀ PHẦN MỀM LẬP TRÌNH 49 4.4.1 Giới thiệu về matlab GUI 49 4.4.2 Cách sử dụng matlabGUI 49 4.4.3 Giới thiệu về arduino IDE 52 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC .54 CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 56 5.1 KẾT QUẢ 56 5.2 NHẬN XÉT - ĐÁNH GIÁ 71 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 72 6.1 KẾT LUẬN 72 6.2 HƯỚNG PHÁT TRIỂN 72 TÀI LIỆU THAM KHẢO PHỤ LỤC vi
  10. LIỆT KÊ HÌNH VẼ Hình Trang Hình 2.1. Sơ đồ quá trình xử lý ảnh 6 Hình 2.2 Chuyển ảnh màu thành ảnh xám 9 Hình 2.3 Lược đồ xám 9 Hình 2.4 Ảnh xám và ảnh nhị phân 10 Hình 2.5 Hiển thị ảnh bằng hàm imshow() 16 Hình 2.6 Hiển thị ảnh bằng hàm imagesc() 16 Hình 2.7 Chuyển đổi ảnh màu thành ảnh xám 17 Hình 2.8 Tăng cường độ tương phản của anh bằng hàm imadjust() 18 Hình 2.9 Chuyển đổi ảnh xám sang ảnh nhị phân 18 Hình 2.10 Ảnh đầu vào hàm imdilate() 19 Hình 2.11 Ảnh đầu ra hàm imdilate() 19 Hình 2.12 Ảnh đầu vào hàm imerode() 20 Hình 2.13 Ảnh đầu ra hàm imerode() 20 Hình 2.14 So sánh ảnh gốc và ảnh sau khi xử lý bằng hàm bwareaopen() 21 Hình 2.15 Máy in 3D Materia 101 22 Hình 2.16 Xe điều khiển từ xa 23 Hình 2.17 Board Arduino Mega 2560 23 Hình 2.18 Sơ đồ và chức năng chân Arduino Mega 2560 24 Hình 2.19 Giao tiếp giữa máy tính và arduino thông qua chuẩn UART 25 Hình 2.20 Giao tiếp 2 hệ thống dùng chuẩn UART 26 Hình 2.21 Nguyên lý hoạt động chuẩn UART 26 Hình 3.1 Sơ đồ khối hệ thống 27 Hình 3.2 Sơ đồ chân, sơ đồ nguyên lý Led 7 đoạn 2 digit anode chung 30 Hình 3.3 Led 7 đoạn 2 digit thực tế 31 Hình 3.4 Led đơn màu xanh, đỏ, vàng thực tế 32 Hình 3.5 Sơ đồ kết nối Led đơn với điện trở 32 Hình 3.6 Sơ đồ kết nối Led 7 đoạn với điện trở 33 Hình 3.7 IC ổn áp AMS1117 34 Hình 3.8 Mặt trên của mô hình sau khi thiết kế 35 Hình 3.9 Mặt dưới của mô hình sau khi thiết kế 35 Hình 3.10 Sơ đồ nguyên lý toàn mạch 37 viii
  11. Hình 4.1 Testboard cắm hàn sử dụng trong mô hình 39 Hình 4.2. Mặt trước của chân cắm 39 Hình 4.3 Mặt sau của chân cắm 39 Hình 4.4 Hình ảnh co chữ T và ống trắng sử dụng 40 Hình 4.5 Mặt trước, sau của đế cắm đèn đếm thời gian 40 Hình 4.6 Mặt trước của đế cắm đèn tín hiệu 41 Hình 4.7 Cột tín hiệu khi được ráp hoàn thiện 41 Hình 4.8 Hình ảnh thực tế sau khi thi công 42 Hình 4.9 Giao diện điều khiển chính 43 Hình 4.10 Mô hình sau khi thi công 44 Hình 4.11 Sơ đồ khối tổng quát chính của hệ thống đếm đối tượng trên matlab 45 Hình 4.12 Lưu đồ xử lí ảnh đầu vào 46 Hình 4.13 Lưu đồ chương trình điều khiển ứng dụng trên Arduino 48 Hình 4.14 Cửa sổ lựa chọn giao diện GUI 49 Hình 4.15 Cửa sổ lựa chọn tool cho giao diện GUI 50 Hình 4.16 Giao diện matlabGUI với đuôi .fig 51 Hình 4.17 Giao diện matlabGUI với đuôi .m 52 Hình 4.19 Giao diện lập trình arduino . 53 Hình 4.20 Giao diện arduino IDE menu 54 Hình 4.21 Bước 2: Khởi động matlab 54 Hình 4.22 Bước 3,4 Chạy giao diện và chọn chế độ 55 Hình 5.1. Mô hình khi hoàn thiện và cho chạy thử với 2 cột chính 56 Hình 5.2. Giao diện điều khiển chính 57 Hình 5.3. Giao diện lựa chọn mật độ phương tiện để quan sát 58 Hình 5.4. Kết quả quan sát trên giao diện làn 1 khi lượng xe bình thường 59 Hình 5.5. Kết quả hiển thị trên mô hình ở làn 1 với chế độ bình thường 59 Hình 5.6. Kết quả hiển thị trên mô hình ở làn 2 song song với kết quả trên 60 Hình 5.7. Kết quả quan sát trên giao diện làn 2 sau khi chuyển làn với lượng xe bình thường 60 Hình 5.8. Kết quả quan sát trên mô hình ở làn 2 khi lượng xe bình thường 61 Hình 5.9. Kết quả quan sát trên mô hình ở làn 1 song song với kết quả trên (bình thường) 61 Hình 5.10. Kết quả quan sát trên giao diện làn 1 khi đông xe 63 ix
  12. Hình 5.11. Kết quả quan sát trên mô hình ở làn 1 khi đông xe 63 Hình 5.12. Kết quả quan sát trên mô hình ở làn 2 song song với kết quả trên (đông) 64 Hình 5.13. Kết quả quan sát trên giao diện làn 2 sau khi chuyển làn ở chế độ đông xe 64 Hình 5.14. Kết quả quan sát trên mô hình ở làn 2 sau khi chuyển làn đông xe 65 Hình 5.15. Kết quả quan sát trên mô hình khi làn 1 song song với kết quả trên (đông) 65 Hình 5.16. Kết quả trên giao diện ở chế độ điều khiển bằng tay 67 Hình 5.17. Kết quả hiển thị trên mô hình khi điều khiển bằng tay ở làn 1 . 68 Hình 5.18. Kết quả hiển thị trên mô hình ở làn 2 song song với kết quả trên ( bằng tay) 68 Hình 5.19. Kết quả hiển thị trên mô hình ở làn 2 khi điều khiển bằng tay . 69 Hình 5.20. Kết quả hiển thị trên mô hình ở làn 1 song song với kết quả trên .69 Hình 5.21. Nhập dữ liệu dạng kí tự không phải số 70 Hình 5.22. Hệ thống báo lỗi yêu cầu nhập dữ liệu có dạng số 70 ix
  13. LIỆT KÊ BẢNG Bảng Trang Bảng 3.1 Thông số kỹ thuật LED 7 đoạn 2 digit 31 Bảng 3.2 Mã hiển thị từ 0 – 9 loại anode chung 31 Bảng 3.3 Thông số kỹ thuật LED đơn 32 Bảng 3.4 Số giây đèn xanh ứng với số xe đếm được . 33 Bảng 3.5 Liệt kê điện áp và dòng các linh kiện sử dụng trong mạch .34 Bảng 4.1 Danh sách các linh kiện 38 Bảng 5.1 Kết quả đếm xe làn 1 khi lượng xe bình thường 62 Bảng 5.2 Kết quả đếm xe làn 2 khi lượng xe bình thường 62 Bảng 5.3 Kết quả đếm xe làn 1 khi đông xe 66 Bảng 5.4 Kết quả đếm xe làn 2 khi đông xe 66 xii
  14. TÓM TẮT Sự phát triển của một quốc gia tuỳ thuộc vào tốc độ phát triển trên nhiều lĩnh vực như kinh tế, văn hoá, giáo dục, tài nguyên, vị trí địa lí, và không thể không nói đến vấn đề về giao thông. Đối với nước ta nhu cầu đi lại và vận chuyển những năm gần đây tăng lên không ngừng do sự phát triển nhanh chóng của nền kinh tế và số lượng người dân đông đúc ồ ạt đổ về những thành phố lớn. Và thế lại là bài toán tắc nghẽn ùn tắc giao thông được nêu ra nhưng lại chưa có câu trả lời. Ùn tắc giao thông là nguyên nhân gây thiệt hại cho sự phát triển kinh tế ở quốc gia ta nói riêng và toàn thế giới nói chung, hiệu suất lao động suy giảm và tăng các chi phí không cần thiết, đặc biệt hơn nữa là gây ô nhiễm môi trường trầm trọng, hiện tượng nóng lên toàn cầu cũng được xướng lên. Nguyên nhân chính 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, xe máy, ô tô ngày càng nhiều, không thể không nói đến những cột đèn giao thông được phân chia thời gian đèn tín hiệu chưa hợp lý ở những giao lộ, tuyến đường lớn khiến cho số lượng phương tiện giao thông bị ùn tắc dần rồi dẫn đến tắc nghẽn giao thông. Cũng vì lí do nói trên, nhóm chúng em quyết tâm xây dựng một hệ thống điều tiết giao thông một cách tự động, hệ thống phân tích dữ liệu hình ảnh trên camera để cho ra thời gian phù hợp trên từng tuyến đường. Nhóm chúng em quyết tâm thực hiện đề tài: “ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN ĐÈN GIAO THÔNG TẠI NÚT GIAO THÔNG” nhằm mục tiêu xây dựng một hệ thống đèn tín hiệu được điều khiển thông qua máy tính một cách tự động. Chu kì đèn tín hiệu sẽ thay đổi theo lưu lượng phương tiện trên đường. Hệ thống này được kì vọng phòng ngừa và giải quyết được phần nào vấn nạn kẹt xe đang gây đau đầu cho toàn thế giới. Người thực hiện đề tài. Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang xii
  15. 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, xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là ngành khoa học mới mẽ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh chóng với rất nhiều ứng dụng trên nhiều lĩnh vực khác nhau. Có thể nói rằng ứng dụng của xử lý ảnh có mặt hầu hết rất nhiều công nghệ, góp phần không nhỏ trong thời đại công nghệ 4.0 ngày nay [1]. Ngày nay với sự phát triển vượt trội của nền kinh tế kéo theo đó là việc ùn tắc giao thông là điều không thể tránh khỏi. Có thể nói đây là vấn đề bức xúc của xã hội , điển hình là các đô thị lớn như TP HCM, Hà Nội. Chống ùn tắc giao thông đang và sẽ là một nhiệm vụ cực kỳ cấp bách và quan trọng của ngành giao thông vận tải. Thiệt hại kinh tế, xã hội của việc ùn tắc giao thông là vô cùng to lớn, có lẽ không ai có thể lượng hoá bằng các con số cụ thể (ước tính thiệt hại năm 2007 tại thành phố Hồ Chí Minh vào khoảng 14.000 tỷ đồng). Ùn tắc giao thông đã tác động đến mọi mặt của đời sống xã hội (kinh tế, giao thông, giáo dục ) và tất cả mọi người, từ những người có mặt trực tiếp trong vùng ảnh hưởng, đến các đối tượng gián tiếp khác (không phân biệt không gian và thời gian). Trong thời đại “toàn cầu hoá”, ùn tắc giao thông tại thành phố Hồ Chí Minh có thể sẽ ảnh hưởng đến hoạt động sản xuất kinh doanh của nhiều công ty tại Hoa Kỳ, Nhật, Anh, Úc, Achentina trong nhiều ngày, nhiều tháng và nhiều năm [2]. Để ứng phó với những vấn đề nan giải như trên, trên thế giới và ngay ở đất nước ta đã đưa ra những biện pháp như là quy định thời gian được phép lưu thông của các loại phương tiện, nâng cấp lực lượng và cắt cử trực tiếp người ra phân luồng giao thông, nâng cấp cơ sở vật chất Cho dù thế thì những biện pháp nói trên vẫn mang tính chất nhất thời và chưa thể giải quyết triệt để vấn đề kẹt xe xảy ra phổ biến. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1
  16. CHƯƠNG 1. TỔNG QUAN Ngày nay, trên thế giới đã thực hiện lắp camera trên những tuyến đường trọng yếu, xây dựng những hệ thống phân luồng giao thông tự động hay là bộ điều khiển đèn tín hiệu giao thống tự thay đổi theo những thời điểm trong ngày. Ở những thành phố lớn như TPHCM hay Hà Nội đã lắp đặt trên dưới hang ngàn camera kết nối với hệ thống máy tính hiện đại trong những trung tâm điều khiển giao thông, tuy nhiên các hệ thống này có giá thành rất cao, ví dụ một hệ thống đèn giao thông thông minh thương mại sử dụng camera giám sát cùng máy tính công nghiệp có giá đến hàng tỉ đồng [3-4]. Từ những số liệu nói trên, liệu rằng một giải pháp hợp lý dựa vào việc xử lý ảnh mà có thể ghi lại hình ảnh phương tiện qua lại trên đường. Bên cạnh đó là việc canh chỉnh số đèn xanh vàng đỏ sao cho hợp lý với số lượng xe ở giao lộ, việc này cũng giúp làm giảm đi phần nào vấn nạn ùn tắc giao thông hiện nay . Một hệ thống dùng 2 camera để quan sát trên 2 tuyến đường của 1 giao lộ hoặc ngã tư, tuyến đường nào nhiều xe hơn thì số giây đèn xanh dài hơn và ngược lại. Cũng vì điều đó, nhóm em dưới sự hướng dẫn của Thạc Sĩ Võ Đức Dũng đã thực hiện đồ án với đề tài: “Ứng dụng xử lí ảnh điều khiển đèn giao thông tại nút giao thông”. Với hi vọng có thể góp phần vào công cuộc xây dựng nên một phương án điều tiết giao thông hợp lý, cải thiện tình trạng ùn tắc hiện nay, giúp lưu thông thoải mái hơn được phần nào. 1.2 MỤC TIÊU ĐỀ TÀI Tìm hiểu được về quy tắc phân luồng giao thông, đặt thời gian đèn tín hiệu tại các giao lộ. Viết được chương trình giao tiếp giữa máy tính dưới dạng giao diện matlab và arduino mega 2560. Xây dựng một hệ thống có thể đếm được các đối tượng là các phương tiện lưu thông trên đường của một ngã tư bằng cách đọc hình ảnh đầu vào được chụp từ một đoạn trích xuất video, thông qua quá trình xử lý ảnh sẽ cho ra kết quả gồm số phương tiện, thông tin làn đường và số giây đèn xanh phù hợp. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2
  17. CHƯƠNG 1. TỔNG QUAN 1.3 NỘI DUNG NGHIÊN CỨU Đề tài: “Ứng dụng xử lí ảnh điều khiển đèn giao thông tại nút giao thông” đáp ứng những nội dung như sau: NỘI DUNG 1: Tìm hiểu về phần mềm matlab. NỘI DUNG 2: Tìm hiểu về kit arduino mega 2560. NỘI DUNG 3: Cài đặt matlab, tìm hiểu phương thức kết nối giữa matlab và Arduino NỘI DUNG 4: Tìm hiểu các thuật toán phát hiện phương tiện giao thông, nguyên lý hoạt động của đèn giao thông ở ngoài thực tế. NỘI DUNG 5: 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 thực tế. NỘI DUNG 6: Xây dựng quá trình xử lý ảnh đầu vào. NỘI DUNG 7: 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 mega 2560. NỘI DUNG 8: Đánh giá kết quả thực hiện. 1.4 GIỚI HẠN ĐỀ TÀI Sử dụng vi điều khiển arduino mega 2560 để điều khiển. Dùng giao diện matlab GUI để tương tác với người sử dụng. Đếm số lượng phương tiện dựa trên ngõ vào là video lấy từ smartphone mô phỏng camera giám sát trên đường phố. Hệ thống có thể phát hiện và truy xuất số lượng xe, thông tin làn đường và thời gian cho phép thích hợp. Chi tiết một mô hình ngã tư đầy đủ 4 cột đèn tín hiệu. 1.5 BỐ CỤC. Chương 1: Tổng quan Chương 2: Cơ sở lý thuyết Chương 3: Tính toán và thiết kế Chương 4: Thi công hệ thống Chương 5: Kết quả, nhận xét và đánh giá BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 3
  18. CHƯƠNG 1. TỔNG QUAN Chương 6: Kết luận và hướng phát triển. Chương 1: Tổng quan đề tài. Chương này trình bày vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nội dung nghiên cứu, các giới hạn thông số và bố cục đồ án. Chương 2: Cơ sở lý thuyết. Giới thiệu về phần Matlab, giới thiệu về Arduino, giới thiệu về xử lý ảnh Giới thiệu về kit Arduino, Module led 7 đoạn đôi. Giới thiệu về thuật toán phát hiện và đếm số lượng phương tiện. Chương 3: Thiết kế và tính toán. Phân tích, xây dựng sơ đồ khối, sơ đồ phần cứng, thiết kế chương trình cho hệ thống đếm phương tiện qua hình ảnh được viết trên phần mềm matlab. Thiết kế giao diện mô phỏng quá trình thực hiện việc lấy ảnh và gửi dữ liệu qua arduino. Thiết kế chương trình nhận dữ liệu và điều khiển hệ thống đèn giao thông trên arduino. Chương 4: Thi công hệ thống. Thiết kế hệ thống, lưu đồ, đưa ra giải thuật và chương trình. Chương 5: Kết quả, nhận xét và đánh giá. Nêu các kết quả đạt được khi thực hiện chương trình, phân tích, nhận xét, đánh giá kết quả thực thi được, những hình ảnh của hệ thống, đưa ra những thông số đánh giá về hệ thống. Chương 6: Kết luận và hướng phát triển. Tóm tắt những kết quả đạt được, những hạn chế và nêu lên các hướng phát triển trong tương lai cho hệ thống. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 4
  19. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Chương 2. CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ XỬ LÝ ẢNH. Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng cho nó. Xử lý ảnh được đưa vào giảng dạy ở bậc đại học ở nước ta khoảng chục năm nay. Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều kiến thức cơ sở khác. Đầu tiên phải kể đến “Xử lý tín hiệu số” là một môn học hết sức cơ bản cho xử lý tín hiệu chung, các khái niệm về tích chập, các biến đổi Fourier, biến đổi Laplace, các bộ lọc hữu hạn Thứ hai, các công cụ toán như đại số tuyến tính, xác xuất, thống kê. Một số kiến thứ cần thiết như trí tuệ nhân tao, mạng nơron nhân tạo cũng được đề cập trong quá trình phân tích và nhận dạng ảnh. Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao chất lượng ảnh và phân tích ảnh. Các phương pháp tri thức nhân tạo như mạng nơ ron nhân tạo, các thuật toán xử lý hiện đại và cải tiến, các công cụ nén ảnh ngày càng được áp dụng rộng rãi và thu nhiều kết quả khả quan. Ứng dụng đầu tiên được biết đến là nâng cao chất lượng ảnh báo được truyền qua cáp từ Luân đôn đến New York từ những năm 1920. Vấn đề nâng cao chất lượng ảnh có liên quan tới phân bố mức sáng và độ phân giải của ảnh. Việc nâng cao chất lượng ảnh được phát triển vào khoảng những năm 1955. Điều này có thể giải thích được vì sau thế chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho quá trình xử lý ảnh sô thuận lợi. Năm 1964, máy tính đã có khả năng xử lý và nâng cao chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi đường biên, lưu ảnh. Từ năm 1964 đến nay, các phương tiện xử lý, nâng cao chất lượng, nhận dạng ảnh phát triển không ngừng. Các phương pháp tri thức nhân tạo như mạng nơ ron nhân tạo, các thuật toán xử lý hiện đại và cải tiến, các công cự nén ảnh càng được áp dụng rộng rãi và thu nhiều kết quả khả quan. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 5
  20. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như camera) [5]. Thu Tiền Phân Biểu Nhận nhận xử lý đoạn diễn và diện và ảnh ảnh ảnh mô tả nội suy Cơ sở tri thức Hình 2.1. Sơ đồ quá trình xử lý ảnh. 2.1.1 Quá trình thu nhận ảnh. Ảnh có thể nhận qua camera màu hoặc đen trắng. Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dòng), cũng có loại camera đã số hoá (như loại CCD – Change Coupled Device) là loại photodiot tạo cường độ sáng tại mỗi điểm ảnh. Camera thường dùng là loại quét dòng ảnh tạo ra có dạng 2 chiều. Chất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, vào môi trường (ánh sáng, phong cảnh). 2.1.2 Quá trình tiền xử lý ảnh. Sau bộ thu nhận, ảnh có thể nhiễu độ tương phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ hơn, nét hơn. 2.1.3 Quá trình phân đoạn ảnh. Để phân biệt các đối tượng trong ảnh, chúng ta cần phân biệt các đối tượng cần quan tâm với phần còn lại của ảnh, hay còn gọi là nền ảnh. Những đối tượng này có thể này có thể phát hiện nhờ kỹ thuật phân đoạn ảnh. Mỗi đối tượng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 6
  21. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT trong ảnh được gọi là một vùng hay miền, đường bao quanh đối tượng gọi là đường biên. Mỗi một vùng ảnh phải có một đặc tính đồng nhất. Hình dáng của một đối tượng có thể được miêu tả hoặc bởi các tham số của đường biên hoặc các tham số của vùng mà nó chiếm giữ. Có thể thấy kỹ thuật phát hiện biên và phân vùng ảnh là hai bài toán đối ngẫu của nhau. Dò biên để phân vùng được ảnh và ngược lại phân vùng được ảnh ta có thể phát hiện được biên. Có rất nhiều kỹ thuật phân đoạn ảnh, nhìn chung ta có thể chia thành ba lớp khác nhau: Các kỹ thuật cục bộ dựa vào các thuôc tính cục bộ của điểm ảnh và điểm láng giềng của nó. Các kỹ thuật toàn thể: phân loại ảnh dựa trên thông tin chung của toàn bộ ảnh (ví dụ sử dụng lược đồ xám của ảnh). Các kỹ thuật tách (split), hợp (merge) và growing sử dụng các khái niệm đồng nhất và gần về hình học. Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính xác của ảnh. Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này. 2.1.4 Biểu diễn và mô tả. Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được. 2.1.5 Nhận dạng và nội suy ảnh. Nhận dạng ảnh là quá trình xác định ảnh. Quá trình thường thu được bằng cách so sánh với mẫu chuẩn đã được lọc hoặc lưu từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng. Có nhiều cách phân loại khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản: Nhận dạng theo tham số. Nhận dạng theo cấu trúc. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 7
  22. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.1.6 Cơ sở tri thức. Ảnh là một đối tượng khác phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học bảo đảm tiện lợi cho việc xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vây, ở đây các cơ sở tri thưc được phát huy [5]. 2.2 CÁC PHƯƠNG PHÁP XỬ LÝ CƠ BẢN VỚI MỘT ẢNH ĐẦU VÀO 2.2.1 Chuyển đổi ảnh màu sang ảnh xám [6-7]. Thông thường ảnh được thu về trước khi qua quá trình xử lý là những ảnh màu. Đa số ảnh màu được tao ra bằng việc sử dụng các tổ hợp thích hợp của các cường độ ánh sáng đỏ (RED), xanh lục GREEN) và xanh lam (BLUE). Mỗi điểm ảnh được biểu thị bởi 24bit thông tin (trong tiếng Anh thông thường được biết đến như bits per pixel hay bpp). Nó tương ứng với mỗi 8 bit cho màu đỏ, xanh lá cây và xanh lam, tạo thành một tổ hợp 256 các giá trị có thể, hay 256 mức cường độ cho mỗi màu. Với hệ thống như thế, khoảng 16,7 triệu màu rời rạc có thể tái tạo. Trong ảnh xám, mỗi pixel có giá trị 8 bits thông tin. Ở mức này, cấu trúc ảnh vẫn giữ nguyên, giá trị ma trận ảnh đơn giản rất nhiều. Phù hợp với quá trình xử lý chỉ quan tâm đến cấu trúc ảnh mà không cần đến màu sắc ảnh. Công thức tổng quát được sử dụng phổ biến đổi ảnh màu thành ảnh xám là: P = aCr + bCb + cCg Trên thực tế trong tài liệu phần mềm matlab cung cấp là hàm chuyển đổi ảnh màu sang ảnh xám rbg2gray() có định nghĩa sẵn các trọng số a, b, c cụ thể trong công thức dưới đây: P = 0.299 * Cr + 0.587 * Cg + 0.114 * Cb BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 8
  23. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Trong đó: Cr, Cb, Cg là các giá trị mức màu R, B, G. Tùy theo mức độ thu nhận ảnh màu gốc hoặc tùy theo các thiết bị thu nhận mà hệ số a, b, c có các giá trị khác nhau sao cho (a+b+c) <=1. Trên thực tế thường sử dụng 2 công thức dưới đây để chuyển đổi ảnh màu sang ảnh xám Hình 2.2 Chuyển ảnh màu thành ảnh xám. Do ảnh đôi khi được chụp ở nơi quá sáng hay quá tối sẽ làm cấu trúc ảnh sau khi chuyển đổi thành ảnh xám sẽ không rõ ràng, để có thể làm nổi bật cấu trúc ảnh lên. Ta có thể dựa vào lược đồ xám để điều chỉnh đô tương phản giúp ảnh rõ hơn. Vậy là lược đồ xám là gì? Lược đồ xám: Là một biểu đồ với trục tung là mức xám, trục hoành là các pixel. Lược đồ này biểu diễn tần suất xuất hiện của các mức xám trên ảnh. Hình 2.3 Lược đồ xám. Điều này rất cần thiết cho việc nhận dạng ảnh, nhất là với các ảnh chứa nhiều chi tiết thì lại càng quan trọng. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 9
  24. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.2.2 Nhị phân hóa ảnh [8]. Đây là cách biến đổi các giá trị pixel của ảnh sang giá trị nhị phân (đơn giản nhất) 0 hoặc 1 Khi đó ma trận ảnh sẽ ở mức tối thiểu giá trị giúp việc xử lý đơn giản nhất nhưng đôi khi gây sai lệch cấu trúc ảnh (do các đường viền khác biệt nhỏ dễ bị đồng hóa). Đây chỉ là bước xử lý cho các ảnh có ít chi tiết. Để nhị phân hóa ảnh, ta dựa vào ngưỡng xám trung bình, nếu lớn hơn thì đưa giá trị về 1, nhỏ hơn thì đưa về 0 (thực chất là mức 0 và 255 thể hiện 2 màu đen và trắng). Hình 2.4 Ảnh xám và ảnh nhị phân. 2.2.3 Các phương pháp lọc nhiễu ảnh nhằm cải thiện ảnh [9]. Hình ảnh sau khi thu nhận cần qua một bước tiền xử lý và lọc ảnh, đây là công đoạn gần như bắt buộc bởi ảnh nhận được hầu hết đều có nhiễu, mờ nên cần loại bỏ nhiễu và làm rõ nét hơn để cho ảnh có chất lượng tốt để đem sử dụng. Các kỹ thuật tăng cường ảnh được phân nhóm theo công dụng: làm trơn nhiễu, nổi biên. Để làm trơn nhiễu hay tách nhiễu, người ta sử dụng các bộ lọc tuyến tính (lọc trung bình, thông thấp) hay lọc phi tuyến (trung vị, giả trung vị, lọc đồng hình). Từ bản chất của nhiễu (thường tương ứng với tần số cao) và từ cơ sở lý thuyết lọc là: bộ lọc chỉ cho tín hiệu có tần số nào đó thông qua do đó, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 10
  25. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT để lọc nhiễu người ta thường dùng lọc thông thấp (theo quan điểm tần số không gian) hay lấy tổ hợp tuyến tính để san bằng (lọc trung bình). Để làm nổi cạnh (ứng với tần số cao), người ta dùng các bộ lọc thông cao, lọc Laplace. Trên thực tế tồn tại nhiều loại nhiễu; tuy nhiên người ta thường xem xét 3 loại nhiễu chính: nhiễu cộng, nhiễu nhân và nhiễu xung. 2.2.4 Làm trơn nhiễu bằng lọc tuyến tính. Do có nhiều loại nhiễu can thiệp vào quá trình xử lý ảnh nên cần có nhiều bộ lọc thích hợp. Với nhiễu cộng và nhiễu nhân ta dùng các bộ lọc thông thấp, trung bình và lọc đồng hình (Homomorphie); với nhiễu xung ta dùng lọc trung bị, giả trung vị, lọc ngoài (Outlier) 2.2.5 Lọc trung bình không gian. Lọc trung bình là kĩ thuật lọc tuyến tính, hoạt động như một bộ lọc thông thấp. Ý tưởng chính của thuật toán lọc Trung vị như sau: ta sử dụng một cửa sổ lọc (ma trận 3x3) quét qua lần lượt từng điểm ảnh của ảnh đầu vào input. Tại vị trí mỗi điểm ảnh lấy giá trị của các điểm ảnh tương ứng trong vùng 3x3 của ảnh gốc "lấp" vào ma trận lọc. Giá trị điểm ảnh của ảnh đầu ra là giá trị trung bình của tất cả các điểm ảnh trong cửa sổ lọc. Việc tính toán này khá đơn giản với hai bước gồm tính tổng các thành phần trong cửa sổ lọc và sau đó chia tổng này cho số các phần tử của cửa sổ lọc. Với lọc trung bình, mỗi điểm ảnh được thay thế bằng trung bình trọng số của các điểm lân cận và được mô tả theo công thức sau: 1 v(m,n) = ∑ ∑ y(m−k ,n−l) N ( k ,l ) ϵWW Với: y(m, n): ảnh đầu vào. v(m, n): ảnh đầu ra. a(k, l) : là cửa sổ lọc. 1 với ak,l = và Nw là số điểm ảnh trong cửa sổ lọc W. Nw Nhận xét về bộ lọc trung bình. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 11
  26. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Bộ lọc trung bình lam mịn các sai khác địa phương bên trong ảnh, do đó nó bản chất là một bộ lọc thông thấp. Nó có thể được thực hiện với một mặt nạ cuộn trong đó tất cả các hệ số đều bằng 1/N. Bộ lọc này sẽ có khuynh hướng làm nhèo ảnh trong khi làm giảm bớt hiệu ứng của nhiễu. Có thể thấy rằng kích thước mặt nạ càng lớn, thì hiệu ứng nhòe càng rõ rệt. Kiểu bộ lọc này làm việc tốt nhất với các loại nhiễu Gauss và nhiễu phân bố đều. 2.2.6 Lọc thông thấp. Lọc thông thấp thường được sử dụng để làm trơn nhiễu. Về nguyên lý của bộ lọc thông thấp giống như đã trình bày trên. Trong kỹ thuật này người ta hay dùng một số nhân chập có dạng sau: 0 1 0 1 b 1 1 1 Y = 1 2 1 Y = b b2 b 8 ( + )2 [0 1 0] b 2 [1 b 1] Ta dễ dàng nhận thấy khi b =1, Hb chính là nhân chập Ht1 (lọc trung bình). Để hiểu rõ hơn bản chát khử nhiễu cộng của các bộ lọc này, ta viết lại phương trình thu nhận ảnh dưới dạng: Xqs [m, n] = Xgốc[m,n] + η[m,n] Trong đó: η[m, n] m, n]là nhiễu cộng có phương sai σ2n. Như vậy, theo cách tính của lọc trung bình ta có: 1 Y[ m ,n ]= ∑ ∑ X qs(m-k, n-l)+η[ m ,n ] N w k ,l ∈W 1 Hay: Y[ m ,n ]= ∑ ∑ X qs N w k .l ∈W Như vậy, nhiễu cộng trong ảnh đã giảm đi Nw lần. 2.2.7 Lọc đồng hình (Homomorphie Filter) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 12
  27. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Kỹ thuật lọc này hiệu quả với ảnh có nhiễu nhân. Thực tế, ảnh quan sát được gồm ảnh gốc nhân với một hệ số nhiễu. Gọi X (m, n) là ảnh thu được, X(m, n) là ảnh gốc và η(m, n) là nhiễu, như vậy: X(m, n) = X (m, n) * η(m, n ) Lọc đồng hình thực hiện lấy logarit của ảnh quan sát. Do vậy ta có kết quả sau: Log(X(m, n)) = log( X (m,n) ) + log( η(m, n)) (2.9) Rõ ràng, nhiễu nhân có trong ảnh sẽ bị giảm. Sau quá trình lọc tuyến tính, ta chuyển về ảnh cũ bằng phép biến đổi hàm e mũ. 2.2.8 Làm trơn nhiễu bằng lọc phi tuyến. Các bộ lọc phi tuyến cũng hay được dùng trong kỹ thuật tăng cường ảnh. Trong kỹ thuật này, người ta dùng bộ lọc trung vị, giả trung vị, lọc ngoài. Với lọc trung vị, điểm ảnh đầu vào sẽ được thay thế bởi trung vị các điểm ảnh còn lọc giả trung vị sẽ dùng trung bình cộng của 2 giá trị “trung vị” (trung bình cộng của max và min). 2.2.9 Lọc trung vị Trung vị được viết với công thức: V(m, n) = Trungvi( ) y(m – k, n – l) với {k, l} W (2.10) Kỹ thuật này đòi hỏi giá trị các điểm ảnh trong cửa sổ phải xếp theo thứ tự ∈ tăng hay giảm dần so với giá trị trung vị. Kích thước cửa số thường được chọn sao cho số điểm ảnh trong cửa số là lẻ. Các cửa sổ hay dùng là cửa sổ có kích thước 3x3, hay 5x5 hay 7x7.  Tính chất của lọc trung vị: Lọc trung vị là loại lọc phi tuyến. Điều này dẽ nhận thấy từ: Trungvi(x(m)+y(m)) ≠ Trungvi(x(m)) + Trungvi(y(m)). (2.11) Có lợi cho việc loại bỏ các điểm ảnh hay các ang mà vẫn bảo toàn độ phân giải. Hiệu quả giảm khi số điểm trong cửa sổ lớn hay bằng một nửa số điểm trong cửa sổ. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 13
  28. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Điều này dễ giải thích vì trung vị là (Nw+1)/2 giá trị lớn nhất nếu Nw lẻ. Lọc trung vị cho trường hợp 2 chiều coi như lọc trung vị tách được theo từng chiều. 2.3 GIỚI THIỆU VỀ MATLAB . MATLAB là viết tắt của "matrix laboratory", là ngôn ngữ lập trình cao cấp thế hệ thứ 4 của Mathworks. MATLAB cung cấp môi trường tương tác để thực hiện tính toán và lập trình, MATLAB là ngôn ngữ lập trình do MathWorks phát triển, cho phép người dùng xây dựng ma trận, vẽ đồ thị hàm số hay biểu đồ dữ liệu, thực hiện các phép toán, tạo các giao diện người dùng, liên kết các chương trình máy tính được viết trên nhiều ngôn ngữ khác nhau, bao gồm cả C, C++, Java, và FORTRAN, phân tích dữ liệu, phát triển các thuật toán, tạo ra các mô hình và ứng dụng. MATLAB được tích hợp nhiều lệnh và các hàm toán học, giúp người dùng thực hiện tính toán các con số, vẽ đồ thị và thực hiện các phương pháp số. MATLAB được sử dụng rộng rãi trong mọi khía cạnh tính toán. Dưới đây là một số phép tính toán MATLAB được sử dụng phổ biến nhất: Giải quyết các vấn đề ma trận và mảng. Đồ thị 2-D và 3-D. Đại số tuyến tính. Phương trình đại số. Các hàm phi tuyến tính. Số liệu thống kê. Phân tích dữ liệu. Giải tích và phương trình vi phân. Tính toán số, tích phân, chuyển đổi, hồi quy, các hàm đặc biệt khác. Hệ thống matlab gồm 5 phần chính: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 14
  29. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Ngôn ngữ matlab: Cho phép lập trình từ các ứng dụng nhỏ đến phức tạp. Đó là các ngôn ngữ cao về ma trận và mảng, các dòng lệnh, các hàm, cấu trúc dữ liệu vào. Môi trường làm việc: Bao gồm các phương tiện cho việc quản lý các biến trong không gian làm việc Workspace cũng như xuất nhập dữ liệu. Nó cũng bao gồm các công cụ phát triển, quản lý, gỡ rối và định hình M-file. Xử lý đồ họa: Bao gồm các lệnh cao cấp cho trực quan hóa dữ liệu hai chiều và ba chiều, xử lý ảnh, ảnh động. Cung cấp các giao diện tương tác giữa người sử dụng và máy tính. Thư viện toán học: Các hàm cơ bản như cộng, trừ, nhân, chia, sin, cos, và các hàm phức tạp như tính ma trận nghịch đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library. Giao diện người dùng (Application Program Interface): Cho phép viết chương trình tương tác với các ngôn ngữ khác C, Fortran, Simulink là một chương trình đi kèm với Matlab, là một hệ thống tương tác với việc mô phỏng các hệ thống động phi tuyến, mô phỏng mạch [10-11]. 2.4 CÁC HÀM CƠ BẢN ĐƯỢC SỬ DỤNG [12]. 2.4.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.4.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. Ví dụ: img = imread('ImageProcessing_1/BerkeleyTower.png'); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 15
  30. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT imshow(img); imagesc(img); Kết quả sau khi chạy code. Hình 2.5 Hiển thị ảnh bằng hàm imshow(). Hình 2.6 Hiển thị ảnh bằng hàm imagesc(). 2.4.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'); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 16
  31. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT gray = rgb2gray(img); imshow(gray); Kết quả sau khi chạy code. Hình 2.7 Chuyển đổi ảnh màu thành ảnh xám. 2.4.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. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 17
  32. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.8 Tăng cường độ tương phản của anh bằng hàm imadjust() 2.4.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.9 Chuyển đổi ảnh xám sang ảnh nhị phân. 2.4.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 18
  33. 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.10 Ảnh đầu vào hàm imdilate(). Hình 2.11 Ảnh đầu vào hàm imdilate(). . 2.4.7 Hàm imerode() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 19
  34. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 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') Cũng giống như hàm imdilate(). B đóng vai trò là nhân tạo hình. Hình 2.12 Ảnh đầu vào hàm imerode() Hình 2.13 Ảnh đầu vào hàm imerode(). BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 20
  35. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.4.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'); A1 = bwareaopen(A, 50); imshowpair(A,A1,'montage') Hình 2.14 So sánh ảnh gốc và ảnh sau khi xử lý bằng hàm bwareaopen() 2.4.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. 2.5 GIỚI THIỆU LỊCH SỬ HÌNH THÀNH ARDUINO [13-14]. Arduino là một bo mạch vi xử lý được dung để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình và điều hiển làm nên hiện tượng Arduino chính là mức giá thấy với tính chấ nguồn mở từ phần cứng tới phần mềm chỉ với BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 21
  36. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT khoảng $30, người dung đã có thể sở hữu board Arduino có 20 ngõ I/O có thể tương tác và điều khiển chừng ấy thiết bị. Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ thứ 9 là King Arduino, Arduino chính thức được đưa ra giới thiệu vào năm 2005 như là một công cụ khiêm tốn dành cho các sinh viên của giáo sư Massimo Banzi, là một trong những người phát triển Arduino, tại trường Interaction Design Instistute Ivrea (IDII). Mặt dù hầu như không được tiếp thị gì cả, tin tức về arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹp của những người dùng đầu tiên. Hiện nay Arduino nổi tiếng tới nỗi có người tìm đến thị trấn Ivrea chỉ để tham quan nói đã sản sinh ra Arduino. Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là những người tự chế ra sản phẩm của mình) trên toàn thế giới trong vài năm gần đây. Ngay cả những sinh viên và nhà nghiên cứu tại các trường đại học danh tiếng như MIT, Stanford, Carnegie Mellon phải sử dụng; hoặc ngay cả Google cũng muốn hỗ trợ khi cho ra đời bộ kit Arduino Mega ADK dùng để phát triển các ứng dụng Android tương tác với cảm biến và các thiết bị khác. Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản đến phức tạp. Trong số đó có một vài ứng dụng thực sự chứng tỏ khả năng vượt trội của Arduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức tạp. Sau đây là một số ứng dụng nổi bật của Arduino[4].  Máy in 3D Hình 2.15 Máy in 3D Materia 101. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 22
  37. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT  Xe điều khiển từ xa. Hình 2.16 Xe điều khiển từ xa. 2.6 GIỚI THIỆU ARDUINO MEGA 2560. Board Arduino Mega 2560 được tích hợp sẵn Vi điều khiển Atmega2560 cho số ngoại vi, các chuẩn giao tiếp và số chân nhiều nhất, bộ nhớ rất lớn (256KB), dễ dàng kết nối với Module Arduino Motor Shield, nếu có những ứng dụng cần mở rộng thêm nhiều chân, nhiều ngoại vi thì đây là một sự lựa chọn đáng giá, board hoàn toàn có cấu trúc chân tương thích với các board như Uno và chạy điện áp 5VDC. Tất cả các Shield của Arduino Uno đều chạy được với Arduino Mega và Adruino Mega không dùng được thư viện SoftwareSerial vì đã có sẵn 4 bộ UART. Hình 2.17 Board Arduino Mega 2560. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 23
  38. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.18 Sơ đồ và chức năng chân Arduino Mega 2560. Vi điều khiển Atmega2560. IC nạp và giao tiếp UART: ATmega16U2. Điện áp hoạt động: 5V – DC ( đối với cáp USB ) Tần số hoạt động: 16 MHz. Dòng hoạt động: 30 mA. Điện áp giới hạn: 7-9V – DC (đối với giắc tròn, đây là điện áp nên sử dụng khi cấp nguồn ngoài). Số chân Analog: 16. Số chân Digital: 54 (15 chân PWM). Giao tiếp UART: 4 bộ UART. Dòng tối đa trên mỗi chân I/O: 30 mA. Các chân năng lượng: GND (Ground): cực âm của nguồn điện cấp cho Arduino Mega. 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA. 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA. Vin (Voltage Input): để cấp nguồn ngoài cho Arduino Mega. Bộ nhớ của Arduino mega 2560: 256KB bộ nhớ Flash: những đoạn lệnh lập trình sẽ được lưu trữ trong bộ nhớ Flash của vi điều khiển. Sẽ có khoảng vài KB trong số này sẽ được dùng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 24
  39. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT cho bootloader nhưng thường thì ít khi nào phải sử dụng quá 20kb bộ nhớ này. 2.7 KẾT NỐI GIỮA MATLAB VÀ ARDUINO [15]. Mô hình này rất đơn giản, tương tự như cách sử dụng Serial để giao tiếp với Arduino thông qua Serial Monitor: máy tính sẽ mở cổng COMx ( hoặc /dev/tty , ) sau đó các nội dung trong output buffer của Arduino sẽ được tuồn qua máy tính và lưu ở input buffer. Máy tính đọc những dòng đó rồi quy ra lệnh (Serial Command); đồng thời trên Arduino cũng song song tồn tại phương thức ấy. Bạn xem hình dưới để rõ ràng hơn. Hình 2.19 Giao tiếp giữa máy tính và arduino thông qua chuẩn UART. Giao tiếp UART trong Arduino Mega: Khái niệm giao tiếp UART: UART là chuẩn truyền thông nối tiếp bất đồng bộ (Universal Asynchronous Receiver – Transmitter) dùng để truyền nhận dữ liệu giữa 2 hệ thống và không có phân biết chủ- tớ, giữa các hệ thống là ngang cấp nhau. Chuẩn UART gồm một đường phát dữ liệu và một đường nhận dữ liệu. Để truyền dữ liệu giữa 2 hệ thống với nhau thì cả hai hệ thống phải tự tạo xung clock (CK) có cùng tần số. (Tốc độ baud) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 25
  40. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.20 Giao tiếp 2 hệ thống dùng chuẩn UART. Nguyên lý hoạt động: Khi ở trạng thái chờ, mức điện áp của thiết bị truyền ở mức 1 (high). Khi bắt đầu truyền dữ liệu, START bit sẽ chuyển từ 1 xuống 0 để báo hiệu cho thiết bị nhận là quá trình truyền dữ liệu sắp xảy ra. Sau START bit là đến các bit dữ liệu D0-D7. Sau khi truyền hết dữ liệu thì đến Bit Parity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền. Cuối cùng là STOP bit là 1 báo cho thiết bị nhận rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền (Frame) nhằm đảm báo tính đúng đắn của dữ liệu [16]. Hình 2.21 Nguyên lý hoạt động chuẩn UART. Giao tiếp UART trong Arduino Mega: Trên Arduino Mega có hổ trợ một chuẩn giao tiếp UART đó là 4 chân D0 (RX) dùng để nhận dữ liệu chuẩn TTL và D1(TX) dùng để truyền dữ liệu chuẩn TT. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 26
  41. 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 Thiết kế được mô hình và giao diện chương trình trên matlab đếm đối tượng từ ảnh lấy từ video . Đế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 để đưa ra được kết quả là số đối tượng cụ thể có trong ảnh, thông tin của làn và số giây đèn phù hợp. Cuối cùng truyền tín hiệu điều khiển xuống vi điều khiển để đ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. Hình 3.1. Sơ đồ khối hệ thống. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 27
  42. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Chức năng của từng khối: Khối ảnh đầu vào: Ảnh được lấy từ camera được lắp đặt trên cao của đèn tín hiệu ở ngã tư, ảnh được chụp sau khi nhấn nút bắt đầu và sau khi chuyển làn của mỗi chu kì đèn xanh. Ảnh trong hệ thống chúng em sử dụng có đuôi PNG. Khối xử lý ảnh: Máy tính nhận nhiệm vụ chụp hình ảnh từ camera quan sát. Sau đó chuyển cho hệ thống xử lý là phần mềm matlab, hệ thống sẽ xuất ra các thông số về làn đường, số lượng xe, số giây đèn cho phép chạy. Khối điều khiển: Sau khi nhận được giá trị từ bộ xử lý ảnh thông qua chuẩn kết nối UART, khối điều khiển sẽ xử lý tính toán thời gian các đèn xanh, đỏ, vàng trên mỗi tuyến đường. Khối nguồn: Cung cấp nguồn cho khối điều khiển để điều khiển các chân I/O với dòng ra đủ cung cấp cho khối hiển thị. 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: nhận thấy được tín hiệu đèn và tuân thủ, đồng thời sẽ là dữ liệu tiếp theo cho khối ảnh đầu vào. 3.2.2 Thiết kế các khối hệ thống. Khối ảnh đầu vào. Khối ảnh đầu vào được thiết kế trên mô phỏng của camera được lắp ở trên cao tại nút giao của mỗi ngã tư. Nhiệm vụ chính là để cho người sử dụng phần mềm quan sát, chụp lại hình ảnh số phương tiện đang lưu thống trên đường và chuyển hình ảnh này cho bộ xử lý ảnh. Trên thực tế nhóm em thực hiện thì khối ảnh đầu vào là một đoạn video được quay lại từ smart phone và nhúng vào matlab vì để thuận tiện cho việc mô phỏng. Khối xử lý ảnh. Khối xử lí ảnh chính là máy tính, việc thiết kế dựa trên các lệnh, hàm được thư viện matlab hỗ trợ. Để đếm được số phương tiện từ hình ảnh được đưa vào cần có một ảnh gọi là ảnh nền và ảnh đầy đủ các phương tiện cần đếm. Đầu tiên dùng hàm rbg2gray()để chuyển đổi hình ảnh màu sang ảnh xám. Tiếp theo là so BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 28
  43. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ sánh giữa ảnh gốc và ảnh màu xem có bao nhiêu điểm khác biệt bằng cách chuyển ảnh sang 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 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. Khối hiển thị. Giới thiệu chung về led 7 đoạn : Led 7 đoạn có cấu tạo bao gồm 7 Led đơn có dạng thanh xếp theo hình dạng số 8 và có thêm một Led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của Led 7 đoạn 8 Led đơn trên Led 7 đoạn có Anode(cực +) hoặc Cathode(cực -) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8 cực còn lại trên mỗi Led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối với mạch điện. Nếu Led 7 đoạn có Anode(cực +) chung, đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các Led đơn, Led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu Led 7 đoạn có Cathode(cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắt của các Led đơn, Led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1. Chúng em sử dụng loại Led 7 đoạn đôi Anode chung, màu đỏ, 0.56 inch. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29
  44. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Hình 3.2 Sơ đồ chân, sơ đồ nguyên lý Led 7 đoạn 2 digit anode chung. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30
  45. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Thông số kỹ thuật : Số chân 10 chân Dòng tối đa chạy qua mỗi LED 0.25mA Dòng chạy bình thường 0.1mA Điện áp rơi trên LED 2.2V Bảng 3.1 Thông số kỹ thuật LED 7 đoạn 2 digit Vì Led 7 đoạn chứa bên trong nó các Led đơn, do đó khi kết nối cần đảm bảo dòng qua mỗi Led đơn trong khoảng 10mA-20mA để bảo vệ Led. Nếu kết nối với nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu điều khiển. Hình 3.3 Led 7 đoạn 2 digit thực tế. Bảng 3.2: Mã hiển thị từ 0 – 9 loại anode chung. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31
  46. 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. Để 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.4 Led đơn màu xanh, đỏ, vàng thực tế. Thông số kỹ thuật của LED đơn: Điện áp hoạt động 1.5 – 2.5V Dòng hoạt động 10mA Điện áp cung cấp 5V Dòng tối đa qua led 25mA Bảng 3.3 Thông số kỹ thuật LED đơn Để 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. Hình 3.5 Sơ đồ kết nối Led đơn với điện trở. Như vậy ta phải mắc thêm điện trở có giá trị là: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32
  47. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ V CC−V LED 5−1,7 RLED= = −3 ≈ 330Ω I LED 10 ×10 Hình 3.6 Sơ đồ kết nối Led 7 đoạnvới điện trở. V CC−V LED 5−2.2 R= = −3=280Ω Chọn R= 330. I LED 10×10 Bảng quy định thời gian đèn mỗi chu kì tương ứng với số lượng đếm được (áp dụng phù hợp với mô hình): Số lượng xe Thời gian đèn Thời gian Thời gian Chế độ đèn đỏ thường xanh đèn vàng dùng Ít hơn 2 xe 25s 3s 28s Bình thường 2 25 60s 3s 63s Đông Bảng 3.4 Số giây đèn xanh ứng với số xe đếm được. Thiết kế khối nguồn. Tên linh kiện Số lượng Điện áp định mức Dòng điện định mức BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33
  48. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Arduino mega 1 5V-DC 30 mA 2560 Led đơn 12 5V-DC 10 mA Led 7 đoạn 2 digit 4 5V-DC 10 mA Bảng 3.5 Liệt kê điện áp và dòng các linh kiện sử dụng trong mạch Từ bảng trên, ta có khối nguồn như sau: Tổng dòng tiêu thụ Itổng= 30+(12*10)+(10*4)=190 (mA) Do yêu cầu của đề tài không cần nguồn di chuyển nên chúng em s ẽ lựa chọn nguồn ngoài để cấp cho vi điều khiển là adapter 9V 1A. Lý do em chọn adapter 9V để cấp cho arduino là vì khi đi cấp nguồn điện sẽ đi qua IC ổn áp AMS1117 giúp hạ điện áp từ 9V thành 5V cấp cho vi điều khiển. Hình 3.7 IC ổn áp AMS1117. Nguồn cung cấp chính cho mạch dùng adapter 9V -1A 3.2.3 Thiết kế mô hình ngã tư. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34
  49. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Mô hình thực nghiệm ngã tư có đèn giao thông có kích thước 45cm x 45cm, mô hình thiết kế nhằm mô phỏng một ngã tư gồm 2 tuyến đường hai chiều. Mỗi trụ đèn gồm có: Ống nhựa 15 cm. Co chữ T. 1 đèn Led 7 đoạn đôi. 3 đèn Led xanh, đỏ, vàng. Mô hình sử dụng giấy dán tượng trưng cho làn đường, 4 góc trắng ở mỗi vùng xanh là nơi dựng cột đèn giao thông. Hình 3.8 Mặt trên của mô hình sau khi thiết kế. ADAPTER 9V CÁP USB ARDUINO MÁY TÍNH MEGA 2560 ] Hình 3.9 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. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35
  50. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Có 2 camera được lắp đặt trên cao ở 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.Nnhó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ố 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 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36
  51. CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ Hình 3.10 Sơ đồ nguyên lý toàn mạch. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37
  52. CHƯƠNG 4. THI CÔNG HỆ THỐNG Chương 4. THI CÔNG 4.1 THI CÔNG HỆ THỐNG. 4.1.1 Thi công bo mạch dạng bus. Bảng liệt kê linh kiện sử dụng: Tên linh kiện Thông số Số lượng Arduino 5 VDC 1 Mega2560 30mA 2.2V Led 7 đoạn đôi 4 10mA Điện trở 330Ω 12 1,8V Led xanh lá 4 10mA 1,8V Led vàng 4 10mA 1,8V Led đỏ 4 10mA Bảng 4.1 Danh sách linh kiện. Việc thi công cân cắm dạng bus, chúng em quyết định sử dụng loại testboard cắm hàn và hàn cùng với các chân đực, đính sẵn các điện trở 330 ôm trên mạch để tiện phần thi công và để xúc đẩy thời gian hoàn thành mô hình. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38
  53. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.1 Testboard cắm hàn sử dụng trong mô hình. Hình 4.2 Mặt trước của chân cắm. Hình 4.3 Mặt sau của chân cắm. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39
  54. CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.1.2 Thi công cột tính hiệu giao thông. Để làm được một cột tín hiệu, nhóm đã cắt 4 ống nước có chiều dài 15 cm đường kính 2 cm, tiếp theo sử dụng cho chữ T trắng để làm phần đầu của cột, nơi đó dẫn ra đèn đếm thời gian và đèn tín hiệu. Hình 4.4 Hình ảnh co chữ T và ống trắng sử dụng. Tiếp theo là thiết kế đế led 7 đoạn và đế cắm dây để tạo thành khung đèn tín hiệu. Nhóm đã cưa một đoạn testboard hàn kích thước 7x4 cm, hàn chân đực vào phía trước và phía sau testboard với các chân đã được tính toán: 2 đế chân 7 đoạn gồm 5 lỗ và 2 đế chân cắm dây 5 lỗ. Hình 4.5 Mặt trước, sau của đế cắm đèn đếm thời gian. Tiếp theo thực hiện đế hiển thị đèn tín hiệu. Nhóm cưa một đoạn testboard hàn kích thước 4x4 cm, tiến hành hàn các led theo thứ tự đỏ, vàng, xanh và hàn cùng các chân đực. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40
  55. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.6 Mặt trước của đế cắm đèn tín hiệu. Tiến hành cắm các dây vào chân đã hàn, luồn dây qua co chữ T đã được gắn chắc chắn ở trên ống trắng, mỗi dây nối thành 2 dây dài 50 cm, cắm led 7 đoạn vào chân cắm, ta được hình như bên dưới: Hình 4.7 Cột tín hiệu khi được ráp hoàn thiện BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41
  56. CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.1.3 Lắp ráp và kiểm tra. Hàn các linh kiện trong khối và lấy dây bus kết nối giữa các khối lại với nhau ta được như hình. Hình 4.8 Hình ảnh thực tế sau khi thi công. 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. Sau đó nạp thử chương trình để kiểm tra liệu chương trình có thể chạy. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42
  57. CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.1.4 Thiết kế giao diện cho người điều khiển. Để thiết kế giao diện cho người điều khiển, chúng em sử dụng matlab GUI, với 2 thành phần cơ bản để tạo thành một chương trình hoàn chỉnh là matlab GUI và matlab GUIcode : Hình 4.9 Giao diện điều khiển chính Chúng em sẽ thực hiện một mô hình có 4 làn đường, 4 trụ bằng ống nhựa tượng trưng cho 4 cột đèn giao thông, trên cùng của 4 ống nhựa là mô hình module 7 đoạn và led đơn được hàn chắc chắn. Led 7 đoạn quét hiển thị số giây đèn giao thông 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. MANUAL: Đây là chế độ dung trong trường hợp có sự cố xảy ra hoặc trường hợp người dung muốn cố định một khoảng thời gian đèn xanh ở mỗi làn, số giây đèn vàng sẽ là 3 giây, từ đó cho ra số giây đèn đỏ là số giây đèn vàng và đèn xanh. Người nhập vào bằng máy tính ở dạng số nguyên. AUTO: chúng em trích suất một đoạn video ghi hình từ camera để cho matlab xử lý, hình sẽ được chụp tự động ở từng làn có ghi chú, sau đó sẽ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43
  58. CHƯƠNG 4. THI CÔNG HỆ THỐNG được xử lý hình ảnh ngay lúc chạy, đếm số lượng phương tiện lưu thông để cho ra số giây đèn phù hợp vào từng mốc thời điểm trong ngày. 4.2 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH. Dùng một hộp bằng gỗ có kích thước 45x45x15 để làm mô hình tránh tình trạng bị va đập dẫn đến hư hỏng. mặt trên chúng em dùng phần mêm Paint để vẽ làn đường. Mặt bên khoan 1 lỗ nhỏ có đường kính 3 cm để đưa cổng USB ra ngài. Sau đó chúng em dán lên mặt trên hình ngã tư, tránh vị trí trụ đèn và sau đó trang trí. Hình 4.10 Mô hình sau khi thi công. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44
  59. CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.3 LẬP TRÌNH HỆ THỐNG 4.3.1 Lập trình trên phần mềm Matlab 4.3.1.1 Sơ đồ khối đếm số lượng phương tiện. Xác định các đối Đếm số Ảnh Chụp ảnh và Xử lý hình tượng là lượng đối đầu vào xác định ảnh nền ảnh phương tượng tiện có trong ảnh Hình 4.11 Sơ đồ khối tổng quát chính của hệ thống đếm đối tượng trên matlab. Đầu tiên hệ thống sẽ lấy video đầu vào được quay từ smartphone, tiến hành chụp ảnh từ video. Hình ảnh sau khi lấy được sẽ được hệ thống nâng cao độ tương phản, khử nhiễu, khử bóng, khử độ lệch và 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 đó là hệ thống đếm 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.3.1.2 Lưu đồ chi tiết xử lí ảnh đầu vào. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45
  60. CHƯƠNG 4. THI CÔNG HỆ THỐNG BEGIN 1 CHỤP ẢNH CHUYỂN SANG NHỊ PHÂN X= ẢNH NỀN TĂNG CHÍNH XÁC Y= ẢNH CÓ PHƯƠNG TIỆN LỌC NHIỄU CHUYỂN ẢNH XÁM TẠO LỖ TRỐNG TÌM KÍCH THƯỚC ẢNH (DEMENSION) XOÁ CÁC ĐIỂM NHỎ DÁN NHÃN ĐỐI TƯỢNG TẠO VỆT MÀU KHÁC CHO GIÁ TRỊ NGƯỠNG = 55 NỀN fg=abs(Y - X) ĐẾM CÁC ĐỐI TƯỢNG CÓ TRONG VÙNG XỬ LÍ ĐẶT a,b = 1 GỬI TÍN HIỆU VĐK ENDliệu sang arduino Sai a < length Đúng b < Sai wi dth Đúng 1 Hình 4.12 Lưu đồ xử lí ảnh đầu vào. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46
  61. CHƯƠNG 4. THI CÔNG HỆ THỐNG 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. 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. 4.3.2 Lưu đồ tổng quát trên Arduino. Arduino hoạt động như sau: Khi có kết quả từ matlab, vi điều khiển sẽ quy định thời gian đèn xanh của làn 1 và thời gian đèn đỏ của làn 2 dựa trên kết quả được gửi. Hiển thị ra led 7 đoạn đôi và led đơn, led 7 đoạn đôi sẽ chạy thời gian ngược để hoàn thành chu kì. Khi hoàn thành chu kì thì vi điều khiển lại gửi trả kết quả sang máy tính để tiếp tục chờ nhận dữ liệu mới. BẮT ĐẦU i = 0 Whil e Sai Kết thúc (tru e) Đúng ĐỌC DỮ LIỆU BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆPĐúng – Y SINH 47 LÀN = 1 i = i + 1 i/ 2 Sai = 0
  62. i/ 2 Sai = Đúng0 CHƯƠNG 4. THI CÔNG HỆ THỐNG LÀN =1 LÀ Hình 4.13Đúng Lưu đồ chương trình điềuN khiển ứng dụng trênSai Arduino. = 1 ĐIỀU KHIỂN LÀN 1 ĐIỀU KHIỂN LÀN 2 GỬI DỮ LIỆU 4.4 GIỚI THIỆU VỀ PHẦN MỀM LẬP TRÌNH. 4.4.1 Giới thiệu về matlab GUI. GUI được viết tắt của từ “Graphical User Interface” . Là ta sẽ tiến hành sử dụng chuột để thao tác các thanh công cụ đã được con người lập trình sẵn và tích hợp vào phần mềm Matlab. Đây cho phép tương tác giao diện chương trình từ đó nhìn được một cách khách quan nhất và bắt đầu viết code để tương tác giao diện. 4.4.2 Cách sử dụng matlabGUI. Tại cửa sổ Command Window bạn hãy tiến hành gõ lệnh: guide. Lập tức cửa sổ GUIDE Quick Start xuất hiện nên như hình phía dưới. Hình 4.14 Cửa sổ lựa chọn giao diện GUI. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48
  63. CHƯƠNG 4. THI CÔNG HỆ THỐNG Khi nhấn vào Blank GUI (Default) xuất hiện tiếp cửa sổ chọn đối tượng cho matlabGUI. Hình 4.15 Cửa sổ lựa chọn tool cho giao diện GUI. Push Button: Dùng để khi nhấn chuột vào thì nút này sẽ xử lý một công việc nào đó mà mong muốn. Static Text: Dùng để hiện thì thông tin cho một đối tượng nào đó hoặc có thể xuất dữ liệu từ trương trình ra đây. Để thay đổi tên của các tool này cũng như màu sắc, thuộc tính thì chỉ cần nhấp đúp chuột vào Tool đó thì lập tức một cửa sổ mới xuất hiện được gọi là Inspector. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49
  64. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.16 Kéo các tool ra được giao diện GUI. Hình 4.17 Giao diện matlabGUI với đuôi .fig BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50
  65. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.18 Giao diện matlab code đuôi .m Giao diện matlab code là nơi thực thi các lệnh xử lí cho các đối tượng mình đã gọi ở matlabGUI có đuôi .fig. 4.4.3 Giới thiệu về arduino IDE. Môi trường phát triển tích hợp Arduino IDE là một ứng dụng đa nền tảng được viết bằng Java, và được dẫn xuất từ IDE cho ngôn ngữ lập trình xử lý và các dự án lắp ráp. Do có tính chất mã nguồn mở nên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởi người dùng có kinh nghiệm. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51
  66. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.19 Giao diện lập trình arduino. setup(): hàm chạy một lần duy nhất vào lúc bắt đầu của một chương trình dùng để khởi tạo các thiết lập. loop(): hàm được gọi lặp lại liên tục cho đến khi bo mạch được tắt. Giao diện của phần mềm Arduino IDE có nhiều phần, tuy nhiên chú ý đến những phần quan trọng như được nêu ra trong hình trên. Chức năng của từng phần như sau: Nút kiểm tra chương trình (1): Dùng để kiểm tra xem chương trình được viết có lỗi không. Nếu chương trình bị lỗi thì phần mềm Arduino IDE sẽ hiển thị thông tin lỗi ở vùng thông báo thông tin. Nút nạp chương trình xuống bo Arduino: Dùng để nạp chương trình được viết xuống mạch Arduino. Trong quá trình nạp, chương trình sẽ được kiểm tra lỗi trước sau đó mới thực hiện nạp xuống mạch Arduino. Hiển thị màn hình giao tiếp với máy tính: khi nhấp vào biểu tượng cái kính lúp thì phần giao tiếp với máy tính sẽ được mở ra. Phần này sẽ hiển thị BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52
  67. CHƯƠNG 4. THI CÔNG HỆ THỐNG các thông số mà người dùng muốn đưa lên màn hình. Muốn đưa lên màn hình phải có lệnh Serial.print() mới có thể đưa thông số cần hiển thị lên màn hình Vùng lập trình: Vùng này để người lập trình thực hiện việc lập trình cho chương trình của mình. Vùng thông báo thông tin: Có chức năng thông báo các thông tin lỗi của chương trình hoặc các vấn đề liên quan đến chương trình được lập. Hình 4.20 Giao diện arduino IDE menu. 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC. Bước 1: Đưa cáp USB của Arduino cắm vào máy tính. Bước 2: Khởi động matlab. Bước 3: Tiến hành chạy chương trình giao diện ban đầu. Bước 4: Chọn chế độ chạy tự động hoặc bằng tay. Bước 5: Quan sát kết quả trên màn hình. Hình 4.21 Bước 2: Khởi động matlab BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53
  68. CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.22 Bước 3,4 Chạy giao diện và chọn chế độ. Một số lưu ý khi sử dụng: Khi khởi động nhưng chương trình không chạy, phải kiểm tra cáp USB đã cắm vào kĩ chưa, xem chắc có Port kết nối của Arduino đã xuất hiện. Cắm nguồn adapter 9V để mô hình hoạt động ổn định. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54
  69. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Chương 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ. 5.1 KẾT QUẢ. Hình 5.1 Mô hình hoàn thiện và cho chạy thử. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56
  70. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.2 Giao diện điều khiển chính. Sẽ có 2 chế độ điều khiển là chế độ bằng tay và chế độ tự động tương ứng với “MANUAL” và “AUTO”  Chế độ AUTO: Sau khi lựa chọn chế độ “AUTO”, chương trình sẽ dẫn đến một giao diện để người dùng quan sát hệ thống hoạt động ở 2 chế độ khi mật độ phương tiện tham gia giao thông bình thường và đông xe. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57
  71. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.3 Giao diện lựa chọn mật độ phương tiện để quan sát. Khi nhấn vào nút nhấn bình thường. Chương trình sẽ chạy một giao diện mới có tên là chuongtrinh1_bt. Hoặc khi nhấn vào nút “Đông” chương trình sẽ chạy một giao diện tên là chuongtrinh2_dong. Để người sừ dụng có thế quan sát quá trình đếm theo lưu lượng bình thường và đông xe. Bắt đầu với chế độ “Bình thường” với lượng xe không nhiều, sau đó ta nhấn nút bắt đầu ở góc phải giao diện “Tự động điều khiển thông qua camera” để chạy chương trình điều khiển, hệ thống ngay lập tức chụp lại ảnh từ video của làn 1. Hình ảnh thu về xử được hệ thống xử lý, kết quả đếm phương tiện lưu thông làn 1 được xuất ra ở ô “SỐ LƯỢNG XE”. Số giây đèn xanh đã được tính toán cho làn đường đó sẽ được xuất ra ô “SỐ GIÂY ĐÈN XANH” BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58
  72. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.4 Kết quả quan sát trên giao diện làn 1 khi lượng xe bình thường. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59
  73. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.5 Kết quả hiển thị trên mô hình ở làn 1 với chế độ bình thường. Hình 5.6 Kết quả hiển thị trên mô hình ở làn 2 song song với kết quả trên. Sau khi chuyển làn tức là đèn xanh ở làn 1 về 0, chuyển sang đèn vàng và ngay khi hết 3 giây đèn vàng thì hệ thống tự động chụp hình ở video làn 2 rồi tiến hành xử lí theo phương thức trên, làn 2 chuyển sang đèn xanh, ta được: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60
  74. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.7 Kết quả quan sát trên giao diện làn 2 sau khi chuyển làn với lượng xe bình thường. Hình 5.8 Kết quả quan sát trên mô hình ở làn 2 khi lượng xe bình thường. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61
  75. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.9 Kết quả quan sát trên mô hình ở làn 1 song song với kết quả trên (bình thường). Tiến hành chạy chương trình lấy kết quả 8 lần trên làn 1, làn 2 khi ở chế độ bình thường. Lần Số xe đếm Số xe đếm Tỷ lệ đếm Số xe hiển thị chụp được sai đúng 1 6 6 0 2 5 5 0 3 4 4 0 4 5 4 1 5 3 2 1 92.67% 6 4 4 0 7 2 2 0 8 0 0 0 Bảng 5.1 Kết quả đếm xe làn 1 khi ít xe Lần Số xe có trên Số xe đếm Số xe đếm Tỷ lệ đếm chụp hình được sai đúng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62
  76. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 1 2 2 0 2 1 1 0 3 2 2 0 4 4 3 1 5 3 3 0 93.11% 6 2 2 0 7 3 2 0 8 0 0 0 Bảng 5.2 Kết quả đếm xe làn 2 khi ít xe. Nguyên do có sai số: Do xe chạy san sát gần nhau. Thời tiết trưa nắng làm màu nền không khớp với màu ảnh. Kết quả đếm xe trên làn đông phương tiện tham gia Hình 5.10 Kết quả quan sát trên giao diện làn 1 khi đông xe. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63
  77. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.11 Kết quả quan sát trên mô hình ở làn 1 khi đông xe Hình 5.12. Kết quả quan sát trên mô hình ở làn 2 song song với kết quả trên (đông). Và sau khi đèn xanh ở làn 1 về 0, hết 3 giây đèn vàng và tiến hành chuyển làn, ta được kết quả : BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64
  78. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.13 Kết quả quan sát trên giao diện làn 2 sau khi chuyển làn ở chế độ đông xe. Hình 5.14 Kết quả quan sát trên mô hình ở làn 2 sau khi chuyển làn đông xe. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65
  79. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66
  80. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.15 Kết quả quan sát trên mô hình khi làn 1 song song với kết quả trên (đông). Tiến hành chạy chương trình lấy kết quả 5 lần trên làn 1, làn 2 khi đông xe Lần Số xe có trên Số xe đếm Số xe đếm Tỷ lệ đếm chụp hình được sai đúng 1 13 11 2 2 15 16 2 3 22 21 1 92.53% 4 20 19 1 5 19 20 1 Bảng 5.3 Kết quả đếm xe làn 1 khi đông xe. Lần Số xe có trên Số xe đếm Số xe đếm Tỷ lệ đếm chụp hình được sai đúng 1 6 6 0 2 6 5 1 3 3 3 0 95% 4 6 6 0 5 2 2 0 Bảng 5.4 Kết quả đếm xe làn 2 khi đông xe. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67
  81. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ  Chế độ MANUAL. Hình 5.16 Kết quả trên giao diện ở chế độ điều khiển bằng tay. Thời gian đèn xanh ở làn 1 được nhập trực tiếp trong edit text của giao diện chế độ điều khiển bằng tay bằng 50. Từ số giây đèn xanh làn 1 suy ngược lại số giây đèn đỏ của làn 2 là 53 giây Thời gian đèn xanh ở làn 2 được nhập trực tiếp trong edit text của giao diện chế độ điều khiển bằng tay bằng 55. Từ số giây đèn xanh làn 2 suy ngược lại số giây đèn đỏ của làn 1 là 58 giây. Cho phép người điều khiển nhập số giây đèn xanh của mỗi làn đề phòng trường hợp chế độ AUTO bị lỗi, hoặc bảo trì. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68
  82. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.17 Kết quả hiển thị trên mô hình khi điều khiển bằng tay ở làn 1 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69
  83. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70
  84. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.18 Kết quả hiển thị trên mô hình ở làn 2 song song với kết quả trên ( bằng tay) Sau khi chuyển làn từ làn 1 sang làn 2, ta được kết quả tiếp theo dưới đây: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71
  85. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.19 Kết quả hiển thị trên mô hình ở làn 2 khi điều khiển bằng tay. Hình 5.20 Kết quả hiển thị trên mô hình ở làn 1 song song với kết quả trên. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72
  86. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Tất nhiên hệ thống sẽ báo lỗi đối với trường hợp khi người không nhập vào 2 ô “LÀN 1” và “LÀN 2” dữ liệu dạng số: Hình 5.21 Nhập dữ liệu dạng kí tự không phải số. Hình 5.22 Hệ thống báo lỗi yêu cầu nhập dữ liệu có dạng số. 5.2 NHẬN XÉT – ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73
  87. CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hệ thống hoạt động đạt 95% yêu cầu đặt ra. Độ ổn định hệ thống đạt vào khoảng 95%. Hệ thống sử dụng nguồn cấp nhỏ 9V nên khá an toàn, phù hợp cho người dùng. Giao diện dễ nhìn, dễ quan sát, sử dụng. Đèn báo và thời gian chạy ổn định,chuyển làn hợp lí Tuy nhiên hệ thống vẫn có những hạn chế đáng kể: Hệ thống hình ảnh được lấy từ smart phone và chỉ từ trên một tuyến đường nền khó để cho hệ thống phân tích chính xác những yếu tố về người hay xe. Các xe đi san sát nhau khiến cho hệ thống đếm nhiều xe gộp thành 1, gây sai số. Video đầu vào chưa đa dạng, chưa thể hiện được hết những vấn đề nóng về giao thống. Mô hình tương đối nhiều dây rườm rà. Về thực tế thì đây chỉ là mô hình mô phỏng một hệ thống xử lí tín hiệu đèn giao thông, để ứng dụng vào thực tế thì rất khó khăn vì yếu tố kinh tế, xã hội. Nhìn chung mô hình giúp người sử dụng hiểu khá rõ về cách hoạt động. Thực trạng giao thông ùn tắc cũng chưa hẵn được giải quyết vì nhiều yếu tố khác, mô hình này giúp người sử dụng hiểu hơn phần nào cách giải quyết chuyện điều tiết giao thông bằng xử lí ảnh. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74
  88. CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Chương 6. KẾT LUẬN - HƯỚNG PHÁT TRIỂN 6.1 KẾT LUẬN. Sau khoảng thời gian kể từ khi chúng em được nhận và tìm hiểu sau đó thực hiện đề tài “Ứng dụng xử lí ảnh điều khiển đèn giao thông tại nút giao thông”, nhóm đã đạt được khoảng 97% mục tiêu đặt ra ban đầu. Giao tiếp giữa matlab và Arduino từ đó điều khiển các thiết bị ngoại vi. Đếm được số lượng phương tiện tham gia giao thông trên làn đường. Thi công được hệ thống ứng dụng xử lý ảnh để điều tiết giao thông tại ngã tư với ngõ vào là video được quay thực tế tr ên cao. Mô hình ứng dụng kĩ thuật xử lý ảnh để điều khiển tín hiệu đèn giao thông đạt được kết quả đáng tin cậy. Thời gian sáng các đèn được điều khiển hợp lý theo yêu cầu đặt ra của đề tài là tuyến đường nào có lưu lượng xe lưu thông lớn thì tuyến đường đó ưu tiên sáng đèn xanh lâu hơn,. 6.2 HƯỚNG PHÁT TRIỂN. Với một hệ thống mang tính chất ứng dụng vào thực tiễn một cách cao hơn, bản thân chúng em và những người thực hiện nên cải tiến thêm những hướng: Nâng cấp camera và phần mềm để có thể nhận diện xe ưu tiên. Nâng cấp hệ thống có thể hiển thị tốc độ lưu thông của từng phương tiện trên màn hình giám sát. Xây dựng các trạm xử lý trung tâm để điều khiển đồng bộ các đèn giao thông để giải quyết tốt hơn về vấn đề ùn tắc giao thông hiện nay. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 72
  89. TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO [1] TS. Nguyễn Thanh Hải, Giáo trình Xử lý ảnh, Nhà xuất bản ĐH Quốc Gia TP. HCM, 2014. [2] TS. Nguyễn Văn Thể: nghi-ve-chong-un-tac-giao-thong.aspx, 2008. [3] d280617.html, 2018. [4] Lê Mỹ: Gần 50 chốt đèn giao thông được lắp hệ thống cảm biến, Dân Trí, 17/12/2007. [5] PGS.TS Nguyễn Quang Hoan, Xử lý ảnh, Học viện Công nghệ Bưu Chính Viễn Thông, 2006. [6] 14/09/2014. [7] [8] mau/, 27/02/2018. [9] lm-trn, 25/08/2017. [10] Ross L.Spencer, Introduction to Matlab, 2000. [11] thanhhai.tic: 2018. [12]LU RUM: xu-ly-anh.180/, 24/12/2015. [13] Hans-Petter Halvorsen, Introduction to ARDUINO, 2008. [14] fbclid=IwAR07pmBnIikYrJEfH_gg16jJBrwn8U9uueUxcINTSvKH7pW5jhV8nFVV CK0 [15] Agus Kurniawan, Arduino Programming using Matlab, 1st Edition, 2015. [16] 2017. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP
  90. PHỤ LỤC PHỤ LỤC Chương trình vi điều khiển arduino #include "C:\Users\HP\Desktop\doantn\LED.h" LEDDisplay *led; //khai báo biến int counter; int chuc1,donvi1,chuc2,donvi2; unsigned long lastUpdate; int TX, TD; int DEM, DATA=0; int do1 = 14; int vang1 = 15; int xanh1 = 16; int do2 = 17; int vang2 =18; int xanh2 = 19; void setup() { Serial.begin(9600); 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); pinMode(do1, OUTPUT); pinMode(vang1, OUTPUT); pinMode(xanh1, OUTPUT); pinMode(do2, OUTPUT); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  91. PHỤ LỤC pinMode(vang2, OUTPUT); pinMode(xanh2, OUTPUT); pinMode(test, OUTPUT); void ht1(void) { int c; for(c=0;c 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); } } void loop() { if(Serial.available()>0) { txanh = Serial.read(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  92. PHỤ LỤC dem=dem+1; if (dem ==3) { dem=1; if (dem==1) { tx1= txanh; td2= tx1+3; 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(); num1 ; num2 ; } while(num2!=0); num1=num2=3; do { digitalWrite(xanh1, LOW);//x1=tat; digitalWrite(vang1, HIGH);//v1=bat; digitalWrite(do2, HIGH);//d2=bat; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  93. PHỤ LỤC ht1(); num1 ; num2 ; if (num1==1) { data=data+1; Serial.write(data); } } while(num1!=0); } else { tx2= txanh; td1= tx2+3; num2=td1; num1=tx2; do { digitalWrite(xanh2, HIGH);//x1=bat; digitalWrite(do1, HIGH);//d2=bat; digitalWrite(vang1, LOW);//v2=tat; digitalWrite(do2, LOW);//d1=bat ht1(); num1 ; num2 ; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  94. PHỤ LỤC } 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
  95. PHỤ LỤC Chương trình xử lý ảnh Matlab Giao diện function varargout = lccd(varargin) % LUACHONCHEDO MATLAB code for luachonchedo.fig % LUACHONCHEDO, by itself, creates a new LUACHONCHEDO or raises the existing % singleton*. % % H = LUACHONCHEDO returns the handle to a new LUACHONCHEDO or the handle to % the existing singleton*. % % LUACHONCHEDO('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in LUACHONCHEDO.M with the given input arguments. % % LUACHONCHEDO('Property','Value', ) creates a new LUACHONCHEDO or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before luachonchedo_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to luachonchedo_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help luachonchedo % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @luachonchedo_OpeningFcn, 'gui_OutputFcn', @luachonchedo_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % Executes just before luachonchedo is made visible. function lccd_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  96. PHỤ LỤC % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to luachonchedo (see VARARGIN) % Choose default command line output for luachonchedo handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes luachonchedo wait for user response (see UIRESUME) % uiwait(handles.figure1); % Outputs from this function are returned to the command line. function varargout = luachonchedo_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global cd cd = 1; close; Lc_ll; % Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global cd cd = 0; close; DO_AN_TOT_NGHIEP_1; % Executes during object deletion, before destroying properties. function figure1_DeleteFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) out = instrfind; fclose(out); function figure1_CreateFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  97. PHỤ LỤC % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns calle logo = imread('logokhoa.jpg'); imshow(logo); global s; s = serial('COM6'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); % if(strcmp(get(s, 'Status'),'closed')) % fopen(s); % end Giao diện chương trình đk bằng tay function varargout = GIAO_DIEN_1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @ GIAO_DIEN_1OpeningFcn, 'gui_OutputFcn', @ GIAO_DIEN_1OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function GIAO_DIEN_1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = GIAO_DIEN_1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function edit_xanh1_Callback(hObject, eventdata, handles) function edit_xanh1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit_xanh2_Callback(hObject, eventdata, handles) function edit_xanh2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btn_bd_Callback(hObject, eventdata, handles) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  98. PHỤ LỤC global a1; global b1; global s; a = get(handles.edit_xanh1,'String'); b = get(handles.edit_xanh2,'String'); if isempty(str2num(a)) || isempty(str2num(b)) set(handles.edit_xanh1,'String',''); set(handles.edit_xanh2,'String',''); F = msgbox('HAY NHAP DU LIEU SO', 'lOI','error'); else set(handles.btn_bd,'visible','off'); a1 = str2num(['uint8(',a,')']); b1 = str2num(['uint8(',b,')']); fwrite(s,a1); s.BytesAvailableFcn = {@read_data,handles}; end function pushbutton3_Callback(hObject, eventdata, handles) close; chon_che_do; global s; s = serial('COM6'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); function figure1_DeleteFcn(hObject, eventdata, handles) out = instrfind; fclose(out); function read_data(obj, event, handles) global s; global a1; global b1; data = fread(obj,1) if (mod(data,2)==1) fwrite(s,b1); else fwrite(s,a1); end Chương trình nhúng video vào matlab. function fig fig2 = gcf; PushButton = uicontrol(fig2, 'Style', 'push', 'String', 'Play', 'Position', [0.0 0.0 50 50], 'CallBack', @play, 'UserData', 0); PushButton1 = 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')) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  99. PHỤ LỤC set(PushButton1,'String','Countinue'); uiwait(); else set(PushButton1,'String','Pause'); uiresume(); end end function play(PushButton, EventData) v1 = VideoReader('vua_xe_lan11.mp4'); v2 = VideoReader('vua_xe_lan2.mp4'); i1 = 0; i2 = 0; while i1 < v1.NumberOfFrames || i2 < v2.NumberOfFrames if i1 < v1.NumberOfFrames i1 = i1+1; frame = v1.read(i1); imwrite(frame,'input_1.jpg','jpg'); if ishandle(ax11) image(ax11, frame); title(ax11,'LÀN 1'); else break; %axes is gone, figure is probably gone too end else i1=0; end if i2 < v2.NumberOfFrames i2 = i2+1; frame2 = v2.read(i2); imwrite(frame2,'input_2.jpg','jpg'); if ishandle(ax12) image(ax12, frame2); title(ax12,'LÀN 2'); else break; %axes is gone, figure is probably gone too end else i2=0; end drawnow end end end - Chương trình điều khiển bằng tay. function varargout = GIAO_DIEN_1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @DO_AN_TOT_NGHIEP_1_OpeningFcn, 'gui_OutputFcn', @DO_AN_TOT_NGHIEP_1_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  100. PHỤ LỤC gui_mainfcn(gui_State, varargin{:}); end function DO_AN_TOT_NGHIEP_1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = DO_AN_TOT_NGHIEP_1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function edit_Sgiayxanh1_Callback(hObject, eventdata, handles) function edit_Sgiayxanh1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit_Sgiayxanh2_Callback(hObject, eventdata, handles) function edit_Sgiayxanh2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btn_bd_Callback(hObject, eventdata, handles) global a1; global b1; global s; a = get(handles.edit_Sgiayxanh1,'String'); b = get(handles.edit_Sgiayxanh2,'String'); if isempty(str2num(a)) || isempty(str2num(b)) set(handles.edit_Sgiayxanh1,'String',''); set(handles.edit_Sgiayxanh2,'String',''); F = msgbox('HAY NHAP DU LIEU SO', 'lOI','error'); else set(handles.btn_bd,'visible','off'); a1 = str2num(['uint8(',a,')']); b1 = str2num(['uint8(',b,')']); fwrite(s,a1); s.BytesAvailableFcn = {@read_data,handles}; end function pushbutton3_Callback(hObject, eventdata, handles) close; luachonchedo; function figure1_CreateFcn(hObject, eventdata, handles) img = imread('logo.png'); img2 = imresize(img, [200 1400]); imshow(img2); global s; s = serial('COM3'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 1; fopen(s); function figure1_DeleteFcn(hObject, eventdata, handles) out = instrfind; fclose(out); function read_data(obj, event, handles) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  101. PHỤ LỤC global s; global a1; global b1; data = fread(obj,1) if (mod(data,2)==1) fwrite(s,b1); else fwrite(s,a1); end - Chương trình xử lý làn với lưu lượng xe bình thường function varargout = guiit_xe(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @guiit_xe_OpeningFcn, 'gui_OutputFcn', @guiit_xe_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function guiit_xe_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = guiit_xe_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btn_bd_Callback(hObject, eventdata, handles) set(handles.btn_bd,'visible','off'); global s; global anhnen_lan1; global anhnen_lan2; img = imread('logo.png'); img2 = imresize(img, [200 1400]); imshow(img2,'Parent',handles.axes4); %===??c ?nh n?n=== anhnen_lan1 = imread('hinhnenitxel1.jpg'); anhnen_lan2 = imread('hinhnenitxel2.jpg'); %===??c ?nh ??u vào 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) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  102. PHỤ LỤC fg(k,j) = A(k,j); else fg(k,j) = 0; end end end sd=imadjust(fg);%t?ng ?? t??ng ph?n level=graythresh(sd);%l?y ng??ng ?? nh? phân ?nh bw=imbinarize(sd,level); se = strel('square',8); anh_mo_rong = imdilate(bw,se);%m? r?ng ?i?m ?nh se = strel('square', 10);%l?c nhi?u filteredForeground = imopen(anh_mo_rong, se); bw_0= filteredForeground; anh_lap_lo=imfill(bw_0,'holes');%l?p l? tr?ng ??i t??ng anh_xoa = bwareaopen(anh_lap_lo,1000);%xóa 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 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')) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  103. PHỤ LỤC 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; 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); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  104. PHỤ LỤC 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; 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); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH
  105. PHỤ LỤC 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')) 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
  106. 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