Tải bản đầy đủ (.pdf) (68 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.97 MB, 68 trang )

LỜ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 q 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 đã hồ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!

1


LỜ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 hồn tồ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

2




MỤ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
3


Phụ 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

4


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
5


đượ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 tốn nhận dạng, bài tố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.

6


NỘ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
chun 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ụ tố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 tốn nhiều (độ phức tạp tính
tốn cao) đòi hỏi dung lượng bộ nhớ lớn, thời gian tính tố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ử
7


dụ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
tố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

Hình 1. 1. Các bước cơ bản trong xử lý ả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 qt
ảnh. Hình 1.1 dưới đây mơ tả các bước cơ bản trong xử lý ảnh.

8


Sơ đồ 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 qt 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
9


đố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 tố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 ngồ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ã hố đơn giản nhờ một ma trận nhị phân:
10


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

11


Trê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

Hình 1. 3. Các thành phần chính của hệ thống xử lý.
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
ra nối với một màn hình. Thực tế, phần lớn các nghiên cứu của chúng ta được
12



đư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í.
13


Thư 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ý
và phân tích ảnh.
• Là cơng cụ mã nguồn mở miễn phí, thích hợp cho việc nghiên cứu và phát triển,
với khả năng khả năng thay đổi và mở rộng mơ hình, thuật tốn.

• Được sử dụng rộng rãi và thu hút một số lượng lớn người dùng. Nhiều diễn đàn,
cộng đồng người dùng được thành lập để hỗ trợ cho việc tham khảo, tra cứu.
- Chức năng của thư viện OpenCV tập trung vào thu thập và xử lý ảnh, bao
gồm:
• 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ề: />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.
14


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:

Hình 1. 5. Chọn phiên bản Visual cài đặt OpenCV.
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
15


IOS, 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 ngồ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:
/>✓ Chạy file vừa tải về để cài đặt. Thư mục mặc định là
C:\Emgu\emgucv-windows-{phiên bản}.
✓ Thêm control của EmguCV vào Toolbox. Trong Toolbox, click phải
lên tab bất kì => chọn Add Tab => gõ tên EmguCV => Enter.
✓ Click phải lên tab EmguCV vừa tạo => chọn Choose Items… => hộp
thoại hiện ra, chọn tab .NET Framework Components => bấm Browse
=> duyệt đến thư mục {Emgu folder}\bin => chọn tập tin
Emgu.CV.UI.dll => Open => trong ô Filter, gõ Emgu => danh sách
các control hiện ra => chọn tất cả => OK.
✓ 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;
16


✓ 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) ln là một q
trình khó và dễ gây ra lỗi.


(a)

(b)

Hình 1. 6. (a) ngưỡng 40, (b) ngưỡng 121.
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.
17



-

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.

Hình 1. 7. Ngưỡng Threshold Binary trong OpenCV.
- Threshold binaru, inverted:
Ngược với Threshold Binary.

Hình 1. 8. Ngưỡng Threshold Binary, inverted trong OpenCV.
- Truncate:
Giá trị các điểm ảnh cao hơn giá trị ngượng sẽ bị thay đổi bằng giá trị
ngưỡng, thấp hơn giữ nguyên.

Hình 1. 9. Ngưỡng Truncate trong OpenCV.
- Threshold to Zero:
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.

18


Hình 1. 10. Ngưỡng Threshold to Zero trong OpenCV.

-Threshold to Zero, inverted :
Ngược lại với Threshold to Zero.


Hình 1. 11. Ngưỡng Threshold to Zero, inverted trong OpenCV.
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, q 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:
19


- 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ộ
lọc này.
Blur(src,dst,size(i,i),point(-1,-1))


src: ảnh nguồn.



dst: ảnh ra.

• size(w,h) : xác định kích thước của hạt nhân sẽ được sử dụng (chiều rộng w
pixel và chiều cao h pixels).


Point(-1,-1) chỉ các điểm có vị trí hàng xóm.

Hình 1. 12. Sử dụng bộ lọc hộp thông thường.
- 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.


20


Hì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.
21


▪ 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

Ngồ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.


Hình 1. 16. Filter2D nhân thay đổi tăng dần từ trái qua phải.
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
22


hợ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
hỗ trợ rất tốt.
- Phương pháp Gradient.
Dựa vào cực đại hóa của đạo hàm. Theo định nghĩa, gradient là viector có các
thành phần biểu thị tốc độ thay đổi giá trị của điểm ảnh theo hai hướng x và hướng
y. Các thành phần của Gradient được tính bởi:

f ( x, y)
f ( x + dx, y) − f ( x, y)
= f 'x 
x
dx
f ( x, y)
f ( x, y + dy) − f ( x, y)
= f 'y 
y
dx
Trong đó dx, dy là khoảng cách giữa hai điểm kế cận theo hướng x, y tương
ứng (thực tế chọn dx = dy = 1). Đây là phương pháp dựa trên đạo hàm riêng bậc

nhất theo hướng x, y.
Gradient trong gốc tọa độ (r,θ), với r là vector, θ là góc

df (e, ) f dx f dy
=
+
= f ' x cos + f ' y sin 
dr
x dr y dr
f(.) đạt cực đại khi

df
=0
dr

tức: f ' x cos + f ' y sin = 0 hay:

f 'x
sin
tg

=
=

cos  f ' y


 f 'x 

2

' 2
 r = arc tg  f '  ; f max = f 'x + f y
 y


Theo định nghĩa về gradient, nếu áp dụng nó vào xử lý ảnh, việc tính tốn sẽ
rất phức tạp. Để đơn giản mà khơng mất tính chất của phương pháp Gradient, người
ta sử dụng kỹ thuật Gradient dùng cặp mặt nạ H1, H2 trực giao. Nếu định nghĩa g1,
g2 là Gradient theo hai hướng x, y tương ứng thì biên độ g(m,n) tạiđiểm (m,n) được
tính:
g (m, n) = g12 (m, n) + g 22 (m, n)

Đặt A0 = g(m,n)
θr(m,n)=artg(g2(m,n))
Để giảm độ phức tạp tính tốn, A0 được tính gần đúng như sau:
23


A0=|g1(m,n)| + |g2(m,n)|
Các toán tử đạo hàm được áp dụng khá nhiều, ở đây, ta chỉ xét một số toàn tử tiêu
biểu: Robert, Sobel, prewitt, đẳng hướng(Isometric), 4- lân cận (thư viện OpenCV
hỗ trợ Sobel tìm biên khá tốt).
+ Tốn tử Robert (1965).
Với mỗi điểm ảnh I(x,y) của I, đạo hàm theo x, theo y được ký hiệu tương ứng
bởi gx, gy được tính:
 g x = I ( x + 1, y ) − I ( x, y ) 


 g y = I ( x, y + 1) − I ( x, y ) 


Điếu này tương đương với việc chập hai mặt nạ H1 và H2 theo hai hướng x và y:
 0 1
Hx = 
→
 −1 0 

 0 1
Hx = 

 −1 0 

Hướng theo (x)

Hướng theo (y)

+ Toán tử mắt nạ Sobel.
Toá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:
 −1 0 1
H x =  −1 0 1
 −1 0 1

 −1 −1 −1
H x =  0 0 0 
 1 1 1 

Hướng theo (x)

Hướng theo (y)


+ Mặt nạ Prewitt
 −1 0 1 
H x =  −2 0 2
 −1 0 1 

Hướng theo (x)

 −1 −2 −1
H x =  0 0 0 
 1 2 1 

Hướng theo (y)

+ Mặt nạ đẳng hướng:
Một mặt nạ khác cũng được nêu như dưới đây gọi là mặt nạ đẳng hướng (Isornetric).
 −1 0 1 


H x =  −2 0 2 
 −1 0 1 



Hướng theo (x)

 −1 −2 −1


Hx =  0 0 0 
1 2 1




Hướng theo (y)
24


+ 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:
0

0

0

0

-1

0

-1

0

1

0


0

1

0

0

0

0

0

0

Theo hướng x

Theo hướng y

• Nhận xét:
Tốn tử Prewitt có thể tách sườn tốt hơn tốn tử Sobel, trong khi đó tố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 tố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ạ:
 −3 0 +3 
Gx =  −10 0 +10 
 −3 0 +3 

 −3 10 −3
Gx =  0
0
0 
 +3 +10 +3

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


×