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

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

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Họ tên sinh viên: Nguyễn Hoàn Hảo MSSV: 15141148 MSSV: 15141140

Huỳnh Ngọc Giang Kỹ thuật Điện Tử Truyền Thông Mã ngành: Đại học chính quy Mã hệ:

01 Chuyên ngành: Hệ đào tạo: 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.

06/09/2019

25/12/2019

III. NGÀY GIAO NHIỆM VỤ: IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 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

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG ĐẠI HỌC SPKT TPHCM

ĐỘ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. 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

MSSV: 15141148

MSSV: 15141140

Họ tên sinh viên 1: Nguyễn Hoàn Hảo Lớp: 15141DT2B Họ tên sinh viên 2: Huỳnh Ngọc Giang Lớp: 15141DT1A 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 Nội dung Tuần/ngày 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

GV HƯỚNG DẪN (Ký và ghi rõ họ và tên)

(3/12 – 18/12) 16 Hoàn thành nhiệm vụ đồ án 19/10/2019

ii

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.

iii

Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang

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.

iv

Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang

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

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

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.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC…………………….54

4.4.3 Giới thiệu về arduino IDE.......................................................................52

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

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

viii

Hình 3.10 Sơ đồ nguyên lý toàn mạch....................................................................37

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

ix

Hình 5.10. Kết quả quan sát trên giao diện làn 1 khi đông xe.................................63

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

ix

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

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

xii

Bảng 5.4 Kết quả đếm xe làn 2 khi đông xe..............................................................66

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.

xii

Nguyễn Hoàn Hảo - Huỳnh Ngọc Giang

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

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

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

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

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

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ự

Nhận diện và nội suy

Thu nhận ảnh

Biểu diễn và mô tả

Tiền xử lý ảnh

Phân đoạn ảnh

Cơ sở tri thức

nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như camera) [5].

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

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

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

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

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

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:

y (m−k ,n−l)

( k ,l ) ϵWW

1 N

v(m,n) = ∑ ∑

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 Nw

với ak,l = và Nw là số điểm ảnh trong cửa sổ lọc W.

Nhận xét về bộ lọc trung bình.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

11

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

1

1

Y =

1 2 1

dùng một số nhân chập có dạng sau:

1 b b b2 b b 1

0 1 0] 8[0 1 0

(b+2)2[1

1]

Y =

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ó:

X qs(m-k, n-l)+η[ m ,n ]

∑ ∑

1 N w

k ,l ∈W

X qs

Y[ m ,n ]=

∑ ∑

1 N w

k .l ∈W

Hay: Y[ m ,n ]=

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

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 (cid:1)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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ

 Thông số kỹ thuật :

Số chân Dòng tối đa chạy qua mỗi LED Dòng chạy bình thường Điện áp rơi trên LED 10 chân 0.25mA 0.1mA 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

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.

 Thông số kỹ thuật của LED đơn:

Hình 3.4 Led đơn màu xanh, đỏ, vàng thực tế.

Đ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

CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ

=

V CC−V LED I LED

5−1,7 10 ×10−3 ≈ 330Ω

RLED=

=

Hình 3.6 Sơ đồ kết nối Led 7 đoạnvới điện trở.

V CC−V LED I LED

5−2.2 10 ×10−3=280Ω Chọn R= 330.

R=

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 đèn đỏ xanh đèn vàng

Ít hơn 2 xe 25s 3s 28s

2 < Số xe <=4 27s 3s 30s

4 < Số xe <=7 29s 3s 32s

7 < Số xe <=10 35s 3s 38s

10< Số xe<=13 13< Số xe<=17 17< Số xe <= 25 Số xe > 25 40s 45s 50s 60s 3s 3s 3s 3s Chế độ thường dùng Bình thường Bình thường Bình thường Bình thường Đông Đông Đông Đông 43s 48s 53s 63s

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

CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ

Arduino mega 1 5V-DC 30 mA

12 2560 Led đơn 5V-DC 10 mA

4 Led 7 đoạn 2 digit 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

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

MÁY TÍNH

ARDUINO 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

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

 Khi tính toán được số giây đèn xanh, đỏ, vàng bộ xử lý ảnh sẽ gửi dữ liệu

sẽ được lặp đi lặp lại như vậy.

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

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

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:

Số lượng

Thông số 5 VDC Tên linh kiện Arduino 1 Mega2560

30mA 2.2V Led 7 đoạn đôi 4

Điện trở 12

10mA 330Ω 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

38

để 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

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.

39

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

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

40

cùng các chân đực.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

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:

41

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

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ử

42

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

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

43

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

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í.

44

Hình 4.10 Mô hình sau khi thi công.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

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.

Ảnh đầu vào Xử lý hình ảnh Đếm số lượng đối tượng Chụp ảnh và xác định ảnh nền

Xác định các đối tượng là phươ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.

45

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

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

TẠO LỖ TRỐNG CHUYỂN ẢNH XÁM

TÌM KÍCH THƯỚC ẢNH (DEMENSION) XOÁ CÁC ĐIỂM NHỎ

CHO GIÁ TRỊ NGƯỠNG = 55 DÁN NHÃN ĐỐI TƯỢNG TẠO VỆT MÀU KHÁC NỀN

fg=abs(Y - X) ĐẾM CÁC ĐỐI TƯỢNG CÓ TRONG VÙNG XỬ LÍ

GỬI TÍN HIỆU VĐK ĐẶT a,b = 1

Sai

ENDliệu sang arduino

Đúng

Sai

a < length

Đúng

1

b < wi dth

46

Hình 4.12 Lưu đồ xử lí ảnh đầu vào.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

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

Sai Kết thúc

Whil e (tru e) Đúng

47

ĐỌC DỮ LIỆU

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

Đúng

i = i + 1

Sai

LÀN = 1 i/ 2

=

0

i/

Sai

2 = 0

Đúng CHƯƠNG 4. THI CÔNG HỆ THỐNG LÀN =1

Sai Đúng

LÀ Hình 4.13 Lưu đồ chương trình điều khiển ứng dụng trên Arduino. N = 1

ĐIỀU KHIỂN LÀN 2 ĐIỀU KHIỂN LÀN 1

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.

48

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

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

49

là Inspector.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

CHƯƠNG 4. THI CÔNG HỆ THỐNG

Hình 4.16 Kéo các tool ra được giao diện GUI.

50

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

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

51

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

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

52

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

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.

53

Hình 4.21 Bước 2: Khởi động matlab

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

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.

54

 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

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

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

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

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

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

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

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ị đúng

sai 0

92.67%

chụp 1 2 3 4 5 6 6 5 4 5 3 4 được 6 5 4 4 2 4 0 0 1 1 0

7 8 2 0 2 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

CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ

0

1 2 3 2 1 2 2 1 2 0 0

4 5 4 3 3 3 1 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

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

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

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

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

Số xe có trên Số xe đếm Số xe đếm Tỷ lệ đếm Lần

đúng

92.53%

chụp 1 2 3 4 5 được 11 16 21 19 20 sai 2 2 1 1 1

hình 13 15 22 20 19 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

đúng

95%

chụp 1 2 3 4 5 được 6 5 3 6 2 sai 0 1 0 0 0

hình 6 6 3 6 2 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

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

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

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

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

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

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

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

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

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.

nghi-ve-chong-un-tac-giao-thong.aspx, 2008.

[3]https://www.atgt.vn/bi-mat-ben-trong-dau-nao-dieu-khien-giao-thong-ha-noi-

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]

https://tranvantri.wordpress.com/2014/09/14/tu-rgb-sang-da-muc-xam-grayscale/,

14/09/2014.

[7] https://uk.mathworks.com/help/matlab/ref/rgb2gray.html.

[8] https://blog.vietnamlab.vn/2018/02/27/xu-ly-anh-voi-opencv-tut-2-chuyen-doi-anh-

mau/, 27/02/2018.

[9] https://www.slideshare.net/nguyenthieu2102/k-thut-lc-nh-v-ng-dng-trong-lc-nhiu-

lm-trn, 25/08/2017.

[2] TS. Nguyễn Văn Thể: http://www.mt.gov.vn/matgt/tin-tuc/988/31640/mot-vai-suy-

[10] Ross L.Spencer, Introduction to Matlab, 2000.

[12]LU RUM:

http://vimach.net/threads/matlab-trong-xu-ly-anh-7-ham-co-ban-cho-

xu-ly-anh.180/, 24/12/2015.

[11] thanhhai.tic: https://kho-internet.blogspot.com/2018/10/matlab-la-gi.html, 2018.

[13] Hans-Petter Halvorsen, Introduction to ARDUINO, 2008.

fbclid=IwAR07pmBnIikYrJEfH_gg16jJBrwn8U9uueUxcINTSvKH7pW5jhV8nFVV

CK0

[14]https://vi.wikipedia.org/wiki/Arduino?

[15] Agus Kurniawan, Arduino Programming using Matlab, 1st Edition, 2015.

[16]http://www.beelab.info/2017/06/vi-ieu-khien-pic-bai-10-giao-tiep-uart.html, 2017.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP

PHỤ LỤC

PHỤ LỤC

#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);

Chương trình vi điều khiển arduino

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

PHỤ LỤC

pinMode(vang2, OUTPUT);

pinMode(xanh2, OUTPUT);

pinMode(test, OUTPUT);

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);

}

}

void loop()

{

if(Serial.available()>0) {

txanh = Serial.read();

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

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

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

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

PHỤ LỤC

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

Chương trình xử lý ảnh Matlab Giao diện

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

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

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

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

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'))

Chương trình nhúng video vào matlab.

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

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

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

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

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)

- 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;

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

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

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

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

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

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)

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH