THÀNH PHỐ HỒ CHÍ MINHĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG 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 GVHD: GU
Trang 1THÀNH PHỐ HỒ CHÍ MINH
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
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
GVHD: GUYỄN DUY THẢO SVTH: PHAN THÀNH HƯNG MSSV: 13141125
SKL 0 0 6 4 8 5
Trang 2KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
-
ĐỀ TÀI:
Tp Hồ Chí Minh - 1/2018
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
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
GVHD: ThS Nguyễn Duy Thảo
Trang 3KHOA Đ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: 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
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 4Cá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
(Ký ghi rõ họ tên) (Ký ghi rõ họ tên)
XÁC NHẬN CỦA GIẢNG VIÊN HƯỚNG DẪN
(Ký ghi rõ họ tên)
Trang 5BỘ 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: 13141304 Chuyên ngành: Kỹ thuật Điện Tử Truyền Thông Mã ngành: 01
Hệ đào tạo: Đại học chính quy Mã hệ: 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 6Bộ 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 7Chú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
Phan Thành Hưng Trần Văn Thạch
Trang 8LỜ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 9Trang 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 102.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.1 Kết nối Arduino với Matlab 37
3.4.2 Kiể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.2 Quy 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 11Hì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 12Hì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 13Bả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 15Chươ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 nghiệp 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ế Việ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 những kỹ năng kiến thức trong suốt quá trình học tập tại trường Đồng thời nghiên cứu
Trang 16sâu 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: “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”
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 đối 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: “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” 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
1.4 GIỚI HẠN
Mô hình gồm có kit Arduino Uno, LCD 16x2, máy tính Laptop để thực hiện hệ thống đếm đối tượng qua hình ảnh trên phần mềm Matlab sau đó nhúng dữ liệu xuống kit Arduino
Trang 17Hệ thống đếm đối tượng với kích thước ảnh chụp từ camera với các phương pháp tiền xử lý ảnh đầu vào và thuật toán đánh nhãn để đếm các đối tượng có trong ảnh Ảnh chụp từ camera điện thoại
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, hạn chế và nêu lên các hướng phát triển
Trang 18Chươ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 19sự 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 21Hì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 22nay 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 23Hì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 242.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 25Bả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 26Hì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 27Phầ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 28Hì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 292.5.2 Các phương pháp lọc nhiễu ảnh nhằm cải thiện ảnh
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 đó, để 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ước khi xem xét chi tiết các kỹ thuật áp dụng, cần phân biệt các loại nhiễu hay can thiệp trong quá trình xử lý ảnh 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:
Nhiễu xung thường gây đột biến tại một số điểm ảnh
2.5.3 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
Trang 30a 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) = 1
𝑁 ∑ ∑(𝑘,𝑙)𝜖𝑊𝑦(𝑚 − 𝑘, 𝑛 − 𝑙) (2.5) với : y(m, n): ảnh đầu vào,
v(m, n): ảnh đầu ra,
a(k, l) : là cửa sổ lọc
với ak,l = 1
𝑁𝑤 và Nw là số điểm ảnh trong cửa sổ lọc W
Lọc trung bình có trọng số chính là thực hiện chập ảnh đầu vào với nhân chập H Nhân chập H trong trường hợp này có dạng:
Giả sử đầu vào biểu diễn bởi ma trận I:
Trang 31𝑌 = 19[
Ở đây, nhân chập H có kích thuớc 2x2 và mỗi điểm ảnh kết quả có giá trị bằng
trung bình cộng của nó với trung bình cộng của 4 lân cận gần nhất
Lọc trung bình trọng số là một trường hợp riêng của lọc thông thấp
b Lọc thông thấp
Lọc thông thấp thường được sử dụng để làm trơn nhiễu.Về nguyên lý của bộ lọc thông thấp giống như đã trình bày trên Trong kỹ thuật này người ta hay dùng một số nhân chập có dạng sau:
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:
Trang 32Như vậy, nhiễu cộng trong ảnh đã giảm đi Nw lần
c Lọc đồng hình (Homomorphie Filter)
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ũ
2.5.4 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)
a 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.11)
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.12)
• Có lợi cho việc loại bỏ các điểm ảnh hay các 18ang mà vẫn bảo tòan độ 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ổ
Đ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
Trang 33b Lọc ngoài (Outlier Filter)
Giả thiết có ngưỡng nào đó cho các mức nhiễu (có thể dựa vào lược đồ xám) Tiến hành so sánh giá trị độ xám của một điểm ảnh với trung bình số học 8 lân cận của nó Nếu sai lệch lớn hơn ngưỡng, điểm ảnh này được coi như nhiễu Trong trường hợp đó, thay thế giá trị của điểm ảnh bằng giá trị trung bình 8 lân cận vừa tính được Bộ lọc ngoài có thể diễn tả bằng công thức sau:
Y(m,n) ={𝑎(𝑤)𝑘ℎ𝑖 | 𝑢(𝑚, 𝑛) − 𝑎(𝑤)
với: α(w) là trung bình cộng các điểm trong lân cận w; δ là ngưỡng ngoài
Các cửa sổ tính toán thường chọn là 3x3 Tuy nhiên, cửa sổ có thể mở rộng đến 5x5 hay 7x7 để đảm bảo tính tương quan giữa các điểm ảnh Vấn đề quan trọng là xác
định ngưỡng để loại nhiễu mà vẫn không làm mất thông tin của ảnh
2.5.5 Kỹ thuật xử lý ảnh theo ngưỡng (Thresholding)
Xử lý ngưỡng sử dụng 1 giá trị ngưỡng (trong khoảng 0 – 255) để xử lý 1 kênh màu hoặc ảnh đa mức xám Kết quả nhận được là ảnh nhị phân, tức là có thể biểu diễn 1 pixel bằng 1 bit
Ngưỡng đơn: xử lý 1 ảnh đa mức xám thành ảnh nhị phân (đen trắng) 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
(2.14) New_pixel = {pixel > T → whitepixel < T → black
Trang 34Ví dụ:
Hình 2.8: Xử lý ngưỡng ảnh xám (trái) và kết quả (phải)
Ngưỡng kép: sử dụng 2 ngưỡng T1, T2 như sau:
Trang 35 Loại bỏ các chi tiết không cần thiết
Hiện lên các chi tiết ẩn hoặc mờ
2.5.6 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
- Làm đầy : đưa các vùng ảnh khôi phục như ban đầu
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.7 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 Ví dụ về cách sử dụng hàm imdilate
A = imread( ‘broken_text.tif’);
B = [0 1 0; 1 1 1; 0 1 0];
A2= imdilate(A,B);
Imshow(A2)
Trang 36B 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:
Hình 2.10.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.11 Kết quả của phép toán Dilation
Trang 37Tương tự, trong Matlab ta cũng có hàm Eosion như sau: imerode và cách sử dụng hàm
này như sau:
A = imread(‘broken_text.tif’);
Se = strel(‘disk’,10);
A2= imerode(A,se);
Imshow(A2)
Để 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.12.Kết quả của phép toán Erosion
Trang 38Hình 2.13 Quá trình của phép toán Openning 2.5.10 Phép toán closing
Phép toán Closing của hình A theo nhân tạo hinh B kí hiệu là:
A ∙ B = (A ⊕ B) ⊖ B
Tương tự trên về hinh học ta cũng có định nghĩa tương đương:
A ∙ B = (∪ { Bz | Bz ⊆ A})c Tác dụng của phép toán này là làm trơn biên, nối liền những mẫu rời nhau, lắp đầy các lỗ nhỏ Trong Matlab hàm để sử dụng là imclose Ngoài ra ta còn có một số tính chất cần lưu tâm sau đây:
A ⊆ (A ∙ B)
Với A1 ⊆ A2 thì (A1 ∙ B ) ⊆ (A2 ∙ B )
[((A ∙ B) ∙ B )] = A ∙ B
Trang 392.4.11 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
Hình 2.14 : 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ố
Trang 402…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ỏ
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