TÓM TẮT LUẬN VĂN Ngày nay với sự phát triển nhảy vọt của Khoa học kỹ thuật, con người đã tạo nên và phát triển nhiều công trình khoa học mang tính tầm cỡ. Với sự thay thế dần của máy móc cho con người trong các nhiệm vụ mang tính chính xác và tập trung cao thì kết quảđạt được đã hoàn toàn được tin cậy và đánh giá cao. Điều này thực sự có ý nghĩa to lớn và góp phần tăng thêm giá trị và chất lượng cuộc sống. Đề tài luận văn này, nhận dạng danh tính xe và bám đuổi trên cơ sở thị giác máy tính, cũng không nằm ngoài ý nghĩa đó. Đây là một hướng nghiên cứu thú vị và ý nghĩa vì nhu cầu thực tiễn và có nhiều phương pháp tiếp cận.Hướng giải quyết đề tài của sinh viên là nhận dạng danh tính xe bằng nhận dạng biển số xe. Ở Việt Nam phương tiện giao thông chủ yếu là xe gắn máy nên trong luận văn sinh viên chọn biển số xe máy, gồm 2 hàng và 8 ký tự. Bám đuổi xe dựa trên khoảng cách tính được giữa 2 xe. Tất cả các giải thuật, chương trình nhận dạng và tính khoảng cách đều dựa trên cơ sở thị giác máy tính.
Trang 1KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG
LUẬN VĂN TỐT NGHIỆP
TRONG NHẬN DẠNG VÀ BÁM ĐUỔI BIỂN SỐ XE
GVHD : KS LÊ NGỌC ĐÌNH SVTH : LÊ ĐỨC HẠNH MSSV : 40700703
Trang 2ĐH QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA
- -
Số: /BKĐT KHOA: ĐIỆN - ĐIỆN TỬ BỘ MÔN: ĐIỀU KHIỂN TỰ ĐỘNG CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc - -
NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP HỌ VÀ TÊN: LÊ ĐỨC HẠNH MSSV: 40700703 NGÀNH: ĐIỀU KHIỂN TỰ ĐỘNG LỚP: DD07TD1 1 Đầu đề luận văn: THUẬT TOÁN ADABOOST VÀ MẠNG NEURAL TRONG NHẬN DẠNG VÀ BÁM ĐUỔI BIỂN SỐ XE 2 Nhiệm vụ (Yêu cầu về nội dung và số liệu ban đầu): ………
………
………
………
………
………
………
………
3 Ngày giao nhiệm vụ luận văn:………
4 Ngày hoàn thành nhiệm vụ: ………
5 Họ và tên người hướng dẫn: Phần hướng dẫn 1 KS LÊ NGỌC ĐÌNH ……… ………
2 ……… ……….……
Nội dung và yêu cầu LVTN đã được thông qua Bộ Môn Ngày………tháng…………năm……
CHỦ NHIỆM BỘ MÔN NGƯỜI HƯỚNG DẪN CHÍNH (Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên) PHẦN DÀNH CHO KHOA, BỘ MÔN: Người duyệt (chấm sơ bộ): ………
Đơn vị:………
Ngày bảo vệ ………
Điểm tổng kết………
Nơi lưu trữ luận văn ………
Trang 3-✩ - -✩ -
Số: /BKĐT Khoa: Điện – Điện tử Bộ Môn: Tự Động PHIẾU CHẤM BẢO VỆ LVTN (Dành cho người hướng dẫn) 1 Họ và tên SV : ………
MSSV : ……… Ngành (chuyên ngành ) : ………
2 Đề tài : ………
………
3 Họ tên người hướng dẫn: ………
4 Tổng quát về bản thuyết minh : Số trang : Số chương : ………
Số bảng số liệu : Số hình vẽ : ………
Số tài liệu tham khảo : Phần mềm tính toán :…………
Hiện vật (sản phẩm) :
5 Tổng quát về các bản vẽ : Số bản vẽ : bản A1 bản A2 khổ khác Số bản vẽ tay: Số bản vẽ trên máy tính: 6 Những ưu điểm chính của LVTN:………
7 Những thiếu sót chính của LVTN:………
8 Đề nghị : Được bảo vệ Bổ sung thêm để bảo vệ Không được bảo vệ 9 Câu hỏi SV phải trả lời trước Hội đồng : a
b
c
Đánh giá chung (bằng chữ : giỏi, khá, TB) : Điểm _/10
Ký tên (ghi rõ họ tên)
Trang 4-✩ - -✩ -
Số: /BKĐT Ngày tháng năm Khoa: Điện – Điện tử Bộ Môn: Tự Động PHIẾU CHẤM BẢO VỆ LVTN (Dành cho người phản biện) 1 Họ và tên SV : ………
MSSV :……… Ngành (chuyên ngành ) : ………
2 Đề tài : ………
………
3 Họ tên người phản biện:………
4 Tổng quát về bản thuyết minh : Số trang : Số chương : ………
Số bảng số liệu : Số hình vẽ : ………
Số tài liệu tham khảo : Phần mềm tính toán :…………
Hiện vật (sản phẩm) :
5 Tổng quát về các bản vẽ : Số bản vẽ : bản A1 bản A2 khổ khác Số bản vẽ tay: Số bản vẽ trên máy tính: 6 Những ưu điểm chính của LVTN:………
7 Những thiếu sót chính của LVTN:………
8 Đề nghị : Được bảo vệ Bổ sung thêm để bảo vệ Không được bảo vệ 9 Câu hỏi SV phải trả lời trước Hội đồng : a
b
c
Đánh giá chung (bằng chữ : giỏi, khá, TB) : Điểm _/10
Ký tên (ghi rõ họ tên)
Trang 5Trước hết con xin gửi lời cảm ơn đến gia đình, đã luôn khích lệ và là chỗ dựa tinh thần cho con trong suốt quá trình học tập vừa qua
Kính gửi đến thầy Lê Ngọc Đình lời cảm ơn chân thành và sâu sắc, cảm ơn thầy
đã tận tình hướng dẫn và đưa ra lời khuyên để em có thể hoàn thành luận văn tốt nghiệp
Em xin chân thành cảm ơn tất cả các thầy cô của trường Đại Học Bách Khoa TP.HCM nói chung , quý thầy cô của khoa Điện- Điện Tử và bộ môn Điều Khiển Tự Động nói riêng đã tận tình giảng dạy và trang bị những kiến thức cần thiết cho em trong suốt thời gian học tập tại trường
Và tôi xin được cảm ơn những người bạn đã giúp đỡ tôi rất nhiều trong quá trình học tập cũng như khi thực hiện luận văn này
Sau cùng, em xin được gởi lời chúc sức khỏe, hạnh phúc đến quý thầy cô, gia đình
và bạn bè
Tp.HCM, ngày 25 tháng 12 năm 2011
Lê Đức Hạnh
Trang 6Ngày nay với sự phát triển nhảy vọt của Khoa học kỹ thuật, con người đã tạo nên
và phát triển nhiều công trình khoa học mang tính tầm cỡ Với sự thay thế dần của máy móc cho con người trong các nhiệm vụ mang tính chính xác và tập trung cao thì kết quả đạt được đã hoàn toàn được tin cậy và đánh giá cao Điều này thực sự có ý nghĩa to lớn
và góp phần tăng thêm giá trị và chất lượng cuộc sống
Đề tài luận văn này, nhận dạng danh tính xe và bám đuổi trên cơ sở thị giác máy tính, cũng không nằm ngoài ý nghĩa đó Đây là một hướng nghiên cứu thú vị và ý nghĩa
vì nhu cầu thực tiễn và có nhiều phương pháp tiếp cận
Hướng giải quyết đề tài của sinh viên là nhận dạng danh tính xe bằng nhận dạng biển số xe Ở Việt Nam phương tiện giao thông chủ yếu là xe gắn máy nên trong luận văn sinh viện chọn biển số xe máy, gồm 2 hàng và 8 ký tự Bám đuổi xe dựa trên khoảng cách tính được giữa 2 xe Tất cả các giải thuật, chương trình nhận dạng và tính khoảng cách đều dựa trên cơ sở thị giác máy tính
Cụ thể những vấn đề chính được đặt ra và cần giải quyết ở đề tài này là:
Tìm hiểu về ngôn ngữ lập trình C++, phần mềm Microsoft Visual Studio 2008 và
thư viện mã nguồn mở OpenCV của Intel
Nghiên cứu cơ sở lý thuyết của thuật toán Adaboost với đặc trưng Haar-like áp
dụng cho nhận dạng biển số xe từ hình ảnh webcam thu về
Tìm hiểu các đặc trưng của mạng neural và các phương pháp học cho mạng, áp
dụng cho bài toán nhận diện ký tự
Tạo cơ sở dữ liệu lưu biển số xe có thể tương tác được
Tính khoảng cách đến xe cần bám đuổi bằng phương pháp hình học và phương
Trang 7Đề Mục Trang
Trang bìa
Nhiệm vụ luận văn
Phiếu chấm luận văn
Trang 82.3.3 Tiền xử lý ảnh 12
2.4 Các thư viện mã nguồn mở hỗ trợ cho xử lý ảnh 13
Chương 4: THUẬT TOÁN ADABOOST VÀ HUẤN LUYỆN FILE NHẬN DẠNG 27
Trang 95.2 Phân loại mạng neural nhân tạo 51
5.4.3 Thuật toán lan truyền ngược ứng dụng trong mang MPL 56 5.5 Ứng dụng của mạng neural trong nhận dạng ký tự và số của biển số xe 59
CHƯƠNG 6: VI XỬ LÝ PIC 16F887 VÀ GIAO TIẾP RS232 63
6.3.1 Ưu điểm của giao tiếp nối tiếp RS232 74
6.3.3 Mạch giao tiếp RS232 dùng IC Max232 75
Trang 107.2 Giải thuật và lưu đồ 83
Trang 11Hình 3.8: Xoay ảnh theo phương pháo reverse mapping 24 Hình 3.9: Nhận diện hình chữ nhật bằng hàm cvPolyLine 25 Hình 3.10: Biển số sau khi được tách riêng 26
Trang 12Hình 4.2: Ảnh chia nhỏ tại tọa độ (x,y) 29 Hình 4.3: Tổng các giá trị pixel nằm trong vùng A 29
Hình 4.6: Dùng chuỗi cascade để phát hiện cửa sổ con phù hợp 35 Hình 4.7: Cấu trúc các chuỗi cascade song song 35 Hình 4.8: Cấu trúc các chuỗi cascade nối tiếp 36 Hình 4.9: Một số ảnh positive trong tập huấn luyện 39 Hình 4.10: Một số ảnh negative trong tập huấn luyện 39 Hình 4.11: Khoanh vùng chứa đặc trưng của đối tượng 1 41 Hình 4.12: Khoanh vùng chứa đặc trưng của đối tượng 2 41
Hình 4.14: Quá trình huấn luyện file nhận dạng 46
Hình 5.2: Sơ đồ đơn giản về một mạng neural nhân tạo 51
Hình 5.4: Mạng tiến kết nối đầy đủ với một mức ẩn và một mức đầu ra 52 Hình 5.5 : Mạng hồi quy không có neural ẩn, không có vòng lặp tự phản hồi 52
Trang 13Hình 6.2: Chân reset 65
Hình 6.5: Cấu trúc chân từ RB0 đến RB3 và RB4 đến RB7 67
Hình 6.11: Khởi tạo project trong phần mềm CCS 73
Hình 7.1: Sơ đồ nguyên lý mạch nguồn 5VDC 77
Hình 7.12: Quá trình ánh xạ từ ma trận điểm sang ma trận giá trị 90 Hình 7.13: Mô hình hóa thuật toán ước lượng khoảng cách 91
Trang 14Hình 8.2: Phát hiện biển số 96 Hình 8.3: Lọc biên và tính góc với houghline 97 Hình 8.4: Biển số sau khi xoay về hình chữ nhật 97 Hình 8.5: Phần biển số được tách không có nền 97
Hình 8.8: Lưu các ký tự và số trong khung kết quả nhận diện 99 Hình 8.9: Kết quả nhận diện bằng mạng neural 100 Hình 8.10: Tính khoảng cách và bám đuổi theo biển số 101
Hình 8.12a: Một số hình ảnh thử nghiệm nhận dạng với ánh sáng trong nhà 103 Hình 8.12b: Một số hình ảnh thử nghiệm nhận dạng với ánh sáng ngoài trời 103
Trang 15Robot đã có những tiến bộ rõ rệt trong nửa thế kỷ qua Từ những năm 60 robot đã thay thế con người làm việc trong các môi trường độc hại Ngày nay do nhu cầu sử dụng trong môi trường sản xuất phức tạp nên robot công nghiệp cần thích ứng linh hoạt và thông minh hơn Robot cần phải “thấy” được và “suy nghĩ” được Để chế tạo được robot như vậy yếu tố quan trọng không thể thiếu được đó chính là Thị Giác Máy Tính Thị Giác Máy Tính giúp robot có thể nhận biết được môi trường xung quanh và tính toán đưa ra phương án thích hợp nhất
Phát hiện và nhận dạng đối tượng trong Thị Giác Máy Tính là công việc tìm kiếm và ghi nhận đối tượng trong ảnh hoặc video Có nhiều thuật toán giúp robot có thể nhận dạng và nổi bật trong số đó là thuật toán Adaboost, có thể nhận dạng mặt người, ký tự , bàn tay, biển số xe… một cách nhanh chóng và chính xác
Nhận thấy đây là một hướng phát triển nhiều tiềm năng và thú vị nên trong luận văn sinh viên đã sử dụng Thị Giác Máy Tính để nhận diện biển số xe, tính toán khoảng cách
để điều khiển xe tự hành bám đuổi theo một xe khác trong phạm vi cho trước Có thể ứng dụng cho các xe chở hàng hóa tự động bám nhau trong kho hàng, trong nhà máy…
1.2 Mục tiêu luận văn:
- Tìm hiểu về ngôn ngữ lập trình C++, phần mềm Microsoft Visual Studio 2008 và
thư viện mã nguồn mở OpenCV của Intel
Trang 16- Nghiên cứu cơ sở lý thuyết của thuật toán Adaboost với đặc trưng Haar-like áp
dụng cho nhận dạng biển số xe từ hình ảnh webcam thu về
- Tìm hiểu các đặc trưng của mạng neural và các phương pháp học cho mạng áp
dụng cho bài toán nhận diện ký tự
- Tạo cơ sở dữ liệu lưu biển số xe có thể tương tác được
- Tính khoảng cách đến xe cần bám đuổi bằng phương pháp hình học và phương
Để hiểu rõ hơn về những vấn đề cần giải quyết và xác định phạm vi của đề tài, sinh viên
sẽ mô hình hóa hệ thống như sau:
Tính khoảng cách tới biển
số
Điều khiển động cơ theo khoảng cách
Trang 171.4 Giới hạn đề tài:
- Với thời gian không nhiều và lượng dữ liệu huấn luyện thu thập tương đối sinh
viên chưa nhận diện được các biển số màu (xanh, đỏ)
- Thuật toán điều khiển động cơ chỉ là ON OFF và động cơ không có encoder
1.5 Ý nghĩa của đề tài :
- Giúp tự động hóa quá trình di chuyển của các xe chở hàng trong nhà máy, kho
hàng
- Quản lý được các phương tiện di chuyển nhờ vào cơ sở dữ liệu được tự động lưu
Trang 18Hình 2.1 Các giai đoạn chính trong xử lý ảnh
Quá trình thu nhận ảnh: Ảnh có thể thu nhận qua camera Thường ảnh thu nhận
qua camera là tính hiệu tương tự (loại camera ống kiểu CCIR) nhưng cũng có thể là tín hiệu số hóa (loại CCD-Charge Coupled Device) Ảnh cũng có thể thu về từ vệ tinh thông qua các bộ phận cảm ứng (sensor) hay ảnh được quét trên scanner
Quá trình số hóa (Digitalizer): Ảnh sau khi thu về phải được số hóa, đây là bước
khá quan trọng để chuyển đổi dữ liệu từ analog sang digital thông qua rời rạc hóa (lấy mẫu) và số hóa bằng lượng tử hóa Ảnh được số hóa để xử lý, phân tích hay lưu trữ bằng máy tính
Trang 19Quá trình xử lý số: bao gồm các công đoạn nhỏ Trước hết là công việc tăng
cường ảnh (Image Enhancement ) để nâng cao chất lượng ảnh Do những nguyên nhân khác nhau: có thể do thiết bị thu nhận ảnh, do nguồn sáng hay do nhiễu, ảnh có thể suy biến Do vậy cần phải tăng cường và khôi phục ảnh (Image Restoration ) để làm nổi bật một số đặc tính của ảnh (Image Segmention), trích lọc các đặc tính (Feature Extraction
…)
Hệ quyết định: Tùy mục đích của ứng dụng mà chuyển sang giai đoạn khác là
hiển thị, nhận dạng, phân lớp, truyền thông…
2.2 CÁC KHÁI NIỆM CƠ BẢN TRONG XỬ LÝ ẢNH:
2.2.1 Phần tử ảnh (pixel)
Ảnh trong thực tế là một ảnh liên tục về không gian và về giá trị độ sáng Để có thể xử lý ảnh bằng máy tính cần thiết phải tiến hành số hóa ảnh Trong quá trình số hóa, người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua quá trình lấy mẫu (rời rạc hóa về không gian) và lượng tử hóa thành phần giá trị (rời rạc hóa biên độ giá trị) mà
về nguyên tắc mắt thường không phân biệt được hai điểm kề nhau Trong quá trình này người ta sử dụng khái niệm pixel hay phần tử ảnh Như vậy ảnh là tập hợp của các pixel Mỗi pixel gồm một cặp tọa độ m,n và màu sắc Một pixel có thể lưu trữ 1, 4, 8 hay 24 bit
Một ảnh (gồm một tập các điểm ảnh) có thể xem như bao gồm tập các ảnh con
(các vùng ảnh) Thuật ngữ gọi là ROIs – vùng quan tâm (Regions of Interest)
Trang 20Ảnh số trong không gian rời rạc thu được từ ảnh tương tự trong không gian liên tục thông qua quá trình số hóa Quá trình số hóa có thể hiểu đơn giản như sau:
+ Ảnh tương tự được chia thành M hàng, N cột
+ Giao của hàng và cột được gọi là: pixel
+ Giá trị biên độ của pixel tại tọa độ nguyên (m,n) là s(m,n): là trung bình độ sáng trong pixel đó S(m,n) ≤ L (L số mức xám dùng biểu diễn
ảnh)
M, N thường được chọn là M=N=2 K (K=8,9,10) L =2 B , B là số bít mã hóa cho
độ sáng (biên độ) mỗi pixel
Ảnh số được biểu diễn bởi ma trận 2 chiều Các phần tử của nó là biểu diễn cho các pixel số hóa
Ta ký hiệu 1 ảnh số là S(M,N) Ta nói ảnh có độ phân giải MxN Ký hiệu s(m,n)
để chỉ ra một phần tử ảnh
Hình 2.2 Ảnh tương tự và ảnh số
2.2.3 Mức xám (gray level)
Mức xám là kết quả của sự mã hóa tương ứng với một cường độ sáng của mỗi điểm ảnh với một giá trị số, kết quả của quá trình lượng tử hóa Cách mã hóa kinh điển
là dùng 16, 32 hay 64 mức Mã hóa 256 mức được dùng phổ biến Do 28 = 256 nên mỗi pixel được mã hóa bởi 8 bit
2.2.4 Ảnh đen trắng
Trang 21Thực tế ảnh đen trắng gồm có ảnh nhị phân và ảnh đa cấp xám Chúng ta phân biệt sự biến đổi thành L mức Nếu L bằng 2, nghĩa là chỉ có hai mức 0 và 1 còn gọi là ảnh nhị phân Nếu L lớn hơn hai mức ta có ảnh đa cấp xám Việc xác định số mức phụ thuộc vào tiêu chí lượng tử hóa L thường được chọn bằng 32, 64, 128 và 256 Trong
đó ảnh đa cấp xám 256 mức là ảnh có chất lượng cao và thường được sử dụng
Với ảnh nhị phân, mỗi pixel được mã hóa trên một bit Còn với ảnh xám 256 mức được mã hóa trên 1 byte = 8 bit Ảnh nhị phân khá đơn giản, các phần tử ảnh có thể coi như phần tử logic Ảnh nhị phân được dùng theo tính logic, để phân biệt ảnh với nền hay đơn giản để phân biệt biên với điểm khác
2.2.5 Ảnh màu
Hình 2.3 Dải phổ điện từ (Electromagnetic Spectrum)
Màu sắc của một tia sáng là cảm giác mà tia sáng đó gây nên ở mắt người Màu sắc của vật thể là màu của ánh sáng phát từ chúng Ánh sáng này nằm trong dải phổ nhìn thấy (visible)
Tùy theo ngữ cảnh nhất định mà ảnh màu được diễn tả theo những mô hình màu khác nhau Không có mô hình màu nào là đầy đủ cho mọi khía cạnh của màu Do đó
Trang 22người ta sử dụng những mô hình màu khác nhau để mô tả các tính chất được nhận biết khác nhau của màu
Ví dụ:
+ Mô hình màu RGB: ánh sáng Red, Green, Blue ứng dụng cho màn hình,
Ti Vi
+ Mô hình HSV: Nhận thức con người
+ Mô hình CYK: Máy in
Chúng ta đi sâu vào một số mô hình màu sau:
Mô hình màu RGB
Theo lý thuyết màu do Thomas đưa ra từ năm 1802, mọi màu đều có thể tổ hợp từ
ba màu cơ bản: Đỏ (Red), Lục (Green), Lam (Blue) Ba màu này là các màu cơ bản của
hệ màu cộng (Additive Color System) Hệ màu RGB dựa trên cơ sở hệ thống tọa độ Cartesian – hệ thống tọa độ Decac: mỗi màu cơ bản đều được mã hóa bởi 8 bit, vậy với
ba màu phối hợp nhau tạo thành 2563 = 16.777.216 màu thứ cấp mà mắt người có thể cảm nhận được Ảnh màu được lưu trữ từng màu riêng biệt như ảnh đa cấp xám Ứng với một pixel của ảnh màu sẽ chiếm 3 byte, do đó ảnh màu sẽ chiếm bộ nhớ gấp ba lần ảnh đa cấp xám cùng kích thước
Hình 2.4 Không gian màu và các màu cơ bản RGB
Mô hình màu CMY:
Trang 23Gồm ba màu cơ bản: Xanh Lơ (Cyan), Tím (Magenta), Vàng (Yellow), là bù màu của không gian màu RGB, còn gọi là hệ màu trừ (Subtractive Color System) Mối quan
hệ giữa hai không gian:
C = 1 – R
M = 1 – G
Y = 1 – B
Hình 2.5 Các màu cơ bản của hệ màu CMY
Mô hình màu HSV (Hue, Saturation, Value) :
Dựa trên cảm nhận màu sắc của con người Ánh sáng màu là tổ hợp của ánh sáng đơn sắc Mắt người chỉ có thể cảm nhận được vài chục màu, song lại có thể phân biệt tới hàng ngàn màu Mô hình HSV suy diễn từ mô hình RGB: hãy quan sát hình hộp RGB theo đường chéo từ White đến Black (gốc) ta có hình chóp nón, sử dụng làm đỉnh hình nón HSV
Có ba thuộc tính chủ yếu trong cảm nhận màu:
+ Hue: bước sóng của ánh sáng, được biểu diển bằng góc từ 0o – 360o giúp ta phân biệt các màu khác nhau
+ Saturation: độ bão hòa, đo độ tinh khiết của ánh sáng gốc S nằm trong khoảng [0-1]
Trang 24Hình 2.6 Không gian màu HSV
Ảnh IMG: là ảnh đen trắng Phần đầu của ảnh IMG có 16 byte chứa các thông tin
cần thiết của ảnh Ảnh IMG được nén theo từng dòng Mỗi dòng bao gồm các gói, các dòng giống nhau cũng được nén thành các gói Toàn bộ ảnh chỉ gồm có những điểm sáng và điểm tối là các bit 0 hoặc 1
Ảnh PCX: là một trong những định dạng cổ điển nhất Nó sử dụng loạt mã dài
RLE để nén dữ liệu ảnh Quá trình nén và giải nén được thực hiện trên từng dòng ảnh Thực tế phương pháp nén PCX kém hiệu quả hơn kiểu IMG
Trang 25Ảnh GIF: có lợi về không gian lưu trữ, với ảnh đen trắng kích thước tệp có thể
nhỏ hơn bản gốc từ 5-7 lần; với ảnh 16 màu, kích thước nhỏ hơn ảnh gốc 2-3 lần, có trường hợp xấp xỉ ảnh gốc Tuy nhiên với ảnh 256 màu thì nó bộc lộ khả năng nén rất kém
Ảnh JPEG: sử dụng chuẩn nén cho ảnh tone liên tục Tiêu chuẩn này có thể được
ứng dụng trong nhiều lĩnh vực: lưu trữ ảnh, truyền bá báo chí, ảnh y học, camera số
2.3 CÁC VẤN ĐỀ CƠ BẢN TRONG XỬ LÝ ẢNH
2.3.1 Thiết bị thu nhận ảnh
Các thiết bị thu nhận ảnh thông thường gồm: máy quay (camera) cộng với bộ ADC, máy quét (scanner) chuyên dụng hoặc các bộ cảm biến ảnh (Sensors) Hệ thống thu nhận
ảnh thực hiện hai quá trình:
+ Cảm biến: biến đổi năng lượng quang học thành năng lượng điện
+ Tổng hợp năng lượng điện thành ảnh điện
Trong xử lý ảnh bằng máy tính ta không thể không nói đến các thiết bị monitor để hiển thị ảnh Monitor có nhiều loại khác nhau:
Ảnh thu về từ các thiết bị thu nhận ảnh có thể là ảnh tương tự hoặc ảnh số Trong
trường hợp ảnh tương tự chúng ta phải tiến hành số hóa để có thể xử lý bằng máy tính Phương pháp chung để số hóa ảnh là lấy mẫu theo hàng và số hóa theo hàng
Trang 26Hình 2.7 Sơ đồ số hóa ảnh
Hình 2.8 Mô tả quét theo hàng, lấy mẫu theo hàng và mã hóa từng hàng
2.3.3 Tiền xử lý ảnh
Tiền xử lý ảnh là quá trình xử lý và nâng cao chất lượng ảnh Ảnh sau khi thu
nhận có nhiều thông tin không quan trọng, bị nhiễu, … Điều này làm cho ảnh có dung lượng lớn và có chất lượng không tốt, gây khó khăn cho việc phân tích ảnh sau này Quá trình tiền xử lý ảnh chính là quá trình biến đổi ảnh, làm thay đổi nội dung của ảnh một cách không cơ bản nhưng vẫn giữ được những thông tin quan trọng đồng thời làm nổi bật một số đặc tính quan trọng của ảnh
Trang 272.3.4 Phân tích ảnh
Phân tích ảnh là giai đoạn tiếp theo của tiền xử lý ảnh Quá trình này biến đổi ảnh
để từ đó đưa ra các đặc trưng quan trọng của ảnh Đây là giai đoạn quan trọng nhất của quá trình xử lý ảnh Trong phân tích ảnh, ảnh được tách đường biên hay phân đoạn thành các vùng riêng biệt
2.3.5 Đặc trƣng của ảnh
Ảnh thu được sau khi thực hiện các quá trình tiền xử lý và phân tích ảnh sẽ đưa ra
các thông số của đối tượng cần quan tâm trong ảnh Tiếp theo các thông số này sẽ được tính toán lại để từ đó đưa ra các đặc trưng của đối tượng ảnh Đây là giai đoạn cuối cùng của một quá trình xử lý ảnh Tùy vào mục đích ứng dụng khác nhau mà có thể chọn các đặc trưng phù hợp
2.4 CÁC THƢ VIỆN MÃ NGUỒN MỞ HỖ TRỢ CHO XỬ LÝ ẢNH
Chúng ta có thể sử dụng những thành quả của cộng đồng mã nguồn mở để áp dụng cho ứng dụng xử lý ảnh của mình Hiện nay trên thế giới có rất nhiều thư viện mã nguồn
Trang 28CHƯƠNG 3:
THƯ VIỆN XỬ LÝ ẢNH OPENCV
OpenCV là một thư viện thị giác máy tính mã nguồn mở của hãng Intel có thể tải
về từ trang web http://SourceForge.net/Projects/opencvlibrary Thư viện được viết bằng C và C++ Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999 Ban đầu, nó chỉ là thư viện xử lý ảnh của Intel Về sau, tính lệ thuộc đó đã được loại bỏ và bây giờ
ta có thể sử dụng OpenCV như một thư viện độc lập OpenCV là một thư viện đa nền tảng, nó chấp nhận cả Window và Linux, hơn thế nữa gần đây là Mac OSX Mục tiêu của OpenCV là để cung cấp cơ sở cơ bản dễ sử dụng về thị giác máy tính giúp con người có thể tạo nên những ứng dụng xử lý ảnh phức tạp một cách nhanh chóng Thư viện OpenCV chứa trên 50 chức năng nối nhịp nhiều lĩnh vực trong xử lý ảnh Nó có nhiều tác dụng như: nhận dạng mặt, dò tìm mặt, phát hiện mặt, lọc Kalman,
nó thể hiện sự đa dạng của trí tuệ nhân tạo (AI) Thêm vào đó nó cải thiện rất nhiều các thuật toán cơ bản của thị giác máy như các hàm API cấp thấp hơn Nó có thể là giám sát sản phẩm trong nhà máy, xử lý ảnh y khoa, an ninh, giao diện người dùng, lĩnh vực robot…
3.1 NHỮNG CHỨC NĂNG CỦA OPENCV
- Image and Video I/O: Các giao diện này cho phép ta đọc được dữ liệu ảnh từ file hoặc trực tiếp từ video Ta cũng có thể tạo các file ảnh và video với giao diện này
- Thị giác máy nói chung và các thuật toán xử lý ảnh (General computer-vision and image-processing algorithms (mid – and low level APIs)): Sử dụng những giao
diện này, ta có thể thực hành với rất nhiều chuẩn thị giác máy mà không cần phải có
mã nguồn của chúng Chúng bao gồm sự dò tìm viền, đường thẳng và góc, điều chỉnh elip, lấy mẫu và những biến đổi khác nhau (Fourier rời rạc, cosin rời rạc và các biến
đổi khoảng cách,…)
Trang 29- Modul thị giác máy ở cấp độ cao: OpenCV gồm một vài tác dụng ở cấp độ cao
Ngoài việc dò tìm, nhận dạng và theo dõi khuôn mặt, nó còn bao gồm cả luồng thị giác (sử dụng camera di động để xác định cấu trúc 3D), định kích cỡ camera và âm thanh
nổi
- AI and machine-learning: Các ứng dụng của thị giác máy thường yêu cầu máy
móc phải học ( machine learning) hoặc các hình thức trí tuệ nhân tạo khác (AI) Một
vài trong số chúng là có sẵn trong gói OpenCV
- Lấy mẫu ảnh và phép biến đổi: Nó thường rất tốt cho quá trình xử lý một nhóm
phần tử ảnh như là một đơn vị OpenCV bao gồm lấy tách ra, lấy mẫu ngẫu nhiên,
phục chế, xoay ảnh, làm cong ảnh (warping), thay đổi hiệu ứng của ảnh
- Cách thức tạo và phân tích ảnh nhị phân: Ảnh nhị phân thường xuyên được
dùng trong các hệ thống kiểm tra có khuyết điểm hình dạng hoặc các bộ phận quan
trọng Sự biểu diễn ảnh cũng rất thuận tiện khi chúng ta biết rõ vật thể cần bắt
- Cách thức cho tính toán thông tin 3D (methods for computing 3D
information): Những hàm này rất có ích khi cần sắp xếp và xác định với một khối lập
thể (with a stereo rig) hoặc với không gian nhìn phức tạp (multiple views) từ một
camera riêng
- Các phép toán cho xử lý ảnh, thị giác máy và biểu diễn ảnh (image
interpretation): OpenCV sử dụng các phép toán phổ biến như: đại số tuyến tính, thống kê và tính toán hình học
- Đồ họa: Những giao diện này giúp ta viết chữ và vẽ trên hình ảnh Thêm vào đó
những chức năng này được sử dụng nhiều trong ghi nhãn và đánh dấu Ví dụ nếu bạn viết một chương trình cần nhận dạng nhiểu đối tượng thì nó sẽ rất có ích cho tạo nhãn
ảnh (label image) với kích thước và vị trí
- Phương thức GUI: OpenCV bao gồm cửa sổ giao diện của chính bản thân nó
Trong khi đó những giao diện này được so sánh giới hạn với khả năng có thể thực hiện trong mỗi môi trường Chúng cung cấp những môi trường API đa phương tiện và đơn giản để hiện thị hình ảnh, cho phép người dùng nhập dữ liệu thông qua chuột, bàn
phím và điều khiển quá trình
Trang 30- Cấu trúc dữ liệu và giải thuật: Với những giao diện này bạn có thể giữ lại, tìm
kiếm, lưu vào cách danh mục điều khiển, các tuyển tập (cũng như các tập hợp lệnh
được gọi), đồ họa và sơ đồ nhánh một cách hiệu quả
- Khả năng tồn tại lâu dài của dữ liệu ( Data persistence): Những phương pháp này cung cấp các giao diện một cách thuận lợi để lưu trữ các dạng khác nhau của dữ liệu vào đĩa để có thể khôi phục khi cần thiết
3.2 CẤU TRÚC CỦA OPENCV:
Hình 3.1 Cấu trúc cơ bản của thư viện OpenCV
- CXCORE bao gồm các dạng dữ liệu cơ bản rõ ràng Ví dụ cấu trúc dữ liệu về ảnh,
điểm, hình chữ nhật được xác định trong file cxtypes.h CXCORE chứa các phép toán đại số tuyến tính và thống kê, các hàm lưu trữ lâu dài (persistence fun…) và các lỗi thao tác Mặc dù vậy các hàm đồ họa phục vụ cho việc vẽ ảnh cũng được lưu trữ tại đây
- CV chứa đựng quá trình xử lý ảnh và các phương pháp đánh giá sơ bộ kích thước
ảnh Những hàm tính toán hình học cũng được lưu trữ tại đây
Trang 31- CVAUX được mô tả trong văn bản của OpenCV như là module cũ và chỉ dùng để
thí nghiệm Tuy nhiên, giao diện đơn giản nhất cho nhận dạng mặt được nằm trong module này Những mã nguồn nằm trong module này rất phù hợp cho việc nhận dạng mặt và chúng được sử dụng rộng rãi cho mục đích này
- Những hàm còn lại được nằm trong HighGUI và CVCAM Cả hai đều nẳm ở thư
mục có tên “otherlibs”, sử dụng chúng rất dễ gặp lỗi Vì rằng HighGUI chứa các thư viện vào ra cơ bản , nên để chắc ăn hơn, ta không nên bỏ sót nó CVCAM là thư viện chứa các hàm truy nhập video thông qua DirectX trên môi trường Window 32 bit HighGUI cũng có các giao diện video, chứa đựng nhiều cửa sổ đa chức năng, làm việc được trên nhiều môi trường và đặc biệt học OpenCV sẽ đơn giản hơn khi dùng
Tạo cửa sổ để hiển thị ảnh:
void cvNamedWindow ( const char*name, int flag=CV_WINDOW_AUTOSIZE ); Hàm này tạo ra một cửa sổ với tên “name” để hiển thị ảnh Khi
flag=CV_WINDOW_AUTOSIZE, hàm sẽ tạo ra cửa sổ bằng với kích thước của ảnh
và người sử dụng không thể định lại kích thước của cửa sổ Nếu flag=0, người sử dụng
có thể định lại kích thước của cửa sổ
Hiển thị ảnh:
void cvShowImage(const char* name, const CvArr* image);
Trang 32Hàm này dùng để xuất ảnh “image” ra cửa sổ người dùng được xác định bởi tên cửa sổ
“name” Hàm này chỉ được sử dụng trong môi trường hỗ trợ giao diện KDE
Xóa cấu trúc lấy ảnh từ camera hoặc video:
void cvReleaseCapture( CvCapture** capture );
3.3.2 Các hàm xử lý và phân tích ảnh:
Hàm lọc ảnh:
a void cvSmooth(const CvArr* src,CvArr* dst,int smoothtype=CV;
GAUSSIAN,int param1=3,int param2=0,double param3=0,double param4=0 );
b void cvMorphologyEx(const CvArr* src, CvArr* dst, CvArr* temp,
IplConvKernel* element, int operation, int iterations=1)
Trang 33
cvMorphologyEx(Anh_Loc_Nhieu_Median,Anhxuly,NULL,NULL,CV_MOP_CLOSE,1);
Hàm chuyển đổi màu:
void cvCvtColor( const CvArr* src, CvArr* dst, int code );
- src: ảnh nguồn 8 bit, 16 bit hay 32 bit;
- dst: ảnh đích có cùng dữ liệu như ảnh nguồn nhưng có thể khác số kênh màu;
Hàm này có tác dụng chuyển đổi hệ màu của ảnh gốc sang hệ màu khác hoặc sang ảnh xám
Hàm truy nhập giá trị màu của điểm ảnh:
CvScalar cvGet2D( const CvArr* arr, int row, int col );
- arr: con trỏ chứa dữ liệu ( CvArr*), dữ liệu có thể là hình ảnh có cấu trúc
IplImage;
- row, col: tọa độ của điểm ảnh cần truy cập
Hàm cvGet2D() trả về cấu trúc chứa thông tin màu sắc dạng C là CvScalar được xác định như sau:
typedef struct CvScalar
Với ảnh BGR thì blue = val[0], green = val[1] và red = val[2]
Hàm chỉnh sửa giá trị điểm ảnh:
void cvSet2D(CvArr*, int row, int col,CvScalar);
Trang 34- arr: con trỏ chứa dữ liệu ( CvArr*), dữ liệu có thể là hình ảnh có cấu trúc
IplImage;
- row, col: tọa độ của điểm ảnh;
2 hàm trên cvGet2D và cvSet2D áp dụng khi đã xác định được tọa độ của biển số trên khung hình bằng phương pháp Adaboost (phần bao bởi viền đỏ) và cắt lấy khung hình chứa biển số Phục vụ cho các thao tác chỉnh sửa tiếp đó
Hình 3.3: Hàm truy nhập và chỉnh sửa giá trị điểm ảnh
- CvScalar: giá trị màu sắc
Hàm này cho phép ta gán giá trị màu cho điểm ảnh đang xét tại tọa độ (row, col)
3.3.3 Biên của ảnh và các hàm xử lý:
Hàm tách sườn ảnh theo Canny
void cvCanny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3)
- image: ảnh ngõ vào
- edges: ảnh ngõ ra
- threshold1: ngưỡng đầu tiên
- threshold2: ngưỡng thứ 2
Trang 35Phương pháp Canny rất hiệu quả với ảnh trong điều kiện thông thường về độ sáng
và độ tương phản Tuy nhiên về bản chất phương pháp này dựa trên nguyên tắc đạo hàm nên biên nhận được không phải lúc nào cũng ổn định
Đây là một phương pháp có hiệu quả cao với ảnh có nhiễu
Hình 3.4: Phương pháp Canny với ngưỡng 100 và 500
- method: các thuật toán houghline như CV_HOUGH_STANDARD,
CV_HOUGH_PROBABILISTIC, hay CV_HOUGH_MULTI_SCALE
- rho,theta: độ phân giải mong muốn cho các đường
- threshold: ngưỡng mong muốn
Thuật toán HoughLine dùng để phát hiện ra các đường thẳng trong ảnh, áp dụng trong luận văn sinh viên dùng các đường thẳng này để tính góc lệch của biển số
Trang 36Hình 3.5: Dò biên houghline
Đoạn code sử dụng trong luận văn để dò biên theo phương pháp houghline
lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
double x2,y2;
for( i = 0; i < lines->total; i++ ) {
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
if (i==0) {
Trang 37biên ảnh và biên của biển số ( dùng phương pháp houghline ) Có hai cách để thực hiện
việc xoay này là ánh xạ xuôi (forward mapping) và ánh xạ ngược (reverse
mapping) Forward mapping sẽ làm cho ảnh có lỗ Với reverse mapping, ảnh mượt hơn
nhưng các mép vẫn không được mềm lắm
Forward mapping
Trong forward mapping, từ mỗi điểm của ảnh gốc, xác định một điểm của ảnh kết quả
Do phải làm tròn số khi thực hiện phép xoay nên ở ảnh gốc, có những pixel không được "tô màu" làm cho trên ảnh xuất hiện những "lỗ" li ti
Hình 3.7: Minh họa thuật toán xoay điểm
Với reverse mapping, từ mỗi điểm của ảnh kết quả, suy ngược lại từ ảnh gốc để lấy
ra giá trị màu cần thiết Với cách này, tất cả các điểm trên ảnh kết quả đều được gán giá trị màu của một điểm tương ứng (hay ít nhất cũng là điểm lân cận của điểm đó) ở ảnh gốc nên không có hiện tượng "lỗ" như ở trên
Ta tìm ma trận xoay ảnh trong trường hợp này như sau:
Trang 38|y| |-sin(a) cos(a)| |y'|
Trong luận văn sinh viên sử dụng phương pháp reverse mapping do cho kết quả
for (int i = -120; i < img->width*2; i++)
for (int j = 0; j < img->height*2; j++)
int jN = (int)(j*cos(ALPHA) - i*sin(ALPHA));
if ((iN > 0) && (jN > 0)
Trang 39&& (iN < img->width) && (jN < img->height))
resData[(j)*res->widthStep + (i+120)*res->nChannels + k] = imgData[jN*img->widthStep + iN*img->nChannels + k];
- img: Đưa bức ảnh cần vẽ vào
- pts: Là một mảng kiểu cvPoint nên cùng một lần gọi ta có thể vẽ được nhiều đa giác
- npts: Là một mảng dùng để chứa số đỉnh của các đa giác được vẽ Cùng một lần vẽ
ta có thể vẽ được nhiều đa giác có số đỉnh khác nhau
- is_closed: Nếu nó bằng true thì sẽ thêm một đoạn nối điểm đầu với điểm cuối lại với nhau
- contours: Số đường viền quanh đa giác
Hình 3.9: Nhận diện hình chữ nhật bằng hàm cvPolyLine
Trang 40Sau khi tính được tọa độ của 4 đỉnh hình chữ nhật (được bao bởi viền đỏ) và cắt phần ảnh đó riêng ra sẽ được phần biển số ở dạng chuẩn
Hình 3.10: Biển số sau khi được tách riêng
Sau đó sinh viên sẽ tách từng ký tự, số và nhận dạng bằng mạng neural Chi tiết sẽ được trình bày ở các chương sau