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