1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế và thi công hệ thống đếm đối tượng trong ảnh sự dụng kít ARDUINO hiển thị trên LCD

84 120 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 84
Dung lượng 9,03 MB

Nội dung

iệc đếm số lượng đối tượng là một nhiêm vụ khá phổ biến trong các ngành công nghiệp bằng các phương pháp khác nhau. Đếm số lượng đối tượng được sử dụng để thu được số lượng nhất định các yếu tố từ ảnh. Vì thế, bài toán đếm đối tượng trong ảnh là một đề tài khá mới mẻ và đang được chú ý để phát triển với phép đếm tự động bởi tầm nhin máy tính để tiết kiệm thời gian, công sức

Trang 1

KHOA ĐIỆN – ĐIỆN TỬ

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

ARDUINO HIỂN THỊ TRÊN LCD

GVHD: ThS Nguyễn Duy Thảo

SVTH: Phan Thành Hưng

MSSV: 13141125

Tp Hồ Chí Minh - 1/2018

Trang 2

KHOA ĐIỆN – ĐIỆN TỬ

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

ARDUINO HIỂN THỊ TRÊN LCD

GVHD: ThS Nguyễn Duy Thảo SVTH: Phan Thành Hưng

Tp Hồ Chí Minh - 1/2018

Trang 3

KHOA ĐIỆN-ĐIỆN TỬ Độc lập – Tự do – Hạnh phúc

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

TP Hồ Chí Minh, ngày 15 tháng 1 năm 2018

BẢNG MÔ TẢ CÔNG VIỆC

Họ tên sinh viên 1: PHAN THÀNH HƯNG MSSV: 13141125

Lớp: 13141DT3A

Họ tên sinh viên 2: TRẦN VĂN THẠCH MSSV: 13141304

Lớp: 13141DT3A

Tên đề tài: ĐẾM ĐỐI TƯỢNG TRONG ẢNH.

1 MÔ TẢ MỤC TIÊU CỦA ĐỀ TÀI:

Mục tiêu của đề tài là xây dựng một hệ thống đếm đối tượng trong ảnh được chụp bằng camera, nhúng dữ liệu đếm được xuống kit Arduino để điều khiển LCD hiển thị kết quả đếm được

Đề tài sử dụng thuật toán đánh nhãn để đối tượng trong ảnh Xây dựng giao diện

để người dùng có thể dễ dàng thao tác Viết hướng dẫn thao tác sử dụng hệ thống

2 MÔ TẢ CÔNG VIỆC THỰC HIỆN ĐỀ TÀI CỦA TỪNG SINH VIÊN:

Họ tên Sinh viên 1: PHAN THÀNH HƯNG

Các công việc thực hiện trong đề tài:

1 Tham khảo tài liệu liên quan đến đề tài của những tác giả đã thực hiện

2 Viết chương trình đếm đối tượng( thuật toán đánh nhãn), điều khiển kit Arduino

3 Chỉnh sửa hệ thống

4 Viết báo cáo

Trang 4

Các công việc thực hiện trong đề tài:

1 Tham khảo tài liệu liên quan đến đề tài của những tác giả đã thực hiện

2 Viết chương trình đếm đối tượng (thuật toán đánh nhãn), điều khiển kit

Arduino

3 Chụp ảnh phục vụ cho quá trình đếm đối tượng

4 Chỉnh sửa báo cáo

XÁC NHẬN CỦA GIẢNG VIÊN HƯỚNG DẪN

(Ký ghi rõ họ tên)

Trang 5

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

Tp HCM, ngày 15 tháng 1 năm 2018

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

Họ tên sinh viên: Phan Thành Hưng MSSV: 13141125

Trần Văn Thạch MSSV: 13141304Chuyên ngành: Kỹ thuật Điện Tử Truyền Thông Mã ngành: 01

Hệ đào tạo: Đại học chính quy Mã hệ: 1

Khóa: 2013 Lớp: 13141DT3A

I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG ĐẾM SỐ LƯỢNG TRONG

ẢNH SỬ DỤNG KÍT ARDUINO HIỂN THỊ TRÊN LCD

II NHIỆM VỤ

1 Các số liệu ban đầu:

 Bộ ảnh đếm: 30 ảnh gồm 10 ảnh tế bào, 10 ảnh cây gỗ, 10 ảnh vỉ thuốc

 Matlab phiên bản 2015a

 Kit điều khiển chính: Arduino Uno R3, LCD 16x2

2 Nội dung thực hiện:

Đề tài thực hiện nội dung xây dựng hệ thống đếm đối tượng qua hình ảnh với đầu vào là ảnh chứa các đối tượng( tế bào, cây, vỉ thuốc) Kết quả đếm được sẽ được nhúng

dữ liệu điều khiển tương ứng xuống kit Arduino Nhóm sẽ thực hiện các nội dung như sau:

 Tìm hiểu kit Arduino

 Cài đặt nguồn thư viện cho kit Arduino, cách kết nối Arduino với Matlab

 Tìm hiểu các thuật toán đánh nhãn

 Xây dựng quá trình xử lý ảnh đầu vào

 Xây dựng hệ thống đếm đối tượng trong ảnh, lập trình các ứng dụng nhúng dữ liệu trên kit Arduino

 Đánh giá kết quả thực hiện

III NGÀY GIAO NHIỆM VỤ: 25/09/2017

IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/01/2018

V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Duy Thảo

CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

Trang 6

Bộ Môn Điện Tử Công Nghiệp – Y Sinh

Tp Hồ Chí Minh, ngày 15 tháng 1 năm 2018

Tên đề tài: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG ĐẾM SỐ LƯỢNG TRONG ẢNH

SỬ DỤNG KÍT ARDUINO HIỂN THỊ TRÊN LCD.

GVHD Tuần 1,2 Tìm đề tài

Tuần 3 Tìm hiểu hoạt động Arduino và Matlab

Tuần 4 Cài đặt Matlab, kết nối Arduino với Matlab

Tuần 5,6 Lập trình Arduino với các chân I/O để nhúng dữ liệu

Tuần 7,8,9 Lập trình và xây dựng chương trình xử lý ảnh đầu vào

Tuần 10,11,12 Lập trình chương trình đếm đối tượng trong ảnh và

chương trình giao diện người dùng

Tuần 13,14 Hiệu chỉnh toàn bộ chương trình

Tuần 15,16,17 Viết báo cáo đồ án

Tuần 18 Chỉnh sửa, in đồ án

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

Trang 7

Chúng tôi cam đoan ĐATN là công trình nghiên cứu của bản thân chúng tôi dưới sự hướng dẫn của Thạc sỹ Nguyễn Duy Thảo

Các kết quả công bố trong ĐATN “Thiết kế và thi công hệ thống đếm số lượng trong ảnh sử dụng kít Arduino hiển thị LCD” là trung thực và không sao

chép hoàn toàn từ công trình nào khác

Trang 8

LỜI CẢM ƠN

Trong quá trình làm đồ án tốt nghiệp, chúng em đã nhận được rất nhiều sự ủng

hộ, giúp đỡ đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè

Chúng em xin gửi lời cảm ơn chân thành đến Th.S Nguyễn Duy Thảo - Trường

Đại học Sư phạm Kỹ thuật Tp.HCM đã tận tình hướng dẫn chỉ bảo trong suốt thời gian làm luận án tốt nghiệp Thầy đã tạo nhiều điều kiện và cho những lời khuyên quý báu giúp chúng em hoàn thành tốt khóa luận

Xin chân thành cảm ơn thầy cô giáo trong Trường Đại học Sư phạm Kỹ thuật Tp.HCM nói chung, các thầy cô trong Bộ môn Điện tử Công Nghiệp – Y Sinh nói riêng

đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức quý báu và tạo điều kiện giúp đỡ trong suốt quá trình học tập trong những năm học vừa qua, giúp chúng em

có được cơ sở lý thuyết vững vàng

Cuối cùng, chúng em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện, quan tâm, ủng hộ, giúp đỡ, động viên chúng em trong suốt quá trình học tập và hoàn thành đồ án tốt nghiệp

Chúng em xin chân thành cảm ơn!

Người thực hiện đề tài

Phan Thành Hưng Trần Văn Thạch

Trang 9

Trang bìa i

Bảng mô tả công việc ii

Nhiệm vụ đồ án iv

Lịch trình v

Cam đoan vi

Lời cảm ơn vii

Mục lục viii

Liệt kê hình xi

Liệt kê bảng xiii

Tóm tắt xv

CHƯƠNG 1 TỔNG QUAN 1

1.1 Đặt vấn đề 1

1.2 Mục tiêu 2

1.3 Nội dung nghiên cứu 2

1.4 Giới hạn 2

1.5 Bố cục 3

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 4

2.1 Giới thiệu xử lý ảnh 4

2.2 Tổng quan về Matlab 5

2.3 Giới thiệu lịch sử hình thành Arduino 6

2.4 Giới thiệu về phần cứng 8

2.4.1 Kit Arduino Uno 8

2.4.2 Giới thiệu về LCD 16x2 10

2.4.3 Giao tiếp I2C 11

2.5 Một số phương pháp trong xử lý ảnh 12

2.5.1 Xử lý điểm ảnh: 12

2.5.2 Làm trơn nhiễu bằng lọc tuyến tính 15

2.5.3 Nhị phân hóa ngưỡng tự động 16

2.5.4 Phân vùng ảnh: 17

2.5.5 Phép toán Dilation 18

2.5.6 Phép toán Erosion 19

2.5.7 Phép toán Openning 20

Trang 10

2.6 Các hàm xử lý trong Matlab 25

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

3.1 Giới thiệu 28

3.2 Thiết kế hệ thống 28

3.2.1 Thiết kế sơ đồ khối hệ thống 28

3.2.2 Thiết kế các khối hệt thống 30

3.3 Tổng quan về phần cứng 32

3.3.1 Tổng quan các khối chính 32

3.3.2 Board Arduino Uno R3 33

3.4 Cài đặt các gói hỗ trợ phần cứng cho Matlab 37

3.4.1Kết nối Arduino với Matlab 37

3.4.2Kiểm tra kết nối Arduino với Matlab 40

3.4.3 Kết nối LCD với I2C 40

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

4.1 Giới thiệu 42

4.2 Thi công hệ thống 42

4.3 Lưu đồ hệ thống 43

4.3.1 Tổng quát về hệ thống 43

4.3.2 Chi tiết về hệ thống 43

4.4 Viết tài liệu hướng dẫn sử dụng, thao tác 47

4.4.1 Viết tài liệu hướng dẫn sử dụng 47

4.4.2Quy trình thao tác trên giao diện 48

CHƯƠNG 5 KẾT QUẢ _ NHẬN XÉT _ĐÁNH GIÁ 49

5.1 Kết quả 49

5.1.1 Tổng quan kết quả đạt được 49

5.1.2 Kết quả thực tế 49

5.2 Nhận xét và đánh giá 60

CHƯƠNG 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 62

6.1 Kết luận 62

6.2 Hướng phát triển 63

TÀI LIỆU THAM KHẢO 64

PHỤ LỤC 65

Trang 11

Hình Trang

Hình 2.1: Những thành viên khởi xướng Arduino 7

Hình 2.2 Cấu trúc phần cứng của Arduino Uno 9

Hình 2.3 Hình ảnh LCD 10

Hình 2.4 : Hình ảnh I2C 12

Hình 2.5: Chuyển ảnh màu thành ảnh xám 13

Hình 2.6 Lược đồ xám 14

Hình 2.7 Ảnh xám và ảnh nhị phân 14

Hình 2.8 Ngưỡng tự động theo T1 và T2 17

Hình 2.9.a.Đối tượng cần phình A và nhân tạo ảnh B,b.Minh họa quét các b,khắp A 19

Hình 2.10.Kết quả của phép toán Dilation 19

Hình 2.11.Kết quả của phép toán Erosion 19

Hình 2.12.Vật có cấu trúc đơn giản-hình vuông và phức tạp và hình xoắn ốc 21

Hình 2.13 Lưu đồ giải thuật cho thuật toán đánh nhãn 22

Hình 2.14 Lưu đồ giải thuật cho toán đánh nhãn 23

Hình 2.15 Vật thể màu đen đã được đánh nhãn 23

Hình 2.16 Mô phỏng thuật toán đánh nhãn 24

Hình 2.17 Số lượng vật được xác định dựa vào RAM 25

Hình 3.1 Sơ đồ quá trình đếm đối tượng 29

Hình 3.2 Sơ đồ nguyên lý khối ứng dụng 31

Hình 3.3 Tổng quan các khối 32

Hình 3.4 Sơ đồ nguyên lý board Arduino Uno R3 33

Hình 3.5 Sơ đồ chân ATmega328 34

Hình 3.6 Cầu USB-to-UART 36

Hình 3.7 Bộ nguồn 37

Hình 3.8 Get Hardware Support Package 38

Hình 3.9 Cửa sổ “Support Package Installer” 38

Hình 3.10 Giao diện cài Package cho Arduino 39

Hình 3.11 Đăng nhập cho cửa sổ “MathWorks Account Log In” 39

Trang 12

Hình 4.2 Lưu đồ chính hệ thống 43

Hình 4.3 Lưu đồ đếm đối tượng 44

Hình 4.4 Lưu đồ chương trình đếm đối tượng 45

Hình 4.5 Lưu đồ chương trình dếm đối tượng 46

Hình 4.6 Lưu đồ chương trình điều khiển ứng dụng trên Arduino 47

Hình 4.7 Quy trình thao tác với thuật toán đánh nhãn 48

Hình 5.1 Giao diện ban đầu 50

Hình 5.2 Giao diện chọn lựa đối tượng đếm 50

Hình 5.3 Giao diện đếm tế bào 51

Hình 5.4 Giao diện đếm cây 52

Hình 5.5 Giao diện đếm thuốc 52

Hình 5.6 10 bức ảnh đếm tế bào mà nhóm thực hiền đề tài 53

Hình 5.7 Đếm tế bào màu hồng thành công 53

Hình 5.8 Đếm tế bào màu tím sạm thành công 54

Hình 5.9 10 Bức ảnh đếm cây mà nhóm thực hiện đề tài 55

Hình 5.10.Đếm cây loại 1 thành công 55

Hình 5.11 Đếm cây loại 2 thành công 56

Hình 5.12 10 bức ảnh đếm thuốc nhóm thực hiện đề tài 56

Hình 5.13 Đếm thuốc loại 1 thành công 57

Hình 5.14 Đếm thuốc đen loại 2 thành công 58

Hình 5.15 Kết quả hiện thị đếm đối tượng ra LCD 59

Trang 13

Bảng Trang

Bảng 2.1 Thông số kỹ thuật Arduino Uno 8

Bảng 2.2:Chức năng các chân của LCD 10

Bảng 2.3 Các hàm xử lý hình ảnh khác trong Matlab 27

Bảng 5.1.Kết quả đếm tế bào 40

Bảng 5.2.Kết quả đếm thuốc 60

Bảng 5.3.Kết quả đếm cây 60

Trang 14

Đề tài: “Thiết kế và thi công hệ thống đếm đối tượng trong ảnh sử dụng kit Arduino hiển thị trên LCD” nghiên cứu xây dựng phương pháp xử lý ảnh đầu vào,

các phương pháp hinh thái học và đếm đối tượng trong ảnh để điều khiển ứng dụng trên kit Arduino tương ứng với kết quả giá trị nhận được Các nội dung nghiên cứu bao gồm: Tìm hiểu kit Arduino; Tìm hiểu các phương pháp tiền xử lý ảnh ; Tìm hiểu các phép toán hình thái học; Xây dựng thuật toán đánh nhãn để đếm đối tượng trong ảnh

Đề tài được xây dựng chủ yếu trên phần mềm Matlab

Mô hình do nhóm thực hiện đã đạt được mục tiêu do nhóm đặt ra Hiệu suất việc đếm đối tượng cao, điều khiển các ứng dụng trên kit Arduino Tuy nhiên, việc đếm đối tương còn phụ thuộc nhiều vào môi trường khác nhau như: ánh sáng nền, màu

sắc đối tương nên gây khó khăn cho viêc đếm đối tương sai số

Trang 15

Chương 1 TỔNG QUAN

1.1 ĐẶT VẤN ĐỀ

Trong những năm gần đây, mặc dù còn mới mẻ trong lĩnh vực khoa học và công nghệ nhưng xử lý ảnh đang được nghiên cứu và phát triển với tốc độ nhanh chóng bởi các trung tâm nghiên cứu, trường đại học và học viện…với rất nhiều ứng dụng trên các lĩnh vực khác nhau[1] Đi cùng với sự phát triển đó, phần lớn các thiết bị điện tử đều dần phát triển theo hướng tự động hóa, thông minh, có thể giao tiếp, tương tác trực tiếp với người dùng Đáp ứng được điều đó rất nhiều bài toán, giải thuật lần lượt giải quyết được vấn đề Một trong

số đó là bài toán đếm số lượng, phát triển ngày càng hiện đại, yêu cầu độ chính xác ngày càng cao

Trong thời đại bùng nổ về công nghệ thông tin như hiện nay, việc đếm số lượng đối tượng là một nhiệm vụ khá phổ biến được thực hiện nhiều trong các ngành công nghiệp bằng các phương thức khác nhau Đếm đối tượng được sử dụng để nhận được một số lượng nhất định các yếu tố từ hình ảnh Những yếu tố này hoạt động như một nguồn thông tin để phân tích định lượng, theo dõi chuyển động và phân tích định tính Việc đếm số lượng các đối tượng được thực hiện trong các môi trường khác nhau với khác đối tượng có kích thước,

số lượng khác nhau Nhưng kết quả đem lại thường không cao, sai số lớn và mất nhiều thời gian Vì thế mà việc đếm bằng phương pháp đếm thủ công phải được thay thế bằng đếm tự động bởi tầm nhìn máy tính Đếm tự động sẽ giúp chúng ta tiết kiệm được thời gian, công sức, tăng khả năng chính xác và áp dụng cho nhiều đối tượng khác nhau chẳng hạn như: đếm tế bào, cá, trứng, ic, xe …

Ở nước ta hiện nay, lĩnh vực đếm trong xử lý ảnh đã có nhũng phát triển đáng kể Tuy nhiên nó chỉ mới phát triển dựa trên nền tảng phần cứng và chưa được áp dụng rỗng rãi trong thực tế Vệc giải quyết bài toán này theo hướng tiếp cận sử dụng phần mềm chưa được quan tâm phát triển

Xuất phát từ mục tiêu tiếp cận, bổ sung các kiến thức mới, cũng như củng cố lại

Trang 16

hơn về ứng dụng của xử lý ảnh, nghiên cứu các thuật đếm đối tượng trong ảnh và thực hiện đếm đối tượng rồi nhúng dữ liệu xuống kit Arduino[2]

Do đó, nhóm thực hiện đồ án chọn đề tài: “Đếm đối tượng trong ảnh”

1.2 MỤC TIÊU

Mục tiêu của đề tài là xây dựng hệ thống đếm đối tượng qua hình ảnh với đầu vào là ảnh có chứa đố tượng cần đếm từ ảnh chụp Với số lượng đối tượng đếm được sẽ được sẽ nhúng dữ liệu điều khiển tương ứng xuống kit Arduino

1.3 NỘI DUNG NGHIÊN CỨU

Mục tiêu xây dựng hệ thống: “Đếm đối tượng qua hình ảnh ” như trên thì nhóm sẽ thực hiện những nội dung như sau:

 NỘI DUNG 1: Tìm hiểu kit Arduino

 NỘI DUNG 2: Cài đặt nguồn thư viện cho kit Arduino, cách kết nối module Arduino với phần mềm Matlab

 NỘI DUNG 3: Tìm hiểu các thuật toán cần thiết liên quan đến đếm đối tương trong ảnh

 NỘI DUNG 4: Xây dựng thuật toán tạo cơ sở dữ liệu cần thiết cho mục đích đếm đối tượng

 NỘI DUNG 5: Xây dựng hệ thống đếm đối tượng qua hình ảnh , lập trình các ứng dụng nhúng dữ liệu trên kit Arduino

 NỘI DUNG 6: Đánh giá kết quả thực hiện

Trang 17

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, LCD và I2C

Giới thiệu về các phương pháp trong quá trình xử lý ảnh đầu vào Giới thiệu về thuật toán đánh nhãn trong việc đếm đối tượng

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 đối tượng qua hình ảnh được viết trên phần mềm Matlab, sử dụng thư viện của Matlab cho kit Arduino

Chương 4: Thi công hệ thống

Xây dựng chương trình hoàn chỉnh cho toàn hệ thống, các hàm, các lưu đồ, các chương trình được sử dụng Lắp ráp và chạy chương trình Viết tài liệu hướng dẫn sử dụng, quy trình thao tác

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

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

Trang 18

Chương 2 CƠ SỞ LÝ THUYẾT

2.1 GIỚI THIỆU XỬ LÝ ẢNH[1]

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, Sá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 Ứ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 ngày càng được áp dụng rộng rãi và thu nhiều kết quả khả quan

Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh Đầu tiên, ảnh tự nhiên

từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh) Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR) Gần đây, với

Trang 19

sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Máy ảnh số hiện nay

là một thí dụ gần gũi Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh

2.2 TỔNG QUAN VỀ MATLAB[4]

Matlab (Matrix Laboratory) là một môi trường tính toán số và lập trình, được thiết

kế bởi công ty MathWorks, là ngôn ngữ lập trình thực hành bậc cao được sử dụng nhiều

để giải các bài toán kỹ thuật Matlab tích hợp việc tính toán thể hiện kết quả cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng Dữ liệu cùng với thư viện được lập trình sẵn cho phép người dùng có được những ứng dụng như:

 Tính toán các phép toán học thông thường, tính toán ma trận

 Lập trình tạo ra những ứng dụng mới

 Cho phép mô phỏng các mô hình thực tế

 Phân tích, khảo sát, hiển thị dữ liệu

Matlab được sử dụng trong nhiều lĩnh vực, bao gồm xử lý tín hiệu và ảnh, truyền thông, thiết kế điều khiển tự động, đo lường kiểm tra, phân tích mô hình tài chính, hay tính toán sinh học Matlab cung cấp giải pháp chuyên dụng gọi là Toolbox Toolbox là một tập hợp toàn diện các hàm của Matlab (M-file)

Hệ thống Matlab gồm 5 phần chính:

 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

Trang 20

 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

2.3 GIỚI THIỆU LỊCH SỬ HÌNH THÀNH ARDUINO[3]

Arduino thực sự đã gây sóng gió trên thị trường người dung 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, gần giống với những gì Apple đã làm được trên thị trường thiết bị di động Số lượng người dung cực lớn

và đa dạng với trình độ trải rộng từ bậc phổ thông lên đến đại học làm cho ngay cả những người tạo ra chúng phải ngạc nhiên về mức độ phổ biến

Trang 21

Hình 2.1: Những thành viên khởi xướng Arduino

Arduino là gì mà có thể 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ợ hi cho ra đời bộ kít Arduino mega ADK dung để phát triển trên các ứng dụng tương tác với cảm biến với các thiết bị khác?

Arduino thật ra 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ỉ cới 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 dung đầu tiên Hiện

Trang 22

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

2.4 GIỚI THIỆU PHẦN CỨNG

2.4.1 Kit Arduino Uno[3]

Kit Arduino có nhiều phiên bản với tính năng và mục đích sử dụng khác nhau Board Arduino Uno là một trong những phiên bản được sử dụng rộng rãi nhất bởi chi phí

và tính linh động của nó

Arduino Uno là một board mạch vi điều khiển dựa trên chip Atmega328 với 14 chân vào/ra bằng tín hiệu số được đánh số từ 0 đến 13, trong đó 6 chân có thể tạo xung PWM được đánh dấu “~” trước mã số của chân, 6 chân nhận tín hiệu analog được đánh dấu từ A0 đến A5, có thể sử dụng như là 6 chân I/O số Có 2 mức điện áp là 0V và 5V với

dòng vào/ra tối đa trên mỗi chân là 30 mA

Vi điều khiển Atmega328P họ 8 bit

Điện áp hoạt động 5V

Điện áp đầu vào 7-12V

Điện áp đầu vào giới hạn 6-20V

Số chân Digital I/O 14 (có 6 chân PWM)

Số chân Analog 6 ( độ phân giải 10bit)

DC current per I/O pin 20mA

DC current for 3.3V pin 50mA

Flash Memory 32KB (ATmega328P)

Trang 23

Hình 2.2 Cấu trúc phần cứng của Arduino Uno

 Cổng USB(1): Cổng USB dùng để kết nối với máy tính và thông qua đó để upload chương trình cho Arduino từ máy tính, đồng thời cung cấp nguồn cho Arduino

 Nguồn (2 và 4): Sử dụng jack cắm nguồn 2.1mm (cực dương ở giữa) hoặc có thể dùng chân Vin và GND để cấp nguồn cho Arduino Board mạch hoạt động ở điện áp ngoài khoảng 5-20V, nhưng nếu cấp nguồn lớn hơn 5V thì ngõ ra chân 5V sẽ lớn hơn, không nên cấp nguồn lớn hơn 12V vì board sẽ nóng và dễ bị hỏng Chân 5V và chân 3.3v

là 2 chân lấy nguồn từ Arduino ra ngoài, không được cấp nguồn vào nó, sẽ làm hỏng

 Chip Atmega328P(6): Có 32KB bộ nhớ flash trong đó có 0.5KB dùng cho bootloader, 2KB SRAM, 1KB EEPROM

 Output và Input (3 và 5): Arduino có 14 chân Digital với các chức năng Input và Output

Trang 24

2.4.2 Giới thiệu về LCD 16x2

Hình 2.3 Hình ảnh LCD

- Các tính năng chính của LCD

• 5 x 8 chấm với con trỏ

• Tích hợp bộ điều khiển (KS 0.066 hoặc tương đương)

• Cấp điện +5V (Ngoài ra có sẵn cho + 3V)

• 1 / 16 nhiệm vụ chu kỳ

• B / L sẽ được điều khiển bởi pin 1, pin 2 hay pin 15, pin 16 hoặc AK (LED)

• N.V tùy chọn cho + 3V cấp điện

- Chức năng các chân của LCD:

1 VSS Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với

GND của mạch điều khiển

2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với

VCC=5V của mạch điều khiển

3 VEE Điều chỉnh độ tương phản của LCD

Trang 25

Bảng 2.2.Chức năng các chân của LCD

2.4.3 Giao tiếp I2C

Thông thường, để sử dụng màn hình LCD bạn sẽ phải mất rất nhiều chân Arduino

để điều khiển.Do vậy, để đơn giản hóa công việc người ta đã tạo ra một mạch điều khiển màn hình LCD sử dụng giao tiếp I2C Nói một cách đơn giản, bạn chỉ tốn hai dây để điều khiển màn hình thay vì 8 dây như cách thống thường thường làm

chế độ “đọc” - read)

+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD

5 R/W

Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic

“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc

6 E

Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E

+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào( chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E

+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ

ở bus đến khi nào chân E xuống mức thấp

7 - 14 DB0÷DB7

Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU

Có 2 chế độ sử dụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB

Trang 26

Hình 2.4 : Hình ảnh I2C

Ở đây đối với LCD 16x2 dùng module I2C địa chỉ tùy thuộc vào jump cắm trên module I2C Để biết địa chỉ I2C đang dùng ta vào Arduino và cho chương trình I2C scanner để quét địa chỉ dùng cho I2C đang sử dụng Và địa chỉ mà quét được cho I2C của mình là 0x27

I2C sử dụng hai đường truyền tín hiệu:

 Một đường xung nhịp đồng hồ(SCL) chỉ do Master phát đi ( thông thường ở 100Khz và 400Khz Mức cao nhất là 1Mhz và 3.4Mhz)

 Một đường dữ liệu( SDA) theo 2 hướng

2.5 MỘT SỐ PHƯƠNG PHÁP TRONG XỬ LÝ ẢNH.[6]

2.5.1 Xử lý điểm ảnh:

Ảnh thu về trước xử lý thông thường là những ảnh màu, nghĩa là một pixel bao gồm thông tin ba màu cơ bản là R(đỏ), G(xanh lá), B(xanh biển) Ba màu này được bố trí sát nhau tạo thành các màu khả biến Mỗi mày R, G, được biểu diễn bởi 8 bits Như vây mỗi pixel có giá trị 24bits, biểu diễn được khoảng 16,78 triệu màu

Dữ liệu ảnh thu về là ma trận gồm các giá trị 24bits, điều này sẽ gây độ phức tạp rất lớn cho việc xử lý Nhưng khi ta cần khôi phục ảnh, các pixel sẽ giữ được gần với nguyên gốc nhất Việc có xử lý trực tiếp trên các pixel mày này hay không phụ thuộc vào mục đích khôi phục ảnh hay chỉ nhằm thu nhận dạng ảnh

Trang 27

Phần lớn trường hợp, dữ liệu ảnh được xử lý nhằm thực hiện điều khiển nào đó, do

đó ảnh không cần thiết phải khôi phục Vì vậy, ta cần giảm số bit thông tin biểu diễn 1 pixel để việc xử lý thuận tiện hơn

a Biến ảnh màu thành ảnh xám:

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 được sử dụng phổ biến đổi ảnh màu thành ảnh xám là:

P = aCr + bCb + cCg (2.1)

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

Hình 2.5: Chuyển ảnh màu thành ảnh xám

b 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 Do ảnh đôi khi được chụp ở nơi quá sáng hay quá tối sẽ làm cấu trúc ảnh không rõ ràng, dựa vào lược đồ xám, ta có thể làm nổi bật cấu trúc ảnh lên

Trang 28

Hình 2.6 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

c Nhị phân hóa ảnh:

Đâ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.7.: Ảnh xám và ảnh nhị phân

Trang 29

2.5.2 Làm trơn nhiễu bằng lọc tuyến tính: lọc trung bình và lọc dải thông thấp

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)

a Lọc trung bình không gian

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 định nghĩa như sau:

v(m,n) = ∑ ∑( ) ( ) ( ) (2.4) Nếu trong kỹ thuật lọc trên, ta dùng các trọng số như nhau, phương trình trên sẽ trở

thành:

v(m,n) = ∑ ∑( ) ( ) (2.5) với : y(m, n): ảnh đầu vào,

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 ) (2.9)

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.10)

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ũ

Trang 30

2.5.3 Nhị phân hóa ngưỡng động

 Nhị phân hóa theo ngưỡng tự động với ý tưởng sau:

- Chia tấm ảnh thành nhiều khu vực, cửa sổ khác nhau

- Dùng một thuật toán để tìm một giá trị T phù hợp với từng khu vực, cửa sổ

Thuật toán Otsu

Bước 1: Xác định T1 Giá trị cho T1 ban đầu nên chọn là (0+255) / 2 = 128

Bước 2: Phân loại thành 2 nhóm điểm ảnh

Loại 1 (Type1): chứa tất cả các điểm ảnh có giá trị cường độ sáng (Intensity)

Trang 31

Hình 2.8: Ngƣỡng tự động theo T1 và T2

2.5.4 Phân vùng ảnh:

Là bước xác định vật thể trong ảnh, bằng cách trích lọc ra vùng có cùng tính chất dựa vào sự đồng nhất về mức xám giữa những pixel Sau khi phân vùng ảnh, ta sẽ có được vật thể xác định trên ảnh tách biệt với các chi tiết thừa trong hình Hạn chế là ta chỉ nhận được các vật tách biệt nhau còn với các ảnh nhiều chi tiết, kết quả phân vùng sẽ không chính xác

Đối với cấu trúc ảnh nhị phân, các pixel chỉ mang giá trị 0 hoặc 1 nên việc phân vùng ảnh rất quan trọng nhằm loại bỏ nhiễu, phân tách các vật thể gần nhau hay định rõ một vật thể với các đường liên kết nhỏ

Phương pháp khả thi nhất cho việc phân vùng ảnh nhị phân là làm mảnh và làm đầy:

- Làm mảnh: loại bỏ hoàn toàn các nhiễu trong vật thể hay trên biên, tách biệt các vật với nhau

Trang 32

Tùy theo mục đích và yêu cầu hệ thống, ta có thể sử dụng một vài bước trên để lấy thông tin cần thiết cho việc xử lý ảnh Đó có thể đơn giản là nhận biết sự khác nhau giữa

2 hình nhằm xác định chuyển động hoặc phức tạp cần đến độ chính xác cao như nhận biết dấu vân tay đối tượng định trước …

2.5.5 Phép toán Dilation

Phép toán Dilation là thao tác giãn nở/ phình to các đối tượng ảnh đơn sắc A và B

là hai tập hợp con trong Z2, thực hiện phép toán Dilation trong A theo B, kí hiệu là A

B và được xác định như sau : A B = {z | ̂z A }

Trong Matlab, ta có hàm Dilation như sau: imdilate

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 them chí tiết gõ help strel Trong thực tế, người ta chọn

những nhân tạo ảnh sao cho B = ̂, tức là sử dụng nhân tạo ảnh có các phần tử trong nhân tạo ảnh đối xứng qua chính tâm của nó Bên cạnh đó, với việc ta lê những cái tâm z của nhân tạo ảnh B ảnh đi khắp A và tìm những điểm nào mà B A thì ta có thể hiểu như A B = UbiAbi với Abi là những khu vực mà A Bi Có thể xem hình minh họa dưới đây:

Trang 33

Hình 2.9.a.Đối tượng cần phình A và nhân tạo ảnh B b.Minh họa quét các b,khắp A

Hình 2.10 Kết quả của phép toán Dilation

2.5.6 Phép toán Erosion

Phép toán Erosion là thao tác xói mòn/ co hẹp các đối tượng ảnh đơn sắc A và B là hai tập hợp con trong Zz , thực hiện phép toán Erosion trong A theo B, kí hiệu là A B

và được xác định như sau: A B = { p }

Tương tự, trong Matlab ta cũng có hàm Eosion như sau: imerode

Để minh họa cách thức phép toán hoạt động có thể xem hình phía dưới với A và B tương tự như ví dụ ở phép toán Dilation

Hình 2.11.Kết quả của phép toán Erosion

Trang 34

2.4.9 Thuật toán đánh nhãn:

Khi nhận data hình, ta nhận từng pixel một theo chiều từ trái sang phải, từ trên xuống dưới Việc xử lý có thể được thực hiện giữa các lines hoặc các frames hình Do hạn chế về tài nguyên của các board xử lý hình ảnh, mà cụ thể là Ram, ta không thể lưu cả 1 frames ảnh để dành đến cuối khung hình mới xử lý, vậy ta chọn cách thực thi thuật toán giữa các lines

Cấu trúc của đối tượng trong hình có thể đơn giản như hình vuông, chữ nhật … nhưng cũng có thể rất phức tạp như hình sao, hình lục giác…độ lớn cũng khác nhau, trải dài trên nhiều lines và ở mọi vị trí trên hình ảnh Ta chỉ có thể nhận và xử lý lines từ trên xuống dưới, các lines đã qua xử lý không thể giữ lại nên nếu gặp một phần của đối tượng nằm ở lines bất kì bên dưới, không thể dùng so sánh để biết nó có thuộc đối tượng nào ở trên hay không

Trang 35

Hình 2.12 : Vật có cấu trúc đơn giản-hình vuông và phức tạp và hình xoắn ốc

Cách giải quyết vấn đề này là đánh nhãn đối tượng Với mỗi pixel nhận được, ta đánh số cho pixel đó, các pixel ở cạnh nhau mà cùng thuộc vật thể( có giá trị “1” khi nhận

từ bước tiền xử lý) sẽ được gán cùng một nhãn( nhãn là một giá trị nào đó theo thứ tự số) Vậy cần lưu lại ít nhất 1 line ở trên để so sánh, điều này có thể thực hiện được bởi 1 line gồm 1024 Pixels, không quá nhiều Do hạn chế của cách hoạt động trên phần cứng, ta chỉ

có thể so sánh mỗi pixels ở trên và phía trước nó chứ không thể so sánh toàn bộ các pixels xung quanh

Ví dụ với các hình vuông và chữ nhật ở trên, với hình vuông gồm 9 pixels, 9 pixels

đó đều mang nhãn số 1, tương tự cho hình vuông 4 pixels, 4pixels đó đều mang nhãn là số 2…Nhưng với hình xoắn ốc, cách đánh nhãn này không chính xác, bởi càng xuống phía dưới, nhãn đánh lên các pixel càng khác nhau

Nhằm thỏa vấn đề này, ta sử dụng cách đánh nhãn có giá trị Với mỗi nhãn được đánh cho các pixels, ta đi đính kèm với nó có một giá trị Tức con số gán lên pixel là địa chỉ, địa chỉ này tất nhiên sẽ chứa (hay chỉ đến, dạng con trỏ) một giá trị khác Như vậy, mục đích là từ một vật thể mang nhiều nhãn khác nhau nhưng các nhãn đều có cùng 1 giá trị, xét theo giá trị thì chúng cùng một đối tượng Nếu 2 nhãn khác nhau liền kề, ta chỉ cần cập nhật giá trị cho nhãn có số lớn hơn, do ưu tiên các số nhỏ

Trang 36

Sau đây là sơ đồ giải thuật của thuật toán, với các ghi chú:

 Pixel_in: pixel nhận vào theo thứ tự

 Pixel_up: pixel ở bên trên pixel đang xét

 Pixel_focus: pixel đang đươc xử lý

 Pixel_pre: pixel phía trước pixel đang xét

 Count: biến đếm dùng làm nhãn đối tượng

Hình 2.13: Lưu đồ giải thuật cho thuật toán đánh nhãn

Thuật toán hoạt động cụ thể nhu sau: pixel lấy vào nếu có giá trị lơn hơn 127, tức

là thuộc nền, thay bằng pixel_in có giá trị “0”, ngược lại là “1” như đã nói ở trên Nếu là nền thì bỏ qua, nhưng nếu là vật thể thì xét pixel_up ở trên ở trên đã đánh nhãn rồi thì cứ theo đó mà gán giá trị vào, còn không phải vật thì xét pixel_pre ở trước, phía trước là vật thể thì theo đó mà đánh nhãn Nếu cả trên và phía trước đều chưa có nhãn, ta đánh nhãn mới cho pixel này Việc này thực thi tuần tự với mỗi pixel vào, không dừng lại cho đến khi dừng xử lý bởi người dùng Việc cập nhật giá trị cho nhãn được thực thi khi

Trang 37

pixel_forcus gán theo nhãn pixel_up nhưng pixel_pre đã có nhãn Đến đâu pixel_focus

và pixel_pre liền kề nhau mang nhãn khác nhau, vậy nhãn nào nhỏ hơn thì lấy giá trị nhãn

đó chung cho cả hai Nhãn là chuỗi số tăng dần có chứa giá trị, vậy trong phần cứng, đó chính là Ram Còn để lưu lại cả một line rồi lấy dần ra làm pixel_up, bộ Fifo( First in first out) chính là lựa chọn tốt nhất Việc sử dụng các pixel phía trên và phía trước này cụ thể như sau:

Hình 2.14 Lưu đồ giải thuật cho toán đánh nhãn

Để dễ hiểu hơn việc cập nhật giá trị cho các nhãn, ta xem thử vật thể sau:

Hình 2.15: Vật thể màu đen đã được đánh nhãn

Các nhãn liền kề bị khác nhau và cần cập nhật giá trị lai tại các vị trí “2!” và “1!” Nhìn cách cập nhât giá trị này có vẻ phức tạp bởi ta có thể xét lại từ đầu line lần nữa và đổi giá trị các nhãn cần thay Nhưng giả sử gặp phải vật thể kéo dài đến cuối mép phải

Pixel_up FIFO

Pixel_pre Analysis

Trang 38

này là không thể đối với hệ thống xử lý thời gian thực Ram được sử dụng trong trường hợp cụ thể này như sau:

Hình 2.16 : Mô phỏng thuật toán đánh nhãn

Ô nhớ mang địa chỉ “0” trong Ram không được sử dụng bởi nó trùng giá trị với

“giá trị nền” của pixel_in Đây là lý do ta chọn nền là “0”, vật thể là “1”, giúp sử dụng được hết các ô nhớ Ram Số lượng vật thể đếm được cũng theo đó mà được tối ưu Ví dụ như Ram sử dụng có độ dài 10bits ta theo đó đếm được 1022 vật thể

Thực tế nếu trong hình có nhiều đối tượng có cấu trúc phức tạp, hay nhiều đường cong, biết Count dùng để đánh nhãn sẽ nhanh chóng bị tràn cho dù có dùng độ dài bít lớn đến đâu đi nữa Chẳng hạn với ví dụ trên ta có thể thấy một vật nhưng có đến 3 nhãn, điều này làm phung phí tài nguyên không cần thiết.Vấn đề ảy sinh tiếp theo là tìm cách sử dụng lại những nhãn không cần thiết nữa, một đối tượng dùng một nhãn là đủ

Cách giải quyết hiệu quả nhất là dùng bộ Fifo Các nhãn đã được cập nhật thay đổi giá trị sẽ đưa vào nó Fifo lưu trữ, khi cần sẽ lấy ra theo thứ tự, điều này giúp các nhãn được sử dụng dồn hẳng về đầu Ram, tức là các địa chỉ có giá trị nhỏ, theo kiểu sắp xếp, thuận lợi cho việc xác định vật thể sau này

Để đếm số lượng vật thể trong ảnh, ta đếm dựa vào các ô nhớ trong RAM Xét lần lượt các địa chỉ của RAM, nếu địa chỉ ô nhớ giống với các giá trị trong đó thì được một vật thể, trừ địa chỉ ô nhớ”0” Việc này thực thi vào cuối mỗi Frame hình, khi có cạnh lên hoặc cạnh xuống của vsync tùy theo thuật toán sử dụng sao cho phù hợp giữa chốt lấy giá trị biến đếm number và reset các biến

Theo ví dụ trên các nhãn 1, 2, 3 đều có chung giá trị 1, vậy chúng cùng thuộc một đối tượng, nhãn 4 đối tượng tiếp theo, cứ thế cho đến ô địa chỉ RAM cuối cùng

Trang 39

Hình 2.17 : Số lượng vật được xác định dựa vào RAM 2.4 CÁC HÀM XỬ LÝ TRONG MATLAB[4]

Các hàm chính hiển thị ảnh trong matlab:

Hàm image(x,y,c): Hiển thị hình ảnh biểu diễn bởi ma trận c kích thước m x n lên

hệ trục tọa độ, x,y là các vector xác định vị trí của các pixel c(m,n)

Hàm imagesc: Tương tự hàm image, dữ liệu ảnh sẽ được co giãn để sử dụng toàn

bộ bản đồ màu hiện hành

Hàm imshow: Cho phép hiển thị ảnh trên một figure và tự động thiết lập giá trị các

đối tượng image, axes, figure để hiển thị hình ảnh

Các hàm khác được sử dụng trong đề tài:

T=strcat(s1,s2,s3…): Ghép các chuỗi lại với nhau, trả về chuỗi nối tiếp s1s2s3…

length(): Lấy chiều dài

T=dir(pathname): Lấy thông tin của một Folder bao gồm: Số file chứa trong

folder, tên file, ngày tạo, kích thước file…

S=int2str(x): Chuyển đổi số kiểu integer thành chuỗi ký tự

D=size(a): Trả về giá trị là ma trận có dạng [x,y] là kích thước của ma trận a

rgb2gray(RGB) : Chuyển đổi ảnh màu sang ảnh xám

im2bw(I, level): Chuyển đổi hình ảnh xám sang hình ảnh nhị phân, dựa trên

ngưỡng

bw2 = bwareaopen(BW, P): Loại bỏ các đối tượng nhỏ khỏi hình ảnh nhị phân

Trang 40

imopen( IM,SE): thực hiện mở hình thái trên màu xám, IM là hình ảnh nhị phân,

SE là phần tử cấu trúc

bwboundaries(BW): đánh dấu biên giới các vật thể, cũng như ranh giới của lỗ bên

trong các đối tượng này(BW)

bwlabel(BW): kết nối các thành phần có trong hình ảnh nhị phân

text(x,y,z,'string','PropertyName',PropertyValue): Tạo đối tượng văn bản trong

các trục hiện tại

length(X) : chiều dài lớn nhất của số nguyên X

Các hàm chuyển đổi loại ảnh và kiểu dữ liệu ảnh

Dither Tạo ảnh nhị phân hay ảnh RGB

gray2ind Chuyển ảnh trắng đen thành ảnh indexed

im2bw Chuyển ảnh thành ảnh kiểu dữ liệu nhị phân

im2double Chuyển ảnh thành ảnh kiểu dữ liệu double

im2uint16 Chuyển ảnh thành ảnh kiểu dữ liệu uint16

ind2rgb Chuyển ảnh indexed thành ảnh RBG

mat2gray Tạo ảnh gray scale từ ma trận

rgb2ind Chuyển ảnh RBG thành ảnh indexed

rgb2gray Chuyển ảnh RBG thành ảnh gray scale

Các hàm truy xuất dữ liệu ảnh

Imfinfo Truy xuất thông tin ảnh

Imread Đọc ảnh từ file và xuất ra ma trận ảnh

Imwrite Lưu ma trận ảnh thành file ảnh

Các hàm biến đổi hình học

Imcrop Trích xuất một phần ảnh

Imresize Thay đổi kích thước ảnh

Imdilate Phép toán giãn nở điểm ảnh nhị phân

Imerode Phép toán xói mòi điểm ảnh nhị phân

Ngày đăng: 01/06/2019, 20:07

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Thanh Hải, Giáo trình Xử lý ảnh, Nhà xuất bản ĐH Quốc Gia TP. HCM, 2014 Sách, tạp chí
Tiêu đề: Giáo trình Xử lý ảnh
Nhà XB: Nhà xuất bản ĐH Quốc Gia TP. HCM
[2] Agus Kurniawan, Arduino Programming using Matlab, 1 st Edition, 2015 Sách, tạp chí
Tiêu đề: Arduino Programming using Matlab
[9] ARDUINO®, ARDUINO UNO REV3, https://store.arduino.cc/usa/arduino-uno-rev3 Sách, tạp chí
Tiêu đề: ARDUINO UNO REV3
[10] Nhận dạng đối tượng viên thuốc tròn, https://text.123doc.org/document/4405702-tieu-luan-nhan-dang-doi-tuong-vien-thuoc-hinh-tron.htm Link
[11] Đếm số đối tượng trên video dùng FPGA, http://doc.edu.vn/tai-lieu/luan-van-dem-so-doi-tuong-tren-video-dung-fpga-52196/ Link
[3] Hans-Petter Halvorsen, Introduction to ARDUINO, 2008 Khác
[4] Ross L.Spencer, Introduction to Matlab, 2000 Khác
[5] IEEE Computer Society Executive Briefings Document Image Analysis Lawrence O’Gorman Rangachar Kasturi ISBN 0-8186-7802-X Library of Congress Number 97- 17283 1997 Khác
[6] J.R.Parker, Algorithms for Image Processing and Computer Vision, 2 st Edition, 2010 Khác
[7] Varun Sharma, Object Counting using MATLAB,2014 Khác
[8] Kholoud Alotaibi, Sickle Blood Cell Dedection Based on Image Segmentation, 2016. Trang web tham khảo Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w