MỞ ĐẦU 1. Lý do chọn đề tài Ngày nay cùng với sự phát triển khoa học kỹ thuật, nhu cầu đi lại của con người ngày càng tăng, lưu lượng giao thông ngày càng lớn. Với số lượng phương tiện giao thông ngày càng lớn và còn không ngừng tăng thì việc quản lý các phương tiện giao thông gặp rất nhiều khó khăn do đó cần có một hệ thống tự động. Trên thế giới cùng với sự tăng trưởng kinh tế là sự phát triển vượt bậc của các ngành khoa học kỹ thuật nói chung và ngành công nghiệp sản xuất các phương tiện giao thông nói riêng. Sự phát triển ấy được thể hiện rõ nhất khi số lượng các phương tiện giao thông trên thế giới ngày một tăng cao. Điều đó gây ra một áp lực rất lớn đối các cấp quản lý, các cơ quan, đơn vị, những người làm công tác quản lý, giám sát, xử lý vi phạm giao thông. Và đây cũng là một trong những vấn nạn ở Việt Nam, khi mà công tác quản lý phương tiện giao thông nói chung, quản lý ô tô, xe máy nói riêng, cũng như công tác phát hiện, xử phạt các hành vi vi phạm giao thông, chống trộm v.v… sẽ tốn rất nhiều thời gian và công sức. Để nâng cao chất lượng quản lý, đồng thời giảm số lượng nhân viên quản lý trong việc giám sát, việc ứng dụng công nghệ thông tin nhằm xây dựng hệ thống giám sát tự động đối với các phương triện giao thông (cụ thể giám sát biển số xe) đã được áp dụng triệt để. Một số ứng dụng nhận dạng đã được xây dựng và áp dụng. Tất cả đều có ưu điểm nhận dạng nhanh, lưu hình ảnh dưới dạng mã Code trong cơ sở dữ liệu để đối chiếu so sánh mẫu, ví dụ như hệ thống nhận dạng biển số xe ở các siêu thị, công viên… Tuy nhiên, phần lớn các ứng dụng vẫn chưa ứng dụng kỹ thuật xử lý ảnh vào nhận dạng ký tự để có kết quả tốt nhất trong trường hợp hình ảnh không được rõ. Xuất phát từ nhận định trên tôi đã chọn đề tài “Nghiên cứu xây dựng phần mềm nhận dạng xử lý ảnh ứng dụng nhận dạng biển số xe” với mục đích xây dựng phần mềm nhận dạng xử lý ảnh. Phần mềm có khả năng nhận dạng các ký tự từ đó ứng dụng nhận dạng biển số xe phục vụ công tác giám sát, quản lý, xử lý các phương tiện giao thông. 2. Mục đích nghiên cứu của đề tài Xây dựng ứng dụng xử lý ảnh ứng dụng nhận dạng biển số xe tự động, hỗ trợ trong công tác quản lý, kiểm soát, xử lý vi phạm của các phương tiện giao thông. Ứng dụng 6 được xây dựng có giao diện thân thiện, dễ sử dụng có thể nhận dạng ký từ hình ảnh: chữ màu, draw text, các ngôn ngữ khác nhau, trên cơ sở đó có thể nhận dạng các biển số xe. Phần mềm ứng dụng được viết trên môi trường ngôn ngữ C, cùng việc sử dụng thư viện tích hợp OpenCV cho quá trình nhận dạng và xử lý ảnh. 3. Nhiệm vụ nghiên cứu đề tài Tìm hiểu bài toán nhận dạng, bài toán xử lý ảnh áp dụng vào ứng dụng nhận dạng biển số xe. Tìm hiểu các kỹ thuật lập trình và ứng dụng thư viên OpenCV trong việc giải quyết bài toán nhận dạng xử lý ảnh. Xây dựng phần mêm nhận dạng xử lý ảnh ứng dụng nhận dạng biển số xe.
Trang 1LỜI CẢM ƠN
Tôi xin chân thành cảm ơn quý thầy cô giáo trong khoa Công Nghệ Thông Tin
đã giảng dạy, quan tâm và tạo điều kiện thuận lợi nhất để tôi học tập và rèn luyện trong suốt thời gian theo học tại trường
Đặc biệt tôi xin bày tỏ lòng biết ơn sâu sắc nhất đến thầy giáo TS Phùng Thế Bảo đã tận tình hướng dẫn, giúp đỡ tôi trong quá trình học tập và đặc biệt là trong suốt
thời gian làm đồ án tốt nghiệp Thầy luôn quan tâm và rất nhiệt tình hướng dẫn tôi từ việc tìm tài liệu cho đến việc định hướng lựa chọn giải pháp để triển khai đồ án Thầy cũng luôn nhắc nhở, động viên tôi mỗi khi gặp khó khăn, nhờ vậy mà tôi đã hoàn thành tốt đồ án tốt nghiệp của mình đúng thời hạn
Tôi cũng xin gửi lời cảm ơn tới gia đình, bạn bè, những người đã động viên, giúp đỡ tôi rất nhiều trong thời gian học tập và làm đồ án tốt nghiệp
Mặc dù tôi đã hết sức cố gắng để hoàn thiện báo cáo tốt nghiệp song do khả năng còn hạn chế nên bài báo cáo vẫn còn nhiều thiếu sót Vì vậy tôi rất mong được sự góp ý quý báo của các thầy cô và bạn bè
Một lần nữa tôi xin chân thành cảm ơn!
Trang 2LỜI CAM ĐOAN
Tôi xin cam đoan đồ án tốt nghiệp là công trình nghiên cứu riêng của tôi Các tài liệu trích dẫn trong đồ án có nguồn gốc rõ ràng, tuân thủ đúng nguyên tắc trình bày Kết quả thu được trong quá trình nghiên cứu đồ án là trung thực và chưa từng công bố trước đây
Tôi xin hoàn toàn chịu trách nhiệm trước nhà trường về lời cam đoan này
TP Hồ Chí Minh, tháng 10 năm 2021
Sinh viên thực hiện
Trần Thị Ngọc Châu
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỞ ĐẦU 5
1 Lý do chọn đề tài 5
2 Mục đích nghiên cứu của đề tài 5
3 Nhiệm vụ nghiên cứu đề tài 6
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 7
1.1 Xử lý ảnh 7
1.1.1 Xử lý ảnh số là gì ? 7
1.1.2 Nguồn gốc của xử lý ảnh số 7
1.1.3 Các ứng dụng của xử lý ảnh số 7
1.1.4 Các bước cơ bản trong xử lý ảnh số 8
1.2 Thư viện OpenCV 13
1.2.1 Giới thiệu chung về OpenCV: 13
1.2.2 Ứng dụng OpenCV trong nhận dạng xử lý ảnh: 17
1.3 Bài toán nhận dạng biển số xe 38
1.3.1 Khái niệm 38
1.3.2 Ứng dụng 40
1.3.3 Một số hướng giải quyết bài toán nhận dạng biển số xe 40
Tóm tắt chương 1 : 47
CHƯƠNG 2: NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG XỬ LÝ ẢNH 48
2.1 Mô tả ứng dụng 48
2.2 Quá trình xử lý nhận dạng ảnh của ứng dụng 48
2.3 Cài đặt ứng dụng: 50
2.3.1 Giao diện phần mềm: 50
2.3.2 Nhận dạng biển số xe: 50
Tóm tắt chương 2: 55
KẾT LUẬN 56
TÀI LIỆU THAM KHẢO 57
PHỤ LỤC 58
Phụ lục 1: Danh mục các hình vẽ 58
Trang 4Phụ lục 2: Hướng dẫn cấu hình OpenCV 60 Phụ lục 3: Hướng dẫn cài đặt DevExpress: 60 Phụ lục 4: Đoạn mã chương trình 64
Trang 5MỞ ĐẦU
1 Lý do chọn đề tài
Ngày nay cùng với sự phát triển khoa học kỹ thuật, nhu cầu đi lại của con người ngày càng tăng, lưu lượng giao thông ngày càng lớn Với số lượng phương tiện giao thông ngày càng lớn và còn không ngừng tăng thì việc quản lý các phương tiện giao thông gặp rất nhiều khó khăn do đó cần có một hệ thống tự động
Trên thế giới cùng với sự tăng trưởng kinh tế là sự phát triển vượt bậc của các ngành khoa học kỹ thuật nói chung và ngành công nghiệp sản xuất các phương tiện giao thông nói riêng Sự phát triển ấy được thể hiện rõ nhất khi số lượng các phương tiện giao thông trên thế giới ngày một tăng cao Điều đó gây ra một áp lực rất lớn đối các cấp quản lý, các cơ quan, đơn vị, những người làm công tác quản lý, giám sát, xử
lý vi phạm giao thông
Và đây cũng là một trong những vấn nạn ở Việt Nam, khi mà công tác quản lý phương tiện giao thông nói chung, quản lý ô tô, xe máy nói riêng, cũng như công tác phát hiện, xử phạt các hành vi vi phạm giao thông, chống trộm v.v… sẽ tốn rất nhiều thời gian và công sức
Để nâng cao chất lượng quản lý, đồng thời giảm số lượng nhân viên quản lý trong việc giám sát, việc ứng dụng công nghệ thông tin nhằm xây dựng hệ thống giám sát tự động đối với các phương triện giao thông (cụ thể giám sát biển số xe) đã được áp dụng triệt để Một số ứng dụng nhận dạng đã được xây dựng và áp dụng Tất cả đều có
ưu điểm nhận dạng nhanh, lưu hình ảnh dưới dạng mã Code trong cơ sở dữ liệu để đối chiếu so sánh mẫu, ví dụ như hệ thống nhận dạng biển số xe ở các siêu thị, công viên… Tuy nhiên, phần lớn các ứng dụng vẫn chưa ứng dụng kỹ thuật xử lý ảnh vào nhận dạng ký tự để có kết quả tốt nhất trong trường hợp hình ảnh không được rõ
Xuất phát từ nhận định trên tôi đã chọn đề tài “Nghiên cứu xây dựng phần mềm nhận dạng xử lý ảnh ứng dụng nhận dạng biển số xe” với mục đích xây dựng phần mềm nhận dạng xử lý ảnh Phần mềm có khả năng nhận dạng các ký tự từ đó ứng dụng nhận dạng biển số xe phục vụ công tác giám sát, quản lý, xử lý các phương tiện giao thông
2 Mục đích nghiên cứu của đề tài
Xây dựng ứng dụng xử lý ảnh ứng dụng nhận dạng biển số xe tự động, hỗ trợ trong công tác quản lý, kiểm soát, xử lý vi phạm của các phương tiện giao thông Ứng dụng
Trang 6được xây dựng có giao diện thân thiện, dễ sử dụng có thể nhận dạng ký từ hình ảnh: chữ màu, draw text, các ngôn ngữ khác nhau, trên cơ sở đó có thể nhận dạng các biển
số xe Phần mềm ứng dụng được viết trên môi trường ngôn ngữ C#, cùng việc sử dụng thư viện tích hợp OpenCV cho quá trình nhận dạng và xử lý ảnh
3 Nhiệm vụ nghiên cứu đề tài
- Tìm hiểu bài toán nhận dạng, bài toán xử lý ảnh áp dụng vào ứng dụng nhận dạng biển số xe
- Tìm hiểu các kỹ thuật lập trình và ứng dụng thư viên OpenCV trong việc giải quyết bài toán nhận dạng xử lý ảnh
- Xây dựng phần mêm nhận dạng xử lý ảnh ứng dụng nhận dạng biển số xe
Trang 7NỘI DUNG CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Xử lý ảnh
1.1.1 Xử lý ảnh số là gì ?
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ Nó là một ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng cho nó
Xử lý ảnh được đưa vào giảng dạy ở bậc đại học ở nước ta khoảng chục năm nay Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều kiến thức cơ
sở khác Đầu tiên phải kể đến Xử lý tín hiệu số là một môn học hết sức cơ bản cho
xử lý tín hiệu chung, các khái niệm về tích chập, các biến đổi Fourier, biến đổi Laplace, các bộ lọc hữu hạn… Thứ hai, các công cụ toán như Đại số tuyến tính, xác suấ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
1.1.2 Nguồn gốc của xử lý ảnh số
Ứ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
1.1.3 Các ứng dụng của xử lý ảnh số
a Biến đổi ảnh (Image Transform)
Trong xử lý ảnh do số điểm ảnh lớn các tính toán nhiều (độ phức tạp tính toán cao) đòi hỏi dung lượng bộ nhớ lớn, thời gian tính toán lâu Các phương pháp khoa học kinh điển áp dụng cho xử lý ảnh hầu hết khó khả thi Người ta sử
Trang 8dụng các phép toán tương đương hoặc biến đổi sang miền xử lý khác để dễ tính toán Sau khi xử lý dễ dàng hơn được thực hiện, dùng biến đổi ngược để đưa về miền xác định ban đầu, các biến đổi thường gặp trong xử lý ảnh gồm:
- Biến đổi Fourier, Cosin, Sin
- Biến đổi (mô tả) ảnh bằng tích chập, tích Kronecker (theo xử lý số tín
hiệu)
- Các biến đổi khác như KL (Karhumen Loeve), Hadamard
Một số các công cụ xác xuất thống kê cũng được sử dụng trong xử lý ảnh
b Nén ảnh
Ảnh dù ở dạng nào vẫn chiếm không gian nhớ rất lớn Khi mô tả ảnh người
ta đã đưa kỹ thuật nén ảnh vào Các giai đoạn nén ảnh có thể chia ra thế hệ 1, thế
hệ 2 Hiện nay, các chuẩn MPEG được dùng với ảnh đang phát huy hiệu quả
1.1.4 Các bước cơ bản trong xử lý ảnh số
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
Để 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 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 Hình 1.1 dưới đây mô tả các bước cơ bản trong xử lý ảnh
Hình 1 1 Các bước cơ bản trong xử lý ảnh
Trang 9Sơ đồ này bao gồm các thành phần sau:
a Phần thu nhận ảnh (Image Acquisition)
Ảnh có thể nhận qua camera màu hoặc đen trắng Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh
25 dòng), cũng có loại camera đã số hoá (như loại CCD – Change Coupled Device) là loại photodiot tạo cường độ sáng tại mỗi điểm ảnh
Camera thường dùng là loại quét dòng, ảnh tạo ra có dạng hai chiều Chất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, vào môi trường (ánh sáng, phong cảnh)
b Tiền xử lý (Image Processing)
Sau bộ thu nhận, ảnh có thể nhiễu độ tương phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ hơn, nét hơn
c Phân đoạn (Segmentation) hay phân vùng ảnh
Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để biểu diễn phân tích, nhận dạng ảnh Ví dụ: để nhận dạng chữ (hoặc mã vạch) trên phong
bì thư cho mục đích phân loại bưu phẩm, cần chia các câu, chữ về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các vạch) riêng biệt để nhận dạng Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính xác của ảnh Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này
d Biểu diễn ảnh (Image Representation)
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lận cận Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính Việc chọn
các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature election) gắn
với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ
sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác
e Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định ảnh Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước Nội suy là phán
Trang 10đoán theo ý nghĩa trên cơ sở nhận dạng Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã điện thoại Có nhiều cách phân loại ảnh khác nhau về ảnh Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản:
- Nhận dạng theo tham số
- Nhận dạng theo cấu trúc
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người…
f Cơ sở tri thức (Knowledge Base)
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người Vì vậy, ở đây các
cơ sở tri thức được phát huy
g Mô tả (biểu diễn ảnh)
Từ Hình 1.1, ảnh sau khi số hoá sẽ được lưu vào bộ nhớ, hoặc chuyển sang các khâu tiếp theo để phân tích Nếu lưu trữ ảnh trực tiếp từ các ảnh thô, đòi hỏi dung lượng bộ nhớ cực lớn và không hiệu quả theo quan điểm ứng dụng và công nghệ Thông thường, các ảnh thô đó được đặc tả (biểu diễn) lại (hay đơn
giản là mã hoá) theo các đặc điểm của ảnh được gọi là các đặc trưng ảnh (Image Features) như: biên ảnh (Boundary), vùng ảnh (Region) Một số phương pháp biểu
diễn thường dùng:
• Biểu diễn bằng mã chạy (Run-Length Code)
• Biểu diễn bằng mã xích (Chaine -Code)
• Biểu diễn bằng mã tứ phân (Quad-Tree Code)
Biểu diễn bằng mã chạy
Phương pháp này thường biểu diễn cho vùng ảnh và áp dụng cho ảnh nhị phân Một vùng ảnh R có thể mã hoá đơn giản nhờ một ma trận nhị phân:
Trang 11- U(m, n) = 1 nếu (m, n) thuộc R
- U(m, n) = 0 nếu (m, n) không thuộc R
Trong đó: U(m, n) là hàm mô tả mức xám ảnh tại tọa độ (m, n) Với cách biểu diễn trên, một vùng ảnh được mô tả bằng một tập các chuỗi số 0 hoặc 1 Giả
sử chúng ta mô tả ảnh nhị phân của một vùng ảnh được thể hiện theo toạ độ (x, y) theo các chiều và đặc tả chỉ đối với giá trị “1” khi đó dạng mô tả có thể là: (x, y)r; trong đó (x, y) là toạ độ, r là số lượng các bit có giá trị “1” liên tục theo chiều ngang
hoặc dọc
Biểu diễn bằng mã xích
Phương pháp này thường dùng để biểu diễn đường biên ảnh Một đường bất
kỳ được chia thành các đoạn nhỏ Nối các điểm chia, ta có các đoạn thẳng kế tiếp được gán hướng cho đoạn thẳng đó tạo thành một dây xích gồm các đoạn Các hướng có thể chọn 4, 8, 12, 24,… Mỗi hướng được mã hoá theo số thập phân hoặc
số nhị phân thành mã của hướng
Biểu diễn bằng mã tứ phân
Phương pháp mã tứ phân được dùng để mã hoá cho vùng ảnh Vùng ảnh đầu tiên được chia làm bốn phần thường là bằng nhau Nếu mỗi vùng đã đồng nhất (chứa toàn điểm đen (1) hay trắng (0)), thì gán cho vùng đó một mã và không chia tiếp Các vùng không đồng nhất được chia tiếp làm bốn phần theo thủ tục trên cho đến khi tất cả các vùng đều đồng nhất Các mã phân chia thành các vùng con tạo thành một cây phân chia các vùng đồng nhất
Hình 1 2 Sơ đồ phân tích và xử lý ảnh và lưu đồ thông tin giữa các khối
Trang 12Trên đây là các thành phần cơ bản trong các khâu xử lý ảnh Trong thực tế, các quá trình sử dụng ảnh số không nhất thiết phải qua hết các khâu đó tùy theo đặc điểm ứng dụng Hình 1.2 cho sơ đồ phân tích và xử lý ảnh và lưu đồ thông tin giữa các khối một cách đầu đủ Ảnh sau khi được số hóa được nén, lưu lại để truyền cho các hệ thông khác sử dụng hoặc để xử lý tiếp theo Mặt khác, ảnh sau khi số hóa có thể bỏ qua công đoạn nâng cao chất lượng (khi ảnh đủ chất lượng theo một yêu cầu nào đó) để chuyển tới khâu phân đoạn hoặc bỏ tiếp khâu phân đoạn chuyển trực tiếp tới khâu trích chọn đặc trưng Hình 1.2 cũng chia các nhánh song song như: nâng cao chất lượng ảnh có hai nhánh phân biệt: nâng cao chất lượng ảnh (tăng độ sáng,
độ tương phản, lọc nhiễu) hoặc khôi phục ảnh (hồi phục ảnh thật khi ảnh nhận được
bị méo) v.v…
1.1.5 Các thành phần của một hệ thống xử lý ảnh
Theo quan điểm của quy trình xử lý, chúng ta đã thể hiện các khối cơ bản trên Hình 1.1, các khối chi tiết và luồng thông tin trên Hình 1.2 Theo quan điểm của hệ thống xử lý trên máy tính số, hệ thống gồm các đầu đo (thu nhận ảnh); bộ
số hóa; máy tính số; bộ hiển thị; bộ nhớ
Một hệ thống xử lý ảnh cơ bản có thể gồm: máy tính cá nhân kèm theo vỉ mạch chuyển đổi đồ hoạ VGA hoặc SVGA, đĩa chứa các ảnh dùng để kiểm tra các thuật toán và một màn hình có hỗ trợ VGA hoặc SVGA Nếu điều kiện cho phép,
nên có một hệ thống như Hình 1.4 bao gồm một máy tính PC kèm theo thiết bị
xử lý ảnh Nối với cổng vào của thiết bị thu nhận ảnh là một video camera, và cổng
Hình 1 3 Các thành phần chính của hệ thống xử lý
Trang 13đưa ra trên ảnh mức xám (ảnh đen trắng) Bởi vậy, hệ thống sẽ bao gồm một thiết
bị xử lý ảnh đen trắng và một màn hình đen trắng
Ảnh mức xám được áp dụng trong nhiều lĩnh vực như sinh vật học hoặc trong công nghiệp Thực tế chỉ ra rằng bất kỳ ứng dụng nào trên ảnh, mức xám cũng ứng dụng được trên ảnh màu Với lý do đó, hệ thống ban đầu nên chỉ bao gồm các thiết bị thu nhận và hiển thị ảnh đen trắng Với ảnh màu, nên sử dụng một
hệ thống mới như Hình 1.3, trừ trường hợp bạn cần một camera TV màu và một
màn hình đa tần số (ví dụ như NEC MultiSync, Sony Multiscan, hoặc Mitsubishi Diamond Scan) để hiển thị ảnh màu Nếu khả năng hạn chế, có thể dùng PC kèm theo vỉ mạch VGA và màn hình VGA, để dựng ảnh được
Hình 1 4 Ví dụ một hệ thống xử lý ảnh.
1.2 Thư viện OpenCV
1.2.1 Giới thiệu chung về OpenCV
OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở chức năng lập trình cho ngành thị giác máy tính OpenCV được phát hành theo BSD license và nó là miễn phí cho cả hai học thuật và thương mại OpenCV được dùng với các ngôn ngữ C++, C, Python và Java(Android) và hỗ trợ các hệ điều hành Windows, Liniux, Android và Mac OS Trong thư viện OpenCV có hơn 500 hàm và
2500 các thuật toán tối ưu về xử lý ảnh và các vấn đề liên quan đến thị giác máy Việc sử dụng thư viện OpenCV tuân theo các quy định về sử dụng phần mềm mã nguồn mở BSD do đó có thể sử dụng thư viện này miễn phí
Trang 14Thư viện OpenCV có nhiều ưu điểm:
• Là công cụ chuyên dụng được thiết kế theo hướng tối ưu hóa các ứng dụng xử lý
• Truy xuất ảnh và phim: đọc ảnh từ camera, file, ghi ảnh và phim
• Cấu trúc dữ liệu ảnh số hóa và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu và cây
• Xử lý ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng to thu nhỏ và hiệu chỉnh histograms
• Xử lý cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, …
• Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân thích chuyển động
• Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh thông số
• Chức năng vẽ và chú thích lên ảnh
- Cài đặt OpenCV
• Tải về và cài đặt
Bước 1: Download OpenCV từ trang chủ về: https://opencv.org/releases.html
Bước 2: Sau khi download xong, chạy file này như file cài đặt thông thường, chọn đường dẫn mà OpenCV sẽ được giải nén ra
Bước 3: Mở visual studio tạo Empty project mới-> thêm file C++ vào project
vừa tạo -> Click chuột vào project và chọn Property để mở cửa sổ Project Property
Bước 4: Chọn mục C/C++->General Ở dòng Additional Include Directories, thêm vào đường dẫn đến thư mục build\include của thư mục OpenCV đã giải nén ở
bước trên -> Chọn Apply
Trang 15Hình 1 5 Chọn phiên bản Visual cài đặt OpenCV
Chuyển sang mục Linker->General Ở dòng Additional Library Directories, thêm vào đường dẫn đến thư mục build\x64\vc15\lib (thư mục chứa các file lib) -> Chọn Apply như hình sau:
Bước 5: Chuyển sang mục Linker->Input Ở dòng Additional Dependencies, thêm
vào tên file opencv_world342d.lib (vì đang build ở chế độ Debug) Nếu build ở chế
độ Release thì tên file là opencv_world342.lib 2 file này có thể được tìm thấy trong thư mục build\x64 \bin Bấm vào Apply
Bước 6: Cuối cùng bấm vào OK
Sao chép file opencv_word341d/dll ( hay opencv_word341.dll nếu đang build Release) trong thư mục build\x64….\bin vào trong Project
- EmguCv
• Giới thiệu EmguCV:
- Là một viên bản mới nhất của Open CV, được xem như vỏ bọc của OpenCV, là một cross flatform NET, một thư viện xử lý hình ảnh mạnh dành riêng cho ngôn ngữ C# Cho phép gọi được chức năng của OpenCV là từ NET
- Tương thích ngôn ngữ C#, VB, VC++, Iron Python…
- Wrapper có thể được biên dịch bởi Visual Studio, Xamarin Studio và Unity
- Nó có thể chạy trên Windows, Linux, Mac OS X, IOS, Android và Windows Phone
• Tính năng của EmguCV:
- EmguCV được viết bằng C# Có thể chạy trên bất kỳ nền tảng hổ trợ bao gồm
Trang 16IOS, Android, Windows Phone, Hệ điều hành Mac OS X và Linux
- EmguCV có thể được sử dụng từ nhiều ngôn ngữ khác nhau, bao gồm C#, VB.NET, C++ và Iron Python
- Nhận dạng ảnh: nhận dạng khuôn mặt, các vật thể…
- Xử lý ảnh: khử nhiễu, điều chỉnh độ sáng…
- Nhận dạng cử chỉ
- Hổ trợ tài liệu XML và intellisense
- Sự lựa chọn để sử dụng hình ảnh lớp hoặc trực tiếp gọi chức năng từ OpenCV
• Cài đặt EmguCV
Emgu CV là một gói bao bên ngoài (wrapper) thư viện xử lí ảnh OpenCV của Intel, cho phép lập trình viên có thể gọi các hàm của OpenCV từ trong các ngôn ngữ NET C#, VB, VC++, IronPython… Gói này có thể được biên dịch trong Mono và chạy trên Linux/Mac OS X
✓ Cài đặt: Tải phiên bản EmguCV mới nhất tại đây:
✓ Khai báo các tham chiếu: Trong Solution Explorer, click phải lên tên project => Add reference… => chọn tab Browse => duyệt đến thư mục {Emgu folder}\bin => chọn 3 file Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll => OK
✓ Khai báo trong code
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
Trang 17Hình 1 6 (a) ngưỡng 40, (b) ngưỡng 121
✓ Vào thư mục {Emgu folder}\bin\x86, chép các file sau
cudart32_XXX.dll npp32_XXX.dll opencv_coreXXX.dll opencv_imgprocXXX.dll (XXX là số hiệu phiên bản)
✓ Vào thư mục của project {project folder}\bin\Debug
1.2.2 Ứng dụng OpenCV trong nhận dạng xử lý ảnh:
a Xử lý nhị phân
Mức xám là giá trị có thể có của điểm ảnh Với những ảnh đa cấp xám các thông tin đã sẵn ở dạng nhị phân chẳng hạn như các chuỗi văn bản hay các đối tượng ảnh, thì phương pháp nhị phân thông thường sẽ được thực hiện trước Mục đích của phương pháp này sẽ tự động chọn một ngưỡng cần thiết để tách ảnh ra làm hai phần: thông tin ảnh và thông tin nền Việc chọn ngưỡng tốt (ngưỡng mà có thể tách ảnh thành hai phần: phần ảnh, phần nền một cách chính xác) luôn là một quá trình khó và dễ gây ra lỗi
(a) (b)
Kết quả này sẽ gặp khó khăn khi độ tương phản giữa nền và các giá trị điểm ảnh là thấp (chẳng hạn như xe màu xám nền mầu trắng), nét của văn bản mỏng hoặc
dữ liệu không được chiếu sáng tốt
Để thực hiện việc tách ngưỡng này thì OpenCV cung cấp chức năng threshold
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
- src_gray: hình ảnh đầu vào
- dst: hình ảnh đầu ra
- threshold_value: giá trị thực hiện tách ngưỡng
- max_BINARY_value: giá trị thực hiện tách ngưỡng nhị phân
Trang 18Hình 1 7 Ngưỡng Threshold Binary trong OpenCV
Hình 1 8 Ngưỡng Threshold Binary, inverted trong OpenCV
- threshold_type: một trong 5 ngưỡng hoạt động
Năm ngưỡng hoạt động OpenCV cung cấp 5 ngưỡng hoạt động:
- Threshold Binary:
Nếu giá trị các điểm ảnh cao hơn giá trị ngưỡng thì được thiết lập giá trị mới
là giá trị cao nhất (255), thấp hơn giá trị các điểm ảnh về mức 0
- Threshold binaru, inverted:
Ngược với Threshold Binary
Giá trị các điểm ảnh cao hơn giá trị ngưỡng sẽ được giữ lại còn các điểm ảnh
có giá trị thấp hơn giá trị ngưỡng sẽ đưa về giá trị 0
Trang 19Hình 1 10 Ngưỡng Threshold to Zero trong OpenCV
Hình 1 11 Ngưỡng Threshold to Zero, inverted trong OpenCV
-Threshold to Zero, inverted :
Ngược lại với Threshold to Zero
b Giảm nhiễu
Nhiễu trong ảnh là do nhiều nguyên nhân bao gồm: sự thoái hóa theo thời gian, quá trình sao chép Một số kỹ thuật xử lý ảnh sẽ được áp dụng để loại bỏ nhiễu Sau khi được nhị phân hóa, ảnh sẽ được lọc để giảm nhiễu Trên thực thế tồn tại nhiều loại nhiễu, tuy nhiên người ta thường xem xét 3 loại chính: nhiễu cộng, nhiễu nhân và nhiễu xung Chúng xuất hiện những điểm ảnh khác biệt so với vùng xung quanh
Bản chất của nhiễu là thường tương ứng với tần số cao và cơ sở lý thuyết của các bộ lọc là chỉ cho những tín hiệu có tần số nào đó thông qua, do đó để lọc nhiệu người ta thường sử dụng bộ lọc thông thấp hay trung bình 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ới nhiễu xung ta dùng lọc trung vị giả trung bị
Trong lọc trung bình, người ta ưu tiên cho các hướng để bảo vệ biên của ảnh khởi bị mờ khi làm trơn ảnh Các kiệu mặt nà được sử dụng tùy theo các các trường hợp khác nhau Các bộ lọc trên là bộ lọc tuyến tính theo nghĩa là điểm ở tâm cửa sổ
sẽ được thay bởi tổ hợp các điểm lân cận chập với mặt nạ Lọc thông thấp thường dùng để làm trơn nhiễu
Các bộ lọc phi tuyến cũng đượ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ị, bộ lọc giả trung vị Với bộ lọc trung vị các điểm ảnh sẽ được thay thế bởi trung vị các điệm ảnh, bộ lọc giả trung vị thì các điểm ảnh được thay thế bỏi trung bình cộng của giá trị “trung vi.”
Sau đây là một số bộ lọc thường dùng:
Trang 20- Bộ lọc hộp thông thường (Normalized Box filter)
Đây là bộ lọc đơn giản nhất Mỗi điểm đầu ra là trung bình của các điểm láng
giềng hạt nhân của mình (tất cả các điểm xung quanh đóng góp với trọng lượng
bằng nhau) OpenCv cung cấp các chức năng blur để thực hiện giảm nhiễu với bộ
- Bộ lọc gaussian (Gaussian Filter)
Đây là bộ lọc hữu ích nhất (mặc dù không phải là nhanh nhất)
Nó được thực hiện bởi chức năng GaussianBlur trong OpenCV
gaussianBlur(src,dst,size(i,i),0,0)
• src: hình ảnh nguồn
• dst: hình ảnh đầu ra
• size(w,h) kích thước của hạt nhân sẽ được sử dụng w và h phải là số lẻ và tích
cự nếu không kích thước sẽ được tính bằng cách sử dụng đối số σx và σy.
• σx độ lệch chuẩn trong x Viết 0 ngụ ý rằng độ lệch được tính bằng các sử dụng kích thước hạt nhân
• σy độ lệch chuẩn y
Trang 21Hình 1 13 Sử dụng bộ lọc Gaussian
- Bộ lọc Median (Median Filter):
Các bộ lọc trung bình chạy qua từng phần tử của tín hiệu và thay thế mỗi điểm ảnh với trung bình của các điểm ảnh lân cận nó
Bộ lọc này được cung cấp bởi các chức năng medianBlur trong thư viện OpenCV
medianBlur (src,dst,i);
▪ src: ảnh nguồn
▪ dst: ảnh đầu ra (có kích thước giống như src)
▪ i: kích thước của hạt nhân (i phải lẻ)
Hình 1 14 Sử dụng bộ lọc Median
- Bộ lọc song phương (Bilateral filter)
Hầu hết các bộ lọc có mục tiêu chính là làm mịn hình ảnh đầu vào Tuy nhiên các bộ lọc không chỉ giảm nhiễu mà còn làm mờ các cạnh Để tránh điếu này chúng
ta xử dụng bộ lọc song phương Và OpenCV cung cấp chức năng bilateralFilter
bilateralFilter(src,dst,i,i*2,i/2);
▪ src: ảnh nguồn
▪ dst: ảnh đầu ra
Trang 22Hình 1 16 Filter2D nhân thay đổi tăng dần từ trái qua phải
▪ d: đường kính của vùng lân cận điểm ảnh
▪ σcolor: độ lệch chuẩn trong không gian màu
▪ σSpace: độ lệch chuẩn trong khoảng tọa độ
Hình 1 15 Sử dụng bộ lọc song phương
- Filter2D
Ngoài những bộ lọc thông dụng như trên thì thư viện OpenCV còn cung cấp
bộ lọc mà chúng ta có thể thay đổi kích thước hạt nhân Đó là filter2D
Filter2D(src, dst, ddepth, kernel, anchor, delta, BORDER_DEFAULT)
▪ Src: ảnh nguồn
▪ Dst: ảnh đầu ra
▪ Ddepth: độ sâu của dst Giá trị -1 là chỉ ra độ sâu như nguồn
▪ Kernel: hạt nhân
▪ Anchor: vị trí liên quan đến hạt nhân của nó
▪ Delta: giá trị được thêm vào mỗi điểm ảnh Mặc định bằng 0
▪ BORDER_DEFAULT: giá trị mặc định
d Biên và các phương pháp tìm biên
- Khái niệm về biên:
Biên là một vấn đề chủ yếu trong phân tích ảnh vì kỹ thuật phân đoạn chủ yếu dựa vào biên Một điểm ảnh có thể coi là điểm biên nếu có sự thay đổi đột ngột và mức xám hay biên là điểm có cấp xám có giái trị khác hẳn các điểm xung quanh, tập
Trang 23hợp các điểm biên tạo thành biên hay đường bao của ảnh
Sau đây tôi sẽ giới thiệu một số phương pháp tìm biên mà thư viện OpenCV
Gradient trong gốc tọa độ (r,θ), với r là vector, θ là góc
'
max '
sin cos
x y
x
y
f tg
f f
Trang 24Toán tử Sobel được Duda và Hart đặt ra vào năm 1973 với các mặt nạ tương
tự như của Robert nhưng cấu hình khác như sau:
Trang 25+ Toán tử 4-lân cận (4-Neighbour Operator)
Toán tử 4-lân cận được Chaudhuri và Chandor (1984) nêu ra trong đó mặt nạ có kích thước 3x3 được thay thế cho mặt nạ 2x2 của toán tử Robert Mặt nạ 4-lân cận được cho như sau:
Theo hướng x Theo hướng y
• Nhận xét:
Toán tử Prewitt có thể tách sườn tốt hơn toán tử Sobel, trong khi đó toán tử Sobel tách các sườn chéo tốt hơn Mặt khác, các toán tử Robert và các toán tử 4-lân cận có nhược điểm là nhạy với nhiễu, Các toán tử Gradient và Sobel giảm nhiễu do tác dụng của lọc trung bình các điểm lân cận Như vậy, để đạt được kết quả mong muốn các toán tử Gradient thường được dùng trước để làm sạch nhiễu
Các mặt nạ của toán tử trên có kích thước 2x2 hoặc 3x3 chiều Các mặt nạ có
số chiều lớn hơn cũng được sử dụng Ví dụ trong kỹ thuật phát hiện biên người ta dùng mặt nạ 5x5 cho toán tử Sobel
Trong thư viện OpenCv có chức năng Sobel với mặt nạ:
Cho kết quả tốt hơn so với Sobel theo chức năng tiêu chuẩn
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;
// Gradient X
Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );
// Gradient Y
Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );
▪ Src_gray: hình ảnh đầu vào
▪ Grad_x/ grad_y: ảnh đầu ra
▪ Ddepth: độ sâu của hình ảnh đầu ra
Trang 26▪ X_order: thứ tự của các phát sinh theo hướng x
▪ Y_order: thứ tự của các phát sinh theo hướng y
Hình 1 17 Tìm biên bằng chức năng Sobel trong OpenCV
- Toán tử la bàn
Kirsh đã đề xuất mặt nạ 8 hướng như 8 hướng la bàn Hình 2.8 là mô hình 8 hướng và được đặt tên theo hướng địa lý và theo chiều kim đồng hồ: Đông, Đông-Nam, Nam, Tây-Nam, Tây, Tây-Bắc, Bắc, Đông-Bắc; mỗi hướng lệch nhau 45 độ
Hình 1 18 Mặt nạ 8 hướng theo Kirsh
Trang 27Ký hiệu Ai ; i= 1,2,….,8 là Gradient theo 8 hướng như 8 mặt nạ kể trên, khi đó biên
độ Gradient tại điểm (x,y) được tính theo
A(x,y) = Max(|gi(x,y)|) i= 1,2,….,8
Nếu lấy đạo hàm bậc hai của ảnh: ta có phương pháp Laplace hai phương pháp này gọi chung là phương pháp dò biên cục bộ
Trang 28- Laplace
Để khắc phục hạn chế và nhược điểm của phương pháp Gradient, trong đó sử dụng đạo hàm riêng bậc nhất người ta nghĩ đến việc sử dụng đạo hàm riêng bậc hai hay toán tử Laplace Phương pháp do biên theo toán tử Laplace hiệu quả hơn phương pháp toán tử Gradient trong trường hợp mức xám biến đổi chậm, miền chuyển đổi mức xám có độ trải rộng
- Toán tử Laplace được định nghĩa như sau:
Ghi chú: mặt nạ H1 còn cải biên bằng việc lấy giá trị ở tâm bằng 8 thay vì giá trị 4
Để thấy rõ việc xấp xỉ đạo hàm riêng bậc 2 trong không gian 2 chiều với mặt nạ H1làm ví dụ, ta có thể tính gần đúng như sau:
Phương pháp Laplace được hỗ trợ sẵn có trong thư viện OpenCV
Laplacian( src_gray,dst,ddepth,kernel_size,scale,delta, BORDER_DEFAULT);
▪ Src_gray: ảnh đầu vào
▪ Dst: ảnh đầu ra
▪ Ddepth: độ sâu của ảnh
Trang 29Hình 1 19 Tìm biên Laplace
▪ Kernel_size: kích thước hạt nhân
▪ Scale, delta and BORDER_DEFAULT: những giá trị mặc định
Kết quả : Hình 1.19
- Tách sườn ảnh theo Canny
Bộ tách sường ảnh theo Canny (1986) dựa trên cặp đạo hàm riêng bậc nhất
với việc làm sạch nhiễu Mục này được để riêng vì đây là phương pháp tách đường
biên khá phổ biến được biết đến như là phương pháp dò tối ưu, nó đáp ứng được ba
tiêu chí sau:
▪ Tỷ lệ lội thấp: phát hiện tốt các cạnh
▪ Phân vùng tốt: Khoảng cách giữa các điểm ảnh cạnh phát hiện và pixel thực tế phải được giảm nhiễu
▪ Đáp ứng tối thiểu: có cách dò cho mỗi cạnh
• Các bước làm theo Canny:
+ Giảm nhiễu:
Để thực hiện việc giảm nhiễu bộ lọc Gaussian được sử dụng Một hạt nhân Gaussian
có cỡ bằng 5 có thể được sử dụng dưới đây:
2 4 5 4 2
4 9 12 9 41
5 12 15 12 5159
+ Tìm gradient cường độ của hình ảnh
Điều này được thực hiện tương tự như Sobel
Áp dụng một cặp mặt nạ theo hướng x và y:
Trang 30 =
Hướng được làm tròn đến một trong bốn góc có thể (cụ thể là 0,45,90 hay 135)
+ Ức chế tối đa
Sử dụng để loại bỏ các điểm ảnh không được coi là một phần của một cạnh
+ Trễ
Ở đây Canny sử dụng hai ngưỡng cao và thấp
▪ Nếu một pixel cao hơn ngưỡng trên (cao), điểm ảnh được chấp nhận là một
cạnh
▪ Nếu một pixel thấp hơn ngưỡng thấp nó sẽ bị từ chối
▪ Nếu ở giữa hai ngưỡng Nó sẽ được chấp nhận khi nó gần với một pixel ở trên ngưỡng cao
Tỉ lệ đề nghị cao/thấp giữa 2/1 và 3/1
Hình 1 20 Tìm biên theo Canny
e Biến đổi Hough
Biến đổi Hough là phương pháp dùng để xác định đường thẳng (đường tròn
elip) gần đúng đi qua một tập hợp điểm
Với (x, y) là một điểm y = mx + c → c = mx +y
Như vậy nếu có N điểm nằm trên một đường thẳng
Trang 31Hình 1 21 Trục tọa độ đề các đi qua 2 điểm
Thực chất biến đổi Hought là biến điểm thành đường thẳng
Trang 32Hình 1 24 Đường thẳngHough trong tọa độ cực
Biến đổi Hough theo tọa độ cực
Hình 1 23 Hệ tọa độ cực
Biến đổi Hough ánh xạ N điểm thành N đường sin trong tọa độ chứa các đường này đều đi qua điểm (r, δi) Giao điểm (r, δi) của N đường sin sẽ xác định một đường thẳng trong hệ tọa độ đề các Như vậy, những đường thằng đi qua điểm (r, yi)
sẽ có bấy nhiêu cặp giá trị (r, δi) Mục đích tìm ra cặp (r, δi) sao cho số đường hình sin đi qua nhiều nhất, và cặp đó chính là cặp tham số cho đường thẳng
• Hough với OpenCv
Để thuận tiện cho việc dùng Hough để tìm đường thẳng và đường tròn trong
ảnh thì OpenCv cung cấp chức năng HoughLines, HoughLinesP và HoughCircles
Trang 33- Tìm đường thẳng với HoughLines và HoughLinesP Hình 2.17
➢ HoughLine
vector<Vec2f> lines;
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );
▪ Dst: đầu ra ( là ảnh xám)
▪ Lines: một vector lưu trữ thông số (r,θ) của các dòng được phát hiện
▪ Rho: độ phân giải của tham số r theo Pixel Thường sử dụng 1 pixel
▪ Theta: độ phân giải của tham số θ theo radian Thường sử dụng 1 độ (CV_PI/180)
▪ Threshold: số lượng tối thiểu của nút phát hiện
▪ Rho: độ phân giải của tham số r theo pixel (thường sử dụng 1 pixel)
▪ Theta: độ phân giải của tham số θ theo radian (thường sử dụng là 1 độ CV_PI/180)
▪ Threshold: số lượng tối thiểu nút
▪ MinhLinLength: số lượng tối thiểu của các điểm có thể tạo thành một đường, nếu ít hơn sẽ bị bỏ qua
▪ maxLinegap: khoảng các tối đa giữa hai điểm được xem xét trong cùng một dòng
Hình 1 25 Kết hợp giữa HoughLines với HoughCircles
Trang 34- Tìm đường tròn với HoughCircles Hình 1 26
vector<Vec3f> circles;
HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows/8,
200, 100, 0, 0 );
• Src_gray: đầu vào là một ảnh xám
• Circles:một vector lưu chữ 3 giá trị xc, yc , r cho mỗi vòng tròn tìm được
• CV_HOUGH_GRADIENT:xác định phương pháp phát hiện Đây là phương
pháp duy nhất sẵn có trong OpenCv
• Dp=1: tỷ lệ nghịch đảo của độ phân giải
• Min_dist = src_gray.rows/8: khoảng cách tối thiểu giữa tâm phát hiện được
• Param_1 =200: ngưởng để phát hiện cạnh canny nội bộ
• Pram_2 = 100*: ngưỡng phát hiện tâm
• Min_radius = 0:đặt như mặc định
• Max_radius =0: bán kính tối đa được phát hiện Nếu không biết thì đặt như là
mặc định ( giá trị 0)
Hình 1 26 Tìm thấy hình tròn trong mẫu có hình tròn
f Một số hàm cơ bản trong thư viện OpenCV
Trong những phần trước đã đề đến một số hàm của OpenCV, trong phần này
sẽ giới thiệu những hàm cơ bản hỗ trợ cho các hàm đã được đề cập ở trên Và đề cập tới hàm tìm đối tượng hữu hiệu trong thư viện OpenCV
- Tải một ảnh và hiển thị ảnh
Đây là một chức năng đơn giản không thể thiếu của OpenCV