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

nghiên cứu về xử lý ảnh và thuật toán xử lý ảnh bám đối tượng

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 (1.63 MB, 78 trang )

1
LỜI NÓI ĐẦU
Trong những năm gần đây, trên thế giới nghiên cứu ứng dụng công nghệ xử
lý và nhận dạng ảnh đang là hướng nghiên cứu tập trung của rất nhiều nhà khoa học
trong các lĩnh vực. Từ những năm 1970 khi mà năng lực tính toán của máy tính
ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập
dữ liệu lớn như các hình ảnh, các đoạn video thì một khái niệm nữa về xử lý ảnh
nữa ra đời đó là: Thị giác máy - Computer vision.Có thể nói xử lý ảnh số và thị giác
máy đã được phát triển và trở thành một lĩnh vực khoa học. Xử lý ảnh số không chỉ
nâng cao chất lượng của ảnh mà còn phân tích và lý giải tìm ra giải thuật để ứng
dụng vào thực tiễn. Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm
mục đích tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu
được hoặc các tạp dữ liệu đa chiều. Việc kết hợp giữa thị giác máy với các kỹ thuật
khác như công nghệ thông tin, truyền thông, điện tử, điều khiển tự động, cơ khí…
cho chúng ta rất nhiều ứng dụng trong đời sống hàng ngày cũng như trong khoa
học, an ninh, y học, quân sự… Ngày nay, ứng dụng của thị giác máy đã trở nên rất
rộng lớn và đa dạng, len lỏi vào mọi lĩnh vực từ quân sự, khoa học, vũ trụ, cho đến
y học, sản xuất, và tự động hóa tòa nhà
.
Trong thời gian qua dưới sự hướng dẫn tận tình của Cô HÀ THỊ KIM
DUYÊN em đã dành thời gian nghiên cứu về xử lý ảnh và nhận dạng ảnh hay nói
đúng hơn là thuật toán xử lý ảnh bám đối tượng – Tracking. Những nội dung mà em
nghiên cứu được ở đây bao gồm:
• Nghiên cứu tổng quan về xử lý ảnh số và hệ bám đối tượng
• Tìm hiểu và nghiên cứu về thư viện mã nguồn mở OpenCV trên
nền C
• Nghiên cứu và xây dựng thuật toán bám ảnh di động tối ưu dựa trên
thư viện mã nguồn mở OpenCV của Intel
• Xây dựng được một hệ thống camera di động (phần cứng lẫn phần
mềm) bám theo mục tiêu di dộng ứng dụng thuật toán bám ảnh Camshitf.
• Đánh giá được kết quả đạt được trong thời gian nghiên cứu.


2
Để hoàn thành đồ án này đúng tiến độ và có chất lượng, em xin gửi lời cảm ơn
chân thành nhất tới Cô Th.s HÀ THỊ KIM DUYÊN là người trực tiếp hướng dẫn em
làm đồ án này. Đồng thời em cũng xin gửi lời cảm ơn sâu sắc tới các anh, các bác
phòng Quang – điện tử, Viện vật lý – Viện khoa học công nghệ Việt Nam đã tạo
điều kiện tối đa giúp đỡ em về mặt thiết bị và dụng cụ thí nghiệm phục vụ quá trình
làm đồ án.
Và cuối cùng, chúng em xin dành tất cả lòng biết ơn và kính trọng sâu sắc nhất
tới bố mẹ chúng em, những người đã sinh thành, nuôi dưỡng chúng em nên người,
đã lo lắng, chỉ bảo từ những việc nhỏ nhất, đã tạo mọi điều kiện cho chúng em được
sống và học tập một cách tốt nhất để vươn tới những ước mơ và hoài bão của mình.
Em xin chân thành cảm ơn!
Hà nội ngày 28 tháng 5 năm 2011
Sinh viên thực hiện
Hà Tiến Thanh
3
Chương 1: TỔNG QUAN VỀ XỬ LÝ ẢNH VÀ HỆ
THỐNG BÁM ĐỐI TƯỢNG
1.1Tổng quan về xử lý ảnh
Xử lý ảnh bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ra
một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu được hoặc các
tập dữ liệu đa chiều. Đối với mỗi người chúng ta, quá trình “học” thông qua thế giới
bên ngoài là một điều dễ dàng. Quá trình nhận thức đó được “học” thông qua quá
trình sống của mỗi người. Tuy nhiên với các vật vô tri vô giác như máy tính,
robot… thì điều đó quả thực là một bước tiến rất gian nan. Các thiết bị ngày nay
không chỉ nhận thông tin ở dạng tín hiệu đơn lẻ mà còn có thể có cái “nhìn” thật
với thế giới bên ngoài. Cái “nhìn” này qua quá trình phân tích, kết hợp với các mô
hình như máy học, mạng nơron… sẽ giúp cho thiết bị tiến dần tới một hệ thống
nhân tạo có khả năng ra quyết định linh hoạt và đúng đắn hơn nhiều. Một số lĩnh
vực ứng dụng công nghệ xử lý ảnh mang tính đột phá như sau:

1.1.1 Trong lĩnh vực quân sự
Các hệ thống tích hợp quang hồng ngoại có khả năng tự động điều khiển dàn
hỏa lực (pháo, tên lửa) được lắp đặt cho các trận địa cao xạ, trên xe tăng, tàu chiến,
máy bay, tên lửa hoặc vệ tinh (Hình 1.1). Chúng được thay thế và hỗ trợ các dàn
rada dễ bị nhiễu trong việc tự động phát hiện, cảnh giới, bám bắt mục tiêu. Đặc biệt
có những loại lắp trên máy bay có khả năng điều khiển hỏa lực đánh phá hàng chục
mục tiêu một lúc. Ngoài ra còn phải kể đến các đầu tự dẫn tên lửa và đạn thông
minh.
1.1.2 Trong an ninh, phòng chống tội phạm, bảo vệ pháp luật
Các hệ thống camera nhận dạng khuôn mặt vân tay tự động cũng như phát
hiện, theo dõi, cảnh báo các âm mưu và hoạt động khủng bố. Các xe robốt tự hành
có gắn các camera cũng được ứng dụng trong các môi trường độc hại, dò phá bom
mìn (Hình 1.1).
4
1.1.3 Trong lĩnh vực hàng không vũ trụ
Các hệ thống ống kính chụp ảnh viễn thám (remote sensing) lắp trên các vệ
tinh bay quanh trái đất có thể chụp và quan sát được các vật kích cỡ 0,5 m từ độ cao
750 km trong mọi điều kiện thời tiết (Hình 1.1) Việc nối ghép các ống kính này
với hệ thống GPS sẽ cho phép xây dựng các bản đồ số có những lĩnh vực ứng dụng
cực kỳ quan trọng trong quốc phòng an ninh, phát triển kinh tế, xã hội
1.1.4 Trong công nghiệp, giao thông, xây dựng
Hệ thống quang điện tử đóng vai trò của các thị giác máy (machine vision) có
khả năng tự động đo đạc kiểm tra chất lượng sản phẩm trong các dây truyền sản
xuất: phân loại hạt ngũ cốc, cà phê; tìm lỗi lắp ráp linh kiện các bản vi mạch và
khuyết tật các mối hàn và động cơ Các hệ thống quang điện tử cũng được ứng
dụng ngày càng nhiều trong giao thông như đo tốc độ, tự động kiểm soát điều khiển
và phân luồng giao thông (Hình 1.2).
1.1.5 Trong nghiên cứu y sinh dược học
Các kính hiển vi có khả năng tự động nhận dạng và đo đếm các tế bào với độ
chính xác cao. Các kính hiển vi có hệ thống dẫn đường laser cho phép thực hiện

những phẫu thuật rất phức tạp như mổ u não, nơi mà một sự không chính xác cỡ μm
cũng gây tổn hại đến các dây thần kinh chằng chịt xung quanh
1.1.6 Trong công nghiệp giải trí truyền hình
Các hệ thống tích hợp có thể điều khiển các camera kích thước và khối lượng lớn dễ
dàng tự động bám theo các đối tượng chuyển động nhanh như bóng đang bay, đua
xe

5


Hình 1.1: Một số hệ thống tích hợp quang-điện tử và ảnh nhiệt trong
quân s

và chi
ế
n đ

u
Hình 1.3: Hệ thống camera điện tử ứng dụng trong nghiên cứu thời tiết và
trong công nghiệp
Hình 1.2: Một số hệ thống tích hợp camera giám sát trên tàu viễn thám và
trong công nghiệp và công nghệ vũ trụ
6
1.2 Giới thiệu chung về Robot
Rô bốt (robot) hay người máy là một loại máy có thể thực hiện công việc một
cách tự động hoặc được điều khiển gián tiếp qua máy tính.
Rô bốt là một tác nhân cơ khí, nhân tạo, thường là một hệ thống cơ khí-điện tử
kết hợp hoàn hảo.Với sự xuất hiện và chuyển động của mình, rô bốt gây cho con
người cảm giác là nó cũng có những giác quan như con người. Từ “rô bốt” (người
máy) thường được hiểu với hai nghĩa đó là 1 cơ cấu cơ khí chính xác và phần mềm

tự hoạt động.Về lĩnh vực người máy thì Nhật Bản đang đi đầu về lĩnh vực này.
Ngày nay, Rô bốt đang là tâm điểm của một cuộc cách mạng lớn sau Internet.
Rô bốt ngày càng được sử dụng rộng rãi trong công nghiệp, y tế, giáo dục và đào
tạo, giải trí và an ninh quốc phòng, thám hiểm không gian.
Rô bốt là sản phẩm công nghệ có độ phức tạp cao chứa hàm lượng tri thức vô
cùng phong phú về tất cả cac lĩnh vực của khoa học và công nghệ.
Ngày nay người ta vẫn còn tranh cãi về vấn đề “Một loại máy đủ những tiêu
chuẩn gì để được coi là một rô bốt???” Một cách gần chính xác, rô bốt phải có một
vài (không nhất thiết phải đầy đủ) đặc điểm sau đây:
1. Không phải tự nhiên, tức là do con người chế tạo ra.
2. Có khả năng nhận biết môi trường xung quanh.
3. Có thể tương tác với các vật thể trong môi trường.
4. Có sự thông minh và có khả năng đưa ra các lựa chọn dựa trên môi trường
và có thể hoạt động theo 1 chu trình đã được lập trình sẵn.
5. Có khả năng điều khiển bằng các lệnh để có thể thay đổi tùy theo yêu cầu
của người sử dụng.
6. Có thể di chuyển quay tịnh tiến một chiều hay nhiều chiều.
7. Có sự khéo léo trong vận động.
7
1.3 Giới thiệu tổng quan về hệ thống rô bốt camera bám đối tượng (Tracking
mobile robot)
Hệ thống rô bốt hoạt động bằng các cảm biến như cảm biến màu sắc, hồng
ngoại, cảm biến dò đường, siêu âm giờ đây đã dần dần được phát triển và tích hợp
thêm “thị giác”.Với sự phát triển của khoa học công nghệ, việc tích hợp trên rô bốt
hệ thống camera thông minh ứng dụng công nghệ xử lý ảnh là rất cần thiết phục vụ
cho công nghiệp, quốc phòng và xã hội.
Hệ thống thị giác có thể phân thành 2 lớp, theo như cấu trúc của hệ, đó là hệ
có camera gắn cố định và hệ có camera gắn trên tay máy (eye-in-hand). Trong hệ
camera cố định, camera được gắn cố định so với hệ trục tọa độ thực, thu thập ảnh
của cả mục tiêu và cả môi trường. Mục tiêu của hệ camera cố định này là cung cấp

tín hiệu điều khiển sao cho tay máy đặt được vị trí mong muốn. Mục đích của cấu
trúc eye-in-hand là điều khiển tay máy sao cho ảnh của mục tiêu di động hoặc cố
định được duy trì ở vị trí mong muốn trên mặt phẳng ảnh thu được.
Camera
Máy tính
Robot
Tín hiệu điều khiển
Hình 1.4: Cấu trúc hệ camera cố định điều khiển và giám sát cánh tay rô bốt
8
Các nghiên cứu của môi trường động bị bỏ khá xa so với môi trường tĩnh do
ảnh hưởng khá lớn của tốc độ tinh toán cũng như độ chinh xác của việc phân tích
ảnh. Do vậy có nhiều thuật toán để cải thiện tốc độ xử lý ảnh và cải thiện can nhiễu
trong quá trình thu thập dữ liệu từ camera.
Một khó khăn và thách thức của thị giác máy là việc phân loại đối tượng. một
rô bốt có thể phải đối mặt với nhiều đối tượng khác nhau, trong khi chỉ một đối
tượng được quan tâm còn các đối tượng khác thì không. Để nhận biết được vị trí
của mục tiêu trong môi trường động, các đặc trưng của mục tiêu là rất quan trọng.
Các điểm lỗ, các góc cạnh, các đặc điểm điển hình có thể dễ dàng tính toán xử lý ở
môi trường tĩnh, nhưng trong môi trường động thì rất khó vì chi phí về thời gian là
rất lớn, ảnh hưởng của tốc độ làm cho việc xử lý ảnh tách lấy đặc trưng của đối
tượng là rất khó.
Bài toán bám mục tiêu di động với quỹ đạo không biết trước yêu cầu phải giữ
được đối tượng ở một vị trí nhất định trên mặt phẳng ảnh. Thuật toán CamShift
trong OpenCV được sử dụng để tính toán tọa độ trọng tâm của đối tượng trên mặt
phẳng ảnh.
Một số hệ thống tracking rô bốt thực tế đã được triển khai:
Hình 1.5: Cấu trúc hệ Camera rô bốt eye-in-hand
camera
Robot eye
-

in
-
hand
V

t th

c

n giám sát
9
Ngày nay việc xây dựng một hệ thống rô bốt thông minh và có khả năng thay
thế con người làm việc trong các điều kiện khắc nghiệt và nguy hiểm là rất cần
Hình 1.6: PAN robot và Robot Pops (nguồn: www.mobilerobot.org)
Hình 1.7: Robot Talon và Robot MARRS (nguồn Internet)
Hình 1.8: Robot thám hiểm sao hỏa và Robot MIDbo
10
thiết, đơn cử như việc làm việc trong các hầm mỏ các nhà máy hạt nhân và các vùng
nguy hiểm bom mìn…thì khi ấy các rô bốt như thế này hoàn toàn hữu dụng và là
lựa chọn tối ưu.
Với mục tiêu hướng tới xây dựng một hệ thống rô bốt camera thông minh có
thể phục vụ trong công tác dò mìn cứu trợ cứu nạn, và có khả năng do thám, tôi
cũng đã tìm hiểu và đi vào nghiên cứu chế tạo một hệ tracking thông minh có khả
năng tự hành và bám mục tiêu di động dựa trên công nghệ xử lý ảnh có giao tiếp và
kiểm soát, lưu trữ thông tin bằng máy tính.
Có thể hệ thống lại rằng, một hệ thống bám đối tượng bao gồm:
Mục đích của hệ thống bám video, ảnh tự động là duy trì một đường ngắm viết
tắt là LOS (Line Of Sight) giữa cảm biến – mục tiêu một cách ổn định và hoàn toàn
Đế và
cảm biến

ảnh
Bộ xử lý
Mục tiêu
LOS
Hình 1.9: Cảm biến ảnh, gimbal và bộ vi xử lý
Hình 1.10: Tổng quan về một hệ thống bám
11
tự động trong khi tồn tại cả chuyển động tương đối của mục tiêu và chuyển động
của đế gắn cảm biến làm nhiễu loạn tới dữ liệu cảm biến hình ảnh. Mục tiêu thường
được định vị ban đầu, bởi hoặc là người điều khiển hoặc là hệ thống nhận dạng mục
tiêu tự động. Sau đó hệ thống bám sẽ khóa chặt mục tiêu và duy trì LOS tự động.
Hệ thống bám ảnh tự động thường có 3 bộ phận chính (hình 1.8): (1) bộ cảm
biến hình ảnh (camera chẳng hạn), (2) bộ chấp hành thường là các trục khớp quay
(gimbal) có gắn động cơ hoặc khí nén, và (3) bộ vi xử lý.Một vòng điều khiển phản
hồi,được gọi là vòng bám, liên tục hiệu chỉnh bộ chấp hành để giữ mục tiêu vào tâm
của trường nhìn viết tắt là FOV (Field Of View) của bộ cảm biến. Bộ vi xử lý sẽ
khép kín vòng này bằng cách tính toán độ lệch để điều khiển cơ cấu chấp hành. Các
thành phần hoạt động theo thứ tự: (1) bộ vi xử lý định vị tín hiệu mục tiêu trong các
dòng hình ảnh từ bộ cảm biến, (2) bộ vi xử lý ước lượng trạng thái mục tiêu và tạo
ra các lệnh điều khiển cơ cấu chấp hành trên cơ sở các thông tin trạng thái, (3) lệnh
điều khiển được áp dụng vào LOS cảm biến, (4) bộ cảm biến tạo ra một vòng video
mới, và (5) quá trình được lặp lại.
Cảm biến hình ảnh, có thể là các camera hoặc các cảm biến hình ảnh khác
như: cảm biến ảnh CCD (Charge Couple Device) là loại cảm biến sử dụng một lưới
hình chữ nhật của các điểm (site) thu thập điện tử phủ trên một đế silic mỏng để ghi
lại năng lượng ánh sáng đến mỗi điểm trong chúng. Mỗi một điểm được tạo thành
bằng cách cấy một lớp SiO2 trên đế và sau lắng đọng một cấu trúc dẫn lên trên. Khi
photon ánh sáng đập vào silic, thì cặp điện tử lỗ trống sẽ được tạo ra và các điện tử
mang điện tích âm (electron) sẽ được bật ra ở cổng tương ứng. Với mỗi ánh sáng có
bước sóng khác nhau thì các điện tích bật ra tương ứng cũng sẽ khác nhau.các dòng

điện tử này đi qua bộ biến đổi để lấy ra được mức điện áp quy định tương ứng với
mỗi màu sắc. Và tập hợp những tín hiệu điện này sẽ được xử lý để khôi phục lại
hình ảnh của đối tượng thông qua thiết bị chuyên dụng chuyển đổi.
12
Có thể nói rằng, khối cảm biến hình ảnh có thể sử dụng các cảm biến màu sắc
hoặc camera, tuy nhiên có thể khẳng định rằng, khối này có ảnh hưởng rất lớn đến
chất lượng và tốc độ của một hệ bám ảnh. Vì tốc độ thu thập dữ liệu để gửi về bộ vi
xử lý rất quan trọng, nó ảnh hưởng đến việc tính toán của bộ vi xử lý để nhanh
chóng đưa ra luật điều khiển cho cơ cấu chấp hành.Camera tốc độ và chất lượng
càng cao thì hệ bám sẽ hoạt động với xác suất chính xác cao.
Ngày nay với sự phát triển của khoa học công nghệ thì cảm biến hình ảnh
cũng được hiện đại hóa và cải thiện được tốc độ cũng như chất lượng hình ảnh, điển
hình là các hệ thống camera tích hợp, hồng ngoại, lade, không dây…
Với yêu cầu mục đích của đồ án thì khối cảm biến hình ảnh của tôi sử dụng ở
đây là hệ thống camera không dây tích hợp hồng ngoại quan sát ban đêm. Vì
camera là lựa chọn tối ưu trong việc xây dựng một hệ thống triển khai thực nghiệm,
trong khi các cảm biến hình ảnh khác chỉ dùng trong một mục đích nghiên cứu nhất
định, tốc độ không cao và khó sử dụng và khó tiếp cận. Ngược lại camera thì hoàn
toàn đáp ứng đủ yêu cầu để xây dựng một hệ thống bám ảnh thực nghiệm và dễ tiếp
cận.
Hình 1.11: Cảm biến CCD
13
Về hệ cơ cấu chấp hành thì có thể sử dụng là khí nén hoặc động cơ để điều
khiển. Tuy nhiên tùy vào mục đích sử dụng và yêu cầu riêng của hệ thống ta có thể
sử dụng cơ cấu chấp hành nào để phù hợp nhất. Ở đây ta có thể sử dụng hệ thống đế
xoay dùng động cơ điều khiển và kiểm soát góc độ và tốc độ quay. Các hệ trên thị
trường hiện nay như các hệ PTS, HN (đế xoay camera) tuy nhiên các hệ này thường
là các động cơ xoay chiều điều khiển cho nên việc điều khiển tốc độ và kiểm soát
góc quay cũng gặp nhiều khó khăn.
Trong hệ thống của tôi sử dụng hoàn toàn là động cơ 1 chiều có gắn encoder

để kiểm soát tốc độ và góc quay, được điều khiển bằng phương pháp điều xung
PWM, nên hoàn toàn phù hợp với yêu cầu của hệ thống.
Hình 1.12: Camera quan sát tích hợp
Hình 1.13: Đế xoay PST, HN để gắn camera quan sát
14
Việc lựa chọn động cơ 1 chiều DC (Direct Current) là một lựa chọn tối ưu và
có tính cơ động cao nhỏ gọn, có thể di chuyển đến mọi vị trí vì có khả năng dùng
acqui và pin lưu trữ, phù hợp với nhiều điều kiện khác nhau, phù hợp với nhiều địa
hình có thể triển khai thực tế.
Về bộ vi xử lý, có thể là các vi mạch xử lý chuyên dụng DSP (Digital signal
processing) hay các mạch vi điều khiển hoạc là máy vi tính PC (Personal computer).
Ngoài nhiệm vụ thu thập dữ liệu, chúng có nhiệm vụ xử lý các dữ liệu này bằng các
chương trình được nhúng trong bộ xử lý hoặc chạy trên các PC. Một vi điều khiển
(microcontroller) là một máy tính trên một chip (Computer-on–a–chip, single-chip-
computer). Thường thì các vi điều khiển này được gọi là các bộ điều khiển nhúng
(embedded controller) vì chúng và các mạch điện tử hổ trợ thường được thiết kế lắp
đặt (nhúng) ngay bên trong thiết bị điều khiển. Một số loại mạch nhúng thường gặp
như: Psoc, PC 104, FPGA, SBC (Single board computer), CMUCAM1 2 3, DSP và
các máy tính nhúng.(hình 1.13).
Các mạch nhúng trên đều có ưu điểm là nhỏ gọn, có thể can thiệp và cấu trúc
của chúng có nghĩa là có thể trực tiếp lập trình trên nó, tuy nhiên chúng có nhược
điểm là khó sử dụng, phức tạp và mang tính chuyên ngành cao, không phổ biến và
có dung lượng bộ nhớ nhỏ chỉ có thể xử lý và ít có khả năng lưu trữ thông tin hình
Hình 1.14: Các mạch nhúng ( SBC use PSoC, FPGA, CMUCAM,
DSP, máy tính công nghiệp PC104)
15
ảnh hoặc video khi cần thiết (nếu muốn lưu trữ phải dùng thêm thiết bị ngoại vi nên
khá phức tạp).
Một trong những thiết bị vừa có thể lập trình và vừa có thể xử lý tín hiệu đồng
thời có khả năng lưu trữ thông tin lớn đó là máy tính cá nhân PC. Máy PC ra đời

nhằm phục vụ những yêu cầu của người sử dụng, sử dụng đơn giản, phổ biến đáp
ứng được những yêu cầu của hệ thống. Hiện nay máy tính cá nhân cũng đã được
thiết kế nhỏ gọn với đầy đủ chức năng. Do vậy trong khuôn khổ đề tài này tôi đã lựa
chọn máy tính laptop để xử lý và có thể lưu trữ được thông tin hình ảnh và video,
âm thanh.Giúp người điều khiển có thể quan sát trực tiếp mục tiêu và khi cần thiết
sẽ can thiệp trực tiếp vào quá trình điều khiển. Như vậy việc lựa chọn máy tính
laptop là phù hợp với yêu cầu đề tài.
Như vậy, mục tiêu của đề tài là xây dựng được một hệ thống bám ảnh di động
bao gồm một hệ tích hợp rô bốt điều khiển camera thông minh thu thập dữ liệu gửi
về trung tâm lưu trữ và điều khiển từ xa thông qua hệ thống máy tính. Rôbốt và
camera có thể hoàn toàn hoạt động tự động bám ảnh, vật thể hoặc có thể can thiệp
điều khiển bởi người sử dụng, phục vụ cho công tác nghiên cứu, công tác cứu hộ,
dò phá bom mìn, phục vụ nhiều mục đích trong cuộc sống.
16
Chương 2: TỔNG QUAN VỀ THƯ VIỆN MÃ NGUỒN
MỞ OPENCV TRÊN NỀN C
2.1 Thư viện OpenCV
2.1.1 OpenCV là gì?
OpenCV viết tắt của Open Source Computer Vision Library. Nó có chứa hon
500 hàm sử dụng thị giác máy, và được phát triển bởi tập đoàn Intel. OpenCV là
một thư viện mã nguồn mở (open source) tham khảo tại:
Thư viện được viết bằng ngôn ngữ C và C++ có thể chạy trên các hệ điều
hành như Linux, Window và Max OS X. OpenCV được thiết kế để nâng cao hiệu
suất tính toán và nhấn mạnh đến hệ thống thời gian thực. Một điều tuyệt vời của
OpenCV là nó đưa ra một hệ thống đơn giản, dễ sử dụng giúp mọi người nhanh
chóng xây dựng các ứng dụng trong thị giác máy, kể cả các hệ thống kiểm tra trong
nhà máy, bức ảnh trong các lĩnh vực y học, bảo mật, rô bốt học… Nó chứa các lạp
trình xử lý ảnh rất đơn giản, kể cả khi thực thi các hàm bậc cao như dò tìm khuôn
mặt, theo dõi khuôn mặt, nhận dạng khuôn mặt, lọc Kalman.
Kể từ khi được giới thiệu và sử dụng vào tháng 1 năm 1999, OpenCV đã được

sử dụng trong rất nhiều ứng dụng, các sản phẩm và các nghiên cứu. Ví dụ như trong
lĩnh vực hàng không vũ trụ, bản đồ web trực tuyến, sử dụng giảm nhiễu trong y học,
phân tích đối tượng, an ninh, hệ thống dò tìm và cảnh báo, quản lý hê thống sản
xuất, xử lý camera, ứng dụng trong quân sự, hàng không không người lái, trên mặt
đắt và trên tàu ngầm. Ngoài ra nó còn sử dụng trong nhận dạng âm thanh. OpenCV
là một chìa khóa quan trọng trong các rô bốt sử dụng thị giác máy như Stanford hay
Asimo của Nhật Bản. Quá trình phát triển của OpenCV được thể hiện ở hình 2.1:
17
Trên thế giới còn một số thư viện như Emugu CV nhưng phát triển trên nền C# .
OpenCV được phát triển trên nền C và C++ thì sẽ dễ dàng cho những người mới
tiếp cận hơn Emugu CV.
2.1.2 Vì sao lựa chọn OpenCV?
Thị trường thị giác máy đang ngày càng mở rộng và lên tục phát triển. Thư
viện tiêu chuẩn sẽ tạo ra các ứng dụng mới và các giải pháp xử lý dễ dàng hơn. Đặc
biệt tối ưu khi sử dụng cấu trúc Intel. Tạo ra các mẫu ứng dụng bằng các thư viện
được cập nhật thường xuyên và thực hiện các thuật toán nặng như dò tìm khuôn
mặt. Có rất nhiều công nghệ hiện đại và các công ty lớn sử dụng thư viện OpenCV
trong ứng dụng của mình như : Intel, Microsoft, IBM, Siemens, Google… và các
trung tâm nghiên cứu như: Stanford, MIT, Cambridge, INRIA…
Hơn 14000 thành viên trên forum OpenCVyahoogroup.com với trung bình
một ngày có đến 10-20 thông điệp comment trao đổi hàng ngày.
Điều đó khẳng định rằng OpenCV thực sự đã góp phần vô cùng lớn trong lĩnh
vực thị giác máy.
Hình 2.1: Quá trình phát triển của OpenCV
18
2.1.3 Cấu trúc và nội dung OpenCV như thế nào?
Để hiểu OpenCV làm việc như thế nào chúng ta bắt đầu từ sự phân chia cấu
trúc và nội dung của OpenCV ở 5 phần. Cấu trúc của openCV được chia làm 5 phần
chính, 4 trong số đó được chỉ ra trong hình 2.2
CXCORE

chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu trúc dữ liệu
cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h . CXCORE cũng
chứa đại số tuyến tính và phương pháp thống kê, chức năng duy trì và điều khiển
chuỗi. Một số ít, các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây.
CV
chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các chức năng
hình họa máy tính cũng được đặt ở đây.
CVAUX
được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ
nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này.
Code sau này chúng được chuyên dụng cho nhận diện mặt và chúng được ứng dụng
rộng rãi cho mục đích đó.
HIGHGUI
và CVCAM được đặt trong cùng thư mục là “otherlibs”.
CV
Xử lý ảnh và thuật toán
về thị giác máy
MLL
Thống kê và tập hợp
các công cụ xử lý
HighGUI
Giao diện, truy xuất
ảnh và video
CXCORE
Cấu trúc cơ sở và các thuật toán, hỗ trợ XML, các
hàm vẽ
Hình 2.2: Cấu trúc của OpenCV
19
HIGHGUI
chứa các giao diện vào ra cơ bản, nó cũng chứa các khả năng cửa

sổ mở rộng và vào ra video.
CVCAM
chứa các giao diện cho video truy cập qua DirectX trên nền
Windows 32 bits.
Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện một phần
các chức năng của công cụ OpenCV. Các chức năng của openCV tập trung vào thu
thập ảnh, xử lí ảnh và các thuật toán phân tích dữ liệu ảnh, bao gồm:
- Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim
- Cấu trúc dữ liệu ảnh số 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, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse,
đường thẳng
- 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 tí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ố (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển
thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như
wxWidgets)
- Chức năng vẽ, chú thích lên ảnh.
20
2.2 Thư viện OpenCV và môi trường làm việc Microsoft visual studio 2008
2.2.1 Cài đặt OpenCV phiên bản 2.1 dành cho VC++ 2008
Trước hết vào trang web:
download
OpenCV 2.1 phiên bản dành cho VC++ 2008 trên nền window.
Tiến hành cài đặt:
Click Next:

Hình 2.3: Setup OpenCV 2.1
Hình 2.4: Chọn I Agree
21
Click I Agree để tiếp tục:
Chọn Add OpenCV to the system PATH for all users, để chạy trên tất cả quyền
Admin lẫn users, sau đó click Next chọn mặc định và tiếp tục cho đến khi cài đặt
xong finish.
Sau khi cài đặt ta tiến hành copy tất cả các file trong thư mục bin, include
và lib của OpenCV cho vào thư mục bin, include và lib của VC++2008 để sử
dụng thư viện OpenCV.
Hình 2.5: Chon Add OpenCV to the system PATH
Hình 2.6: Click Finish để kết thúc
22
2.2.2 Tạo một dự án bằng VC++ 2008
Mở phần mềm Visual C 2008, chọn Create project ở MFC sau đó tiến
hành MFC Application chọn tên dự án và đường dẫn lưu dự án của mình sau
đó ấn Ok.
Sau đó chọn thiết kế giao diện Dialog based và chọn Next:
Hình 2.7: Tạo một dự án trong VC++ 2008
23
Sau đó chọn Next và Finish, như vậy ta đã thiết lập được một dự án bây giờ ta
có thể thiết kế và lập trình theo ý muốn.
Sau đây là kết quả của một của một chương trình nhận diện khuôn mặt được
sử dụng thư viện mã nguồn mở của OpenCV và đếm số người trong bức ảnh.
Hình 2.8: Chọn thiết kế Dialog based và môi
trường làm việc của dự án
24
Hình 2.9: Kết quả thử nghiệm của lập trình nhận diện khuôn
mặt
25

Chương trình nhận diện khuôn mặt và đếm số người trong một bức ảnh dùng
thư viện: "haarcascade_profileface.xml”.
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#include <iostream>
// Create a string that contains the exact cascade name
const char* cascade_name =
"C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt2.xml";
/* "haarcascade_profileface.xml";*/
// Function prototype for detecting and drawing an object from an image
void detect_and_draw( IplImage* image );
int dem=0;
// Main function, defines the entry point for the program.
int main( int argc, char** argv )
{
// Create a sample image
IplImage *img = cvLoadImage("D:\\IMG_8036.jpg");
// Call the function to detect and draw the face positions
detect_and_draw(img);
// Wait for user input before quitting the program
cvWaitKey();

// Release the image
cvReleaseImage(&img);
std::cout << "co tat ca"<<dem << " nguoi//";
// Destroy the window previously created with filename: "result"
cvDestroyWindow("result");
//MessageBox(dem);
// return 0 to indicate successfull execution of the program

×