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

ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV

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 (7.33 MB, 82 trang )


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ


Nguyễn Xuân Đức




ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG
THƯ VIỆN OPENCV




ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Cơ học Kỹ thuật







HÀ NỘI-2010

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ




Nguyễn Xuân Đức


ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG
THƯ VIỆN OPENCV



ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Cơ học Kỹ thuật
Cán bộ hướng dẫn:ThS. Phùng Văn Hiệp








HÀ NỘI – 2010
LỜI CẢM ƠN

Khi bắt đầu nhận đồ án tốt nghiệp này em đã rất lo lắng bởi xử lý ảnh là lĩnh vực
còn mới mẻ ở Việt Nam và bản thân cũng lần đầu tiên tiếp xúc với lĩnh vực này. Em
rất vui vì cuối cùng đã hoàn thành tốt đồ án được giao.
Trước hết em xin gửi lời cảm ơn sâu sắc đến ThS. Phùng Văn Hiệp tuy không có
điều kiện trực tiếp được làm việc cùng thầy nhiều, nhưng qua những lần tiếp xúc ngắn
ngủi đó chính thầy đã cho em những lời động viên, những lời khuyên quý báu, em học
được ở thầy rất nhiều từ phong cách làm việc đến phong cách sống, em rất khâm phục

thầy.
Đồng thời em xin gửi lời cảm ơn đến ThS. Võ Đức Mỹ, cán bộ nghiên cứu tại
Viện Công nghệ Vũ trụ - Viện Khoa học và Công nghệ Việt Nam. Mặc dù chỉ được
trực tiếp làm việc với thầy trong thời gian ngắn do thầy phải đi công tác xa và rất bận
rộn nhưng thầy vẫn luôn dành thời gian quý báu hướng dẫn, chỉ bảo tận tình, giúp em
bước từ những bước đi đầu tiên đến lúc em hoàn thành được đồ án này.
Em xin gửi lời cảm ơn chân thành đến KS. Nguyễn Thanh Tuấn cán bộ nghiên
cứu phòng Động lực học vũ trụ và Cơ điện tử chính xác - Viện Công nghệ Vũ trụ -
Viện Khoa học và Công nghệ Việt Nam. KS. Nguyễn Thanh Tuấn không những giúp
đỡ em rất nhiều trong quá trình thực hiện đồ án này mà còn chỉ bảo, giúp đỡ em ngay
từ khi em bắt đầu được đến học tập tại Viện.
Qua đây em cũng xin gửi lời cảm ơn đến thầy, cô giáo công tác tại trường Đại
Học Công Nghệ - Đại Học Quốc Gia Hà Nội và các cán bộ nghiên cứu tại Viện Công
Nghệ Vũ trụ Viện Khoa học và Công nghệ Việt Nam đã giúp đỡ em về chuyên môn,
tạo điều kiện thuận lợi để em hoàn thành đồ án này.
Thực sự con cũng không biết làm thế nào để nói hết công ơn bố mẹ đã dành cho
con!
Một lần nữa xin cảm ơn tất cả mọi người, cầu chúc cho tất cả mọi người mạnh
khỏe, vui vẻ, hạnh phúc và thành công!

Sinh viên
Nguyễn xuân Đức

TÓM TẮT NỘI DUNG ĐỒ ÁN

Lĩnh vực rô bốt đang ngày càng chiếm được sự quan tâm của các nhà nghiên cứu
và xã hội. Từ tình hình thực tế đó, việc xây dựng các chương trình hoạt động cho rô
bốt là điều thiết yếu, đặc biệt đối với rô bốt di động. Bài toán rô bốt di động bám đối
tượng là một bài toán thường gặp trong lĩnh vực rô bốt.
Đồ án này trình bày xây dựng một giải pháp điều khiển rô bốt di động bám đối

tượng dựa vào thuật toán CamShift trong thư viện OpenCV. Để theo dõi đối tượng
trong OpenCV cần phải có quá trình dò tìm, phân tích và nhận dạng đối tượng.
Bố cục của đồ án này được trình bày như sau: trước hết đồ án trình bày những
khái niệm về thư viện OpenCV, sau đó trình bày các cơ sở lý thuyết của thư viện
OpenCV. Trên cơ sở tìm hiểu tìm hiểu thư viện OpenCV đồ án xây dựng thuật toán
theo dõi đối tượng dựa vào một thuật toán rất phổ biến trong OpenCV là thuật toán
CamShift. Một Webcam được sử dụng để thu thập hình ảnh đóng vai trò như là con
mắt của rô bốt và một laptop được sử dụng làm bộ xử lý trung tâm cho rô bốt. Mô
hình rô bốt được chế tạo nhằm kiểm nghiệm thuật toán đã xây dựng. Kết quả đồ án là
căn cứ để phát triển và xây dựng các thuật toán điều khiển rô bốt sử dụng OpenCV sau
này.















MỤC LỤC

MỞ ĐẦU 1
CHƯƠNG 1. GIỚI THIỆU CHUNG 2

1.1. Giới thiệu chung về rô bốt 2
1.2. Giới thiệu rô bốt bám đối tượng 3
1.3. Mục tiêu của đồ án 6
1.4. Giới hạn của đồ án 6
CHƯƠNG 2. TỔNG QUAN VỀ THƯ VIỆN OPENCV VÀ MỘT SỐ LINH KIỆN SỬ
DỤNG TRONG KHỐI PHẦN CỨNG 7
2.1. Thế nào là thị giác máy? 7
2.2. Thư viện OpenCV 7
2.2.1. OpenCV là gì? 7
2.2.2. Vì sao lựa chọn OpenCV? 8
2.2.3. Cấu trúc và nội dung OpenCV như thế nào? 9
2.2.4. Các hàm I/O trong OpenCV 10
2.2.5. Các hàm thực hiện xử lý ảnh 12
2.2.6. Các hàm Histograms and Matching 13
2.2.7. Hàm Contours 13
2.2.8. Cơ sở toán học của thuật toán CamShift 14
2.3. Cơ bản về PIC16F877A 15
2.3.1. PIC là gì? 15
2.3.2. Đặc điểm nổi bật của PIC16F877A 15
2.3.3. Sơ đồ các chân của PIC16F877A 16
2.4. Giao tiếp RS232 18
2.5. Giới thiệu về chíp mạch cầu L298N 20
CHƯƠNG 3. XÂY DỰNG PHẦN MỀM ĐIỀU KHIỂN 22
3.1. Thị giác máy điều khiển rô bốt di động bám đối tượng 22
3.2. Thuật toán tính hướng và kích cỡ của đối tượng cần theo dõi 23
3.2.1. Thuật toán chung 23
3.2.2. Nhận dạng và bám mục tiêu di động 24
3.2.3. Chuyển đổi không gian màu từ RGB đến HSV 25
3.2.4. Histogram 26
3.2.5. Lọc nhiễu Filter 27

3.2.6. Thuật toán CamShift 28
3.2.7. Thiết kế hoàn chỉnh phần mềm điều khiển 30
CHƯƠNG 4. XÂY DỰNG MẠCH PHẦN CỨNG 34
4.1. Sơ đồ mạch dùng trong đồ án 34
4.1.1. Khối điều khiển trung tâm 34
4.1.2. Khối nguồn 35
4.1.3. Khối truyền thông RS232 35
4.1.4. Khối điều khiển động cơ 36
4.2. Tập lệnh điều khiển rô bốt 37
CHƯƠNG 5. KẾT QUẢ THỰC HIỆN 38
5.1. Kết quả thử nghiệm với môi trường tĩnh 40
5.2. Kết quả thử nghiệm với môi môi trường động 42
KẾT LUẬN 46
PHỤ LỤC A. CHƯƠNG TRÌNH XỬ LÝ ẢNH 48
PHỤ LỤC B. CHƯƠNG TRÌNH ĐIỀU KHIỂN ROBOT 62
PHỤ LỤC C. CHƯƠNG TRÌNH TRUYỀN THÔNG RS232 66
TÀI LIỆU THAM KHẢO 72


Yahoo:thoi_chao_em_12325 Email:

DANH SÁCH HÌNH VẼ

Hình 1: PANrobot (nguồn: mobilerobot.org 4
Hình 2: Rô bốt MIDbo (nguồn: telepresenceoptions.com) 4
Hình 3: Rô bốt Pops (nguồn: slashgear.com) 5
Hình 4: Rô bốt thám hiểm sao hoả (nguồn: robotics.youngester.com) 5
Hình 5: Quá trình phát triển của OpenCV 8
Hình 6: Cấu trúc cơ sở của OpenCV 9
Hình 7: PIC16F877A 16

Hình 8: Sơ đồ khối của PIC16F877A 17
Hình 9: Cổng giao tiếp RS232 19
Hình 10: Chíp mạch cầu L298N 21
Hình 11: Sơ đồ khối tổng quát của rô bốt 22
Hình 12: Sơ đồ thuật toán chung 23
Hình 13: Mặt phẳng ảnh 24
Hình 14: Biểu diễn đối tượng di chuyển trên mặt phẳng ảnh 25
Hình 15: Chuyển đối không gian màu RGB đến HSV 26
Hình 16: Histogram 26
Hình 17: kết quả trước và sau khi lọc nhiễu 27
Hình 18: Sơ đồ thuật toán CamShift 28
Hình 19: Kết quả tính toạ độ tâm bằng thuật toán CamShift 29
Hình 20: Kết quả bước đầu theo dõi đối tượng bằng thuật toán CamShift 29
Hình 21: Giao diện phần mềm thiết kế hoàn chỉnh 31
Hình 22: Kết quả thử nghiệm với phần mềm 32
Hình 23: Kết quả thử nghiệm với phần mềm 33
Hình 24: Sơ đồ khối điều khiển trung tâm 34
Hình 25: Sơ đồ khối nguồn 35

Yahoo:thoi_chao_em_12325 Email:

Hình 26: Sơ đồ khối truyền thông RS232 35
Hình 27: Sơ đồ nguyên lý mạch cầu điều khiển động cơ 36
Hình 28: Sơ đồ phần cứng hoàn chỉnh. 36
Hình 29: Hình ảnh robot hoàn chỉnh 39
























Yahoo:thoi_chao_em_12325 Email:

DANH SÁCH BIỂU ĐỒ

Biểu đồ 1: Giá trị toạ độ tâm đối tượng môi trường tĩnh (160x120). 40
Biểu đồ 2: Giá trị toạ độ tâm đối tượng môi trường tĩnh (176x144). 40
Biểu đồ 3: Giá trị toạ độ tâm đối tượng môi trường tĩnh (320x240) 41
Biểu đồ 4: Giá trị toạ độ tâm đối tượng môi trường tĩnh (640x480). 42
Biểu đồ 5: Giá trị toạ độ tâm đối tượng môi trường động (160x120). 42
Biểu đồ 6: Giá trị toạ độ tâm đối tượng môi trường động (176x144). 43
Biểu đồ 7: Giá trị toạ độ tâm đối tượng môi trường động (320x240). 43
Biểu đồ 8: Giá trị toạ độ tâm đối tượng môi trường động (640x480). 44

Biểu đồ 9: Giá trị toạ độ tâm đối tượng môi trường động tốc độ không đổi 44



Yahoo:thoi_chao_em_12325 Email:

DANH SÁCH BẢNG

Bảng 1: Chức năng các chân của L298N 20
Bảng 2: Tóm tắt nguyên tắc điều khiển động cơ sử dụng L298N 21
Bảng 3: Tập lệnh điều khiển rô bốt 37























Yahoo:thoi_chao_em_12325 Email:
1

MỞ ĐẦU

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 nhận thức 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ư như các máy tính, rô bốt v v. 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 v v. 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 rất nhiều. OpenCV là thư viện mã nguồn mở về
xử lý ảnh của Intel nó đáp ứng đầy đủ các yêu cầu đó của lĩnh vực xử lý ảnh.
Trên thế giới lĩnh vực rô bốt di động sử dụng xử lý ảnh phát triển vô cùng mạnh
mẽ và có được những bước tiến đáng kinh ngạc. Ở Việt Nam lĩnh vực rô bốt di động
đang rất phát triển, tuy nhiên lĩnh vực rô bốt di động sử dụng công cụ xử lý ảnh còn
mới mẻ do thiếu các thiết bị hỗ trợ và tài liệu. Vì vậy, đây sẽ là một hướng phát triển
mới đầy hứa hẹn và cũng không ít thách thức. Với mong muốn tham gia vào lĩnh vực
còn mới này và góp phần vào sự phát triển lĩnh vực rô bốt di động sử dụng xử lý ảnh ở
Việt Nam, em thực hiện đề tài “Điều khiển rô bốt di động sử dụng thư viện OpenCV”.











Yahoo:thoi_chao_em_12325 Email:
2

CHƯƠNG 1
GIỚI THIỆU CHUNG

1.1. Giới thiệu chung về rô bốt
Rô bốt hay người máy là một loại máy có thể thực hiện những công việc một
cách tự động bằng sự điều khiển của 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ử.
Với sự xuất hiện và chuyển động của mình, rô bốt gây cho người ta cảm giác rằng nó
giác quan giống như con người. Từ "rô bốt" (người máy) thường được hiểu với hai
nghĩa: rô bốt cơ khí và phần mềm tự hoạt động. Về lĩnh vực người máy, Nhật Bản là
nước đi đầu thế giới 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 lĩnh vực công nghiệp, y tế, giáo dục đào
tạo, giải trí, 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ả các lĩnh vực của khoa học và công nghệ.
Ngày nay, người ta vấn còn đang tranh cãi về vấn đề “Một loại máy như thế nào
thì đủ tiêu chuẩn để được gọi 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ác đặc điểm sau đây:
 Không phải là tự nhiên, tức là do con người sáng tạo ra.
 Có khả năng nhận biết môi trường xung quanh.

 Có thể tương tác với những vật thể trong môi trường.
 Có sự thông minh, có khả năng đưa ra các lựa chọn dựa trên môi trường và
được điều khiển một cách tự động theo những trình tự đã được lập trình trước.
 Có khả năng điều khiển được bằng các lệnh để có thể thay đổi tùy theo yêu cầu
của người sử dụng.
 Có thể di chuyển quay hoặc tịnh tiến theo một hay nhiều chiều.
 Có sự khéo léo trong vận động.

Yahoo:thoi_chao_em_12325 Email:
3

1.2. Giới thiệu rô bốt bám đối tượng
Hệ thống điều khiển rô bốt có thị giác được sử dụng để theo dõi mục tiêu di động
trong các ứng dụng công nghiệp, quốc phòng và xã hội. Hệ thống thị giác có thể được
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ệ toạ độ 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ệ 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 truc eye-in-hand là điều khiển tay máy sao cho ảnh của mục tiêu cố
định hay di động luôn được duy trì ở vị trí mong muốn trên mặt phẳng ảnh thu được.
Trên cơ sở ảnh thu được từ camera, được số hoá và tích hợp trong vòng điều khiển
phản hồi, hệ thống điều khiển các khớp của tay máy.
Các nghiên cứu của môi trường động bị bỏ khá xa so với của môi trường tĩnh do
bị ảnh hưởng khá lớn của tốc độ tính toán cũng như độ chính 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ý và xem xét đến các quà trình
nhiễu tác động lên quá trình thu thập hình ảnh.
Một 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ỉ có một mục tiêu quan
tâm, còn các đối tượng khác thì không.
Để nhận biết được thông tin về 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 rất quan trọng. Các điểm lỗ, các góc cạnh, các đặc điểm hình
học của mục tiêu được phân tích qua quá trình nhận dạng. Đặc tính về trọng tâm của
mục tiêu có thể tính dễ dàng qua moment bâc nhất trong môi trường tĩnh, nhưng trong
môi trường động việc này rất khó vì chi phí thời gian tính toán lớn.
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 được
sử dụng để tính toán toạ độ trọng tâm của đối tượng.

Yahoo:thoi_chao_em_12325 Email:
4


Hình 1: PANrobot (nguồn: mobilerobot.org




Hình 2: Rô bốt MIDbo (nguồn: telepresenceoptions.com)




Yahoo:thoi_chao_em_12325 Email:
5


Hình 3: Rô bốt Pops (nguồn: slashgear.com)


Hình 4: Rô bốt thám hiểm sao hoả (nguồn: robotics.youngester.com)



Yahoo:thoi_chao_em_12325 Email:
6


1.3. Mục tiêu của đồ án
Mục tiêu nghiên cứu của đồ án có thể chia thành hai phần như sau:
Thứ nhất: Xây dựng phần mềm rô bốt di động bám đối tượng sử dụng OpenCV.
Thuật toán được lựa chọn để sử dụng trong đồ án là thuật toán CamShift.
Thứ hai: Xây dựng khối phần cứng để kiểm nghiệm giải thuật của thuật toán đã
xây dựng sử dụng vi điều khiển PIC16F877A.
Như vậy công việc chính của đồ án là:
 Tìm hiểu thư viện OpenCV.
 Tìm hiểu về thuật toán CamShift.
 Lập trình điều khiển rô bốt di động sử dụng thuật toán CamShift.
 Thiết kế mạch phần cứng và lập trình điều khiển động cơ sử dụng
PIC16F877A.
 Lập trình truyền thông nối tiếp RS232.

1.4. Giới hạn của đồ án
- Đồ án tập trung chủ yếu vào xây dựng phần mềm điều khiển sử dụng thư viện
OpenCV.
- Rô bốt chỉ thực hiện việc bám đối tượng trong một số môi trường và đối tượng
nhất định mà ít bị ảnh hưởng của nhiễu.
- Mạch phần cứng và thuật toán điều khiển động cơ chỉ thực hiện việc điều khiển
hướng của rô bốt, nghĩa là không điều khiển tốc độ của rô bốt.
- Sử dụng lại phần cơ khí đồ án khoá trước đã xây dựng được.






Yahoo:thoi_chao_em_12325 Email:
7

CHƯƠNG 2
TỔNG QUAN VỀ THƯ VIỆN OPENCV
VÀ MỘT SỐ LINH KIỆN SỬ DỤNG TRONG KHỐI PHẦN CỨNG

2.1. Thế nào là thị giác máy
Thị giác máy là một lĩnh vực đa dạng và đang rất phát triển. Khái niệm thị giác
máy (Computer vision) có liên quan tới nhiều ngành học và hướng nghiên cứu khác
nhau. 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 phim thì khái niệm và kỹ thuật về thị giác máy ngày càng được
nhắc đến và nghiên cứu nhiều hơn cho tới ngày nay. Hiện tại, lĩnh vực này được các
chuyên gia đánh giá là vẫn còn mới mẻ và sẽ có rất nhiều thay đổi trong thời gian tới.
Lĩnh vực nghiên cứu của thị giác máy rất rộng, và đặc điểm chung là các bài toán
về thị giác máy tính đều không có một đề bài chung và cách giải duy nhất. Mỗi giải
pháp giải quyết vấn đều được một kết quả nhất định cho những trường hợp cụ thể. Ta
có thể thấy sự tương quan giữa thị giác máy với các lĩnh khác.

2.2. Thư viện OpenCV
2.2.1. OpenCV là gì ?
OpenCV viết tắt của Open Source Computer Vision Library.
Nó chứa hơn 500 hàm sử dụng trong thị giác máy.
OpenCV là một thư viện mã nguồn mở (open source)
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 Linux,
Window và Mac 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 lĩnh vực y học,
bảo mật, rô bốt học v v. Nó chứa các lập trình xử lý ảnh rất đơn giản, kể cả 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.

Yahoo:thoi_chao_em_12325 Email:
8

Kể từ khi được giới thiệu 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ụ trong lĩnh vực hàng không
vũ trụ, bản đồ web, 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, theo dõi tự động và hệ thống bảo mật, quản lý hệ thống sản xuất, xử lý
camera, ứng dụng trong quân sự, hệ thống hàng không không người lái, trên mặt đất,
các tàu ngầm. Ngoài ra, nó còn được sử dụng trong nhận dạng âm thanh. OpenCV còn
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,
Asimo.


Hình 5: Quá trình phát triển của OpenCV

2.2.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à liê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 của 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ác thuật toán rất 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 (điển hình như Intel, Microsoft, IBM, Siemens, Google v v.)
và các trung tâm nghiên cứu như (Stanford, MIT, CMU, Cambridge, INRIA…).

Yahoo:thoi_chao_em_12325 Email:
9

Hơn 14000 thành viên trên forum OpenCVyahoogroups.com với trung bình 10
đến 20 bức thông điệp được trao đổi hàng ngày.
Điều đó có thể khẳng định OpenCV thực sự đã góp phần vô cùng lớn trong lĩnh
vực thị giác máy.
2.2.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 thành 5 phần
chính, 4 trong số đó được chỉ ra trong hình 6.
CV (computer vision) là thành phần chứa những xử lý ảnh cơ sở và thuật toán thị
giác máy ở mức cao.
MLL (machine learning library) là thư viện machine learning, cái này bao gồm
rất nhiều lớp thống kê và gộp các công cụ xử lý.
HighGUI chứa các thủ tục vào ra và các hàm dùng cho việc lưu trữ và tải ảnh
video.
CXCore chứa cấu trúc và nội dung dữ liệu cơ sở.

Hình 6: Cấu trúc cơ sở của OpenCV


Yahoo:thoi_chao_em_12325 Email:
10

2.2.4. Các hàm I/O trong OpenCV
OpenCV cung cấp các hàm mà cho phép chúng ta tương tác trực tiếp với hệ điều

hành, các file hệ thống, các phần cứng như Webcam. Các hàm này nằm trong thư viện
HighGUI, HighGUI cho phép mở một window, hiển thị bức ảnh, đọc các file liên quan
đến đồ hoạ (ảnh, video) các file ảnh như jpg, bmp v v. các file video như avi, wma,
mp4, dat v v. Ngoài ra nó còn xử lý các sự kiện chuột, bàn phím, OpenCV còn cho
phép chúng ta lựa chọn thuật toán linh động hơn bằng cách cung cấp các hàm tạo
thanh trượt slider, switch v v. Để làm việc với OpenCV trước hết phải học các hàm
trong thư viện này.
Thư viện HighGUI có thể chia thành 3 phần: phần cứng, phần file hệ thống và
phần GUI (Graphical User Interface) chúng ta có thể xem xét các phần trong thư viện
HighGUI như sau.
Phần cứng: là phần thiết yếu nhất, liên quan đến hoạt động của Camera, trong
phần lớn hệ điều hành việc tương tác với phần cứng rất khó khăn và thực sự rất khó
nhưng OpenCV cung cấp hàm đơn giản để thực hiện việc tương tác này ví dụ:
cvCaptureFromCAM().
Phần file hệ thống: là khái niệm liên quan đến việc tải và lưu ảnh, một đặc điểm
rất tuyệt vời trong thư viện HighGUI là cho phép chúng ta làm việc với ảnh tương tự
khi làm việc với video. Vì vậy chúng ta có thể nhanh chóng tiếp cận với việc xử lý ảnh
mà không mất nhiều thời gian cho việc tải, lưu ảnh, video.
Phần GUI: là hệ thống cửa sổ (Window), thư viện cung cấp một số hàm đơn giản
mà cho phép chúng ta mở một window hiển thị ảnh trên window này. Ngoài ra nó còn
cho phép chúng ta thực thi các sự kiện nhận được từ chuột và bàn phím.
Một số hàm đơn giản thường xuyên sử dụng trong thư viện HighGUI như sau:
 Đầu tiên chúng ta cần học cách làm thế nào để đọc và viết các files ảnh, chụp
video chuyển đổi giữa các định dạng màu, và truy cập dữ liệu điểm ảnh tất cả
qua giao diện OpenCV.
 Đọc và viết một bức ảnh.
 Bức ảnh vào/ra thì rất dễ dàng trong OpenCV, để đọc một file ảnh, đơn giản
gọi hàm cvLoadImage(tên file). OpenCV hỗ trợ hầu hết các định dạng phổ biến

Yahoo:thoi_chao_em_12325 Email:

11

kể cả JPEG, PNG và BMP. Bạn không cần cung cấp thông tin định dạng.
cvLoadImage() tự động quyết định dạng file thông qua file header này.
 Để viết một bức ảnh đến một file, ta dùng hàm cvSaveImage(). Hàm này cũng
tự quyết định file định dạng, để sử dụng từ tên file mở rộng.
 Cả cvLoadImage và cvSaveImage đều nằm trong module HighGUI .
 Khi bạn sử dụng xong bức ảnh đầu vào nhận được từ cvLoadImage(), loại bỏ
nó bằng hàm cvReleaseImage(). Hàm này đưa ra một địa chỉ của con trỏ giống
đầu vào của nó bởi việc nó làm là loại bỏ an toàn (Safe Release). Nó chỉ loại
bức ảnh này khi bức ảnh là non-null. Sau khi loại bỏ xong nó đặt giá trị con trỏ
về 0.
 Làm việc với Video tương tự như là việc với ảnh.
 Nhận các frame từ một webcam, hay các thiết bị video số khác thì dễ dàng như
tải nó lên từ một file có sẵn. Để nhận một khung từ camera ta chỉ việc thay
cvCreateFileCapture() bằng hàm cvCreateCameraCapture().
 Chúng ta có thể tạo cvCapture*Object với cvCreateFileCapture(). Chúng ta sử
dụng cvQueryFrame () để nhận từng frame và cvWaitkey(33) để chờ 33ms giữa
từng frame. Chúng ta sử dụng cvReleaseCapture() để loại bỏ capture khi ngừng
sử dụng.
 Copy một bức ảnh.
 Lưu trữ bức ảnh trong OpenCV.
 OpenCV lưu bức ảnh giống cấu trúc C, IplImage, Ipl viết tắt của image
processing library.
Kiểu dữ liệu IplImage được định nghĩa trong CXCORE. Thêm vào dữ liệu
ảnh thực, nó chứa một số đặc điểm để mô tả như sau:
 Width - độ rộng bức ảnh tính theo pixel.
 Height - độ cao bức ảnh tính theo pixel.
 Depth - một kiểu tiền định nghĩa chỉ rõ lượng bits/pixel/channel.
Ví dụ : Depth=IPL_DEPTH_8U, dữ liệu cho mỗi pixel kênh ảnh được lưu giữ

như 8-bits không dấu.

Yahoo:thoi_chao_em_12325 Email:
12

 nChannel – số lượng của dữ liệu channel ảnh (từ 1- 4). Mỗi một channel chứa
một kiểu của pixel dữ liệu.
ví dụ: bức ảnh RGB có 3 kênh R (đỏ), G (xanh lá cây), B (xanh da trời).
 Grayscale là bức ảnh chỉ chứa một kênh điểm ảnh sáng nhất.
 Truy cập giá trị điểm ảnh.
 Chúng ta có thể tạo ra rất nhiều hàm truy cập điểm ảnh mà không cần tác động
trực tiếp đến dữ liệu ảnh thô.
Cách dễ nhất để đọc từng điểm ảnh riêng lẻ là sử dụng hàm cvGet2D.
 cvScalar cvGet2D(const *CvArr, int row, int col).
 Hàm này có 3 thuộc tính: một pointer trỏ đến dữ liệu chứa trong CvArr*, một
mảng chỉ rõ vị trí hàng và cột. Hàng topmost của điểm ảnh là row=0, và
bottommost là row=height-1.
2.2.5. Các hàm thực hiện xử lý ảnh
Thư viện HighGUI chỉ cung cấp các hàm thực hiện vào ra bức ảnh tuy nhiên vấn
đề xử lý ảnh mới thực sự là quan trọng và khó khăn. OpenCV cung cấp các hàm thực
hiện xử lý ảnh nằm trong thư viện cv. Một bức ảnh không chỉ đơn giản là một mảng
giá trị màu sắc. khi chúng ta đề cập đến xử lý ảnh thì nó đã bao gồm các hàm xử lý
liên quan đến cấu trúc của bức ảnh.
Một số hàm xử lý ảnh thường xuyên sử dụng như sau:
 Smoothing (làm mịn).
Smoothing hay còn gọi là blurring nó là một thuật toán xử lý ảnh đơn giản và
thường xuyên sử dụng. Có rất nhiều nguyên nhân chúng ta dùng đến smoothing nhưng
nó thường dùng để loại bỏ nhiễu do máy ảnh sinh ra. Smoothing quan trọng khi bạn
muốn giảm độ phân giải của một bức ảnh theo rất nhiều cách khác nhau.
Bằng việc thay thế kiểu smooth và các thông số sẽ có các bức ảnh tương đối khác

nhau tuy theo mục đích sử dụng nhưng thường dùng nhất vẫn là CV_GAUSSIAN.
 Image morphology (hình thái học bức ảnh).
OpenCV cung cấp hàm chuyển đổi morphology nhanh chóng và tiện lợi khi làm
việc với bức ảnh. Cơ bản của morphology là dilation (giãn) và erosion (co) chúng ngày

Yahoo:thoi_chao_em_12325 Email:
13

càng được sử dụng rộng rãi trong việc loại bỏ nhiễu, cô lập những thành phần riêng rẽ,
và liên kết các thành phần với nhau.
 Theshold (ngưỡng).
Chúng ta thường làm rất nhiều bước xử lý ảnh khác nhau và đưa ra những quyết
định cuối cùng về điểm ảnh trên một bức ảnh hay nói cách khác là loại bỏ giá trị phía
trên hoặc dưới một ngưỡng nào đó giữ lại nhưng điểm ảnh nằm trong khoảng giá trị
mong muốn lúc đó ta dùng hàm threshold.
2.2.6. Các hàm Histograms and Matching
 Histogram.
Trong việc phân tích hình ảnh thông tin về đối tượng và video, chúng ta thường
muốn biểu diễn chúng giống như là một histogram. Histogram có thể sử dụng để biểu
diễn rất nhiều dạng khác nhau như phân bố màu của đối tượng, độ dốc mẫu cạnh của
một đối tượng, hay xác suất phân bố vị trí của đối tượng.
Tìm histogram được sử dụng rất nhiều trong các chương trình ứng dụng thị giác
máy tính. Histogram được sử dụng để dò tìm sự thay đổi giữa các cảnh trong video
bằng cách đánh dấu khi cạnh và màu sắc thay đổi từ khung này đến khung khác.
Chúng sử dụng để nhận dạng nhưng điểm quan tâm trên một bức ảnh bằng cách gán
mỗi điểm ảnh một “tag” chứa những Histogram của những đặc điểm gần nhất.
Histogram của cạnh, màu, góc và rất nhiều đặc điểm khác. Một chuỗi các màu sắc,
cạnh có thể dùng để xác nhận dù có hay không một video đã được copy trên web.
 Ghép mẫu template matching.
Hàm ghép cvMatchTemplate() không dựa trên histogram, hơn nữa, hàm này

ghép một bức ảnh thực đến một bức ảnh đầu vào bằng cách “Sliding” đường dẫn qua
bức ảnh đầu vào này sử dụng thao tác ghép mô tả trong phần này.
2.2.7. Hàm Contours
Mặc dù thuật toán như dò tìm cạnh candy có thể sử dụng để tìm ra cạnh pixel để
phân bức ảnh thành các phần khác nhau. Bước tiếp theo là xây dựng các cạnh này
thành contours.

Yahoo:thoi_chao_em_12325 Email:
14

2.2.8. Cơ sở toán học của thuật toán CamShift
Camshift viết gọn của “Continuously Adaptive Mean Shift” là cơ sở của thuật
toán theo dõi khuôn mặt trong OpenCV. Nó bao gồm thuật toán cơ sở Mean Shift với
thích ứng các bước thay đổi kích cỡ của vùng. Nhân là một hàm step đơn giản nằm
trong một bản đồ vỏ xác suất (skin-probability). Vỏ xác suất của mỗi một điểm ảnh
được tính toán dựa trên màu sắc bằng cách sử dụng một phương pháp gọi là Histogram
backprojection. Màu sắc được đưa ra như Hue từ mô hình màu HSV.
Kể từ nhân là một hàm step, Mean Shift ở mỗi một lần lặp thì chỉ đơn giản là giá
trị trung bình x và y của vỏ xác suất đóng góp trong vùng hiện tại. Điều này được xác
định bằng cách chia moment thứ nhất của vùng này cho moment thứ không ở mỗi lần
lặp và dịch chuyển vùng đến trọng tâm xác suất.
Sau khi Mean Shift hội tụ đến một vị trí (x,y), phạm vi của vùng được cập nhật
dựa trên giá trị hiện tại của moment thứ 0. Giá trị của bản cập nhật này có thể thay đổi,
phạm vi tuyến tính của nó được giả định là tỉ lệ thuận với căn bậc 2 của tổng của các
khoản đóng góp xác suất của khu vực hiện tại (ví dụ. Moment thứ không). Chiều rộng
và chiều dài tại thời điểm thứ i sẽ được tính thông qua giá trị tại thời điểm thứ i-1,
nghĩa là giá trị trước đó.
Trong thuật toán CamShift, một bức ảnh về xác suất phân bố màu sắc của bức
ảnh trong chuỗi video được tạo ra. Đầu tiên nó tạo ra một mẫu mô tả hue sử dụng một
biểu đồ màu sắc (color Histogram) và sử dụng không gian màu Hue Saturation Value

(HSV) được tham chiếu từ không gian màu tiêu chuẩn RGB. Vì phân bố màu sắc của
các bức ảnh trong video thay đổi theo thời gian, nên thuật toán CamShift đã được sửa
đổi để dễ dàng thích ứng với sự thay đổi phân bố xác suất màu sắc của mục tiêu nó
theo dõi.
Trong OpenCV thuật toán CamShift được điều chỉnh từ thuật toán Mean Shift.
Và nó đươc tính toán như sau:
1) Chọn vị trí ban đầu của Search Window.
2) Dùng thuật toán Mean Shift (lặp lại một hoặc nhiều lần), lưu moment thứ 0 này.
3) Đặt kích cỡ của cửa sổ tìm kiếm bằng một hàm của moment thứ 0 tìm được
trong bước 2.
4) Lặp lại bước 2 và 3 cho đến khi hội tụ (vị trí dịch chuyển chính ít hơn giá trị
threshold hiện tại).

Yahoo:thoi_chao_em_12325 Email:
15


2.3. Cơ bản về PIC16F877A
2.3.1. PIC là gì ?
PIC là viết tắt của “Programable Intelligent Computer”, tạm dịch là “ Máy tính
thông minh khả trình” do hãng Microchip Technology đặt tên cho vi điều khiển đầu
tiên của họ và phát triển thành dòng họ vi điều khiển PIC sau này.
2.3.2. Đặc điểm nổi bật của PIC16F877A
 Sử dụng công nghệ tích hợp RISC CPU.
 Người sử dụng có thể lập trình với 35 câu lệnh cơ bản.
 Tất cả câu lệnh thực hiện trong một chu kỳ lệnh, ngoại trừ một số câu lệnh
rẽ nhánh thực hiện trong 2 chu kỳ lệnh.
 Tốc độ hoạt động xung đồng hồ là DC-20MHZ.
 Bộ nhớ hoạt động là flash 8kx14 words.
 Bộ nhớ RAM 368x8 bytes.

 Bộ nhớ EFPROM 256x8 bytes.
- Khả năng của bộ vi xử lý này.
 Khả năng ngắt lên đến 14 ngắt trong và ngắt ngoài.
 Ngăn nhớ Stack được phân chia làm 8 mức.
 Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
 Nguồn khởi động (POR).
 Bộ tạo xung (PWRT) và bộ tạo dao động (OST).
 Bộ đếm thời gian (WDT) với nguồn dao động trên chíp (nguồn dao động
RC) hoạt động đáng tin cậy.
 Có mã chương trình bảo vệ.
 Phương thức cất giữ SLEEP.
 Có bảng lựa chọn dao động.
 Công nghệ CMOS FLASH/EFPRO nguồn mức thấp tốc độ cao.
 Thiết kế hoàn toàn tĩnh.
 Mạch chương trình nối tiếp có 2 chân.
 Mạch xử lý đọc ghi tới bộ nhớ chương trình.
 Dải điện thế hoạt động 2.0 đến 5.5V.

×