1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

82 1,1K 7

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 7,33 MB

Nội dung

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

Trang 1

ĐẠ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

HÀ NỘI-2010

Trang 2

ĐẠ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

Trang 3

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

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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

Trang 9

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

Trang 10

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

Trang 11

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”

Trang 12

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

Trang 13

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

Trang 14

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

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

Trang 15

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)

Trang 16

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

Trang 17

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) http://sourceforge.net/ 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

Trang 18

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…)

Trang 19

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

Trang 20

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

Trang 21

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

Trang 22

 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:

 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

Trang 23

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

Trang 24

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)

Trang 25

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

Trang 26

 Nguồn điện sử dụng 25mA

 Dãy nhiệt độ công nghiệp và thuận lợi

 Công suất tiêu thụ thấp

- Các đặc tính nổi bật của thiết bị ngoại vi trên Chip

 TIMER0: 8 bits của bộ định thời, bộ đếm với hệ số tỉ lệ trước

 TIMER1: 16 bits của bộ định thời, bộ đếm với hệ số tỉ lệ trước, có khả năng tăng trong khi ở chế độ sleep qua xung đồng hồ được cung cấp bên ngoài

 TIMER2: 8 bits của bộ định thời, bộ đếm với 8 bits của hệ số tỉ lệ trước, hệ

số tỉ lệ sau

2.3.3 Sơ đồ các chân của PIC16F877A

Hình 7: PIC16F877A

Trang 27

- Sơ đồ khối vi điều khiển PIC16F877A

Hình 8: Sơ đồ khối của PIC16F877A

Trang 28

Đặc điểm:

 Chân 13, 14 là các chân kết nối với thạch anh tạo dao động cho chip (Nó được ví như là quả tim của chíp) Ta mắc thêm vào 2 tụ điện có điện dung

= 33pF để tăng độ ổn định cho dao động thạch anh

 PORTB vì PORTB lúc này đóng vai trò là ngõ xuất nên các thanh ghi TRISB trong chíp phải được đặt giá trị logic 1 (Nếu ta đặt ngõ B là ngõ nhập thì ta phải đặt giá trị logic 0)

 Các thông số cần thiết khi làm việc với PIC ta dùng bảng datasheet của họ PIC16F877A

 VDD: Là điện áp cấp nguồn cho vi điều khiển, nguồn điện cấp là 5V

 GND: Là chân nối mass khi sử dụng cần thiết kế một mạch ổn áp để bảo vệ cho vi điều khiển , thường sử dụng IC ổn áp 7805

 PORTA: Có 6 pin từ chân 2 đến chân 7

 PORTB: Có 8 chân từ 34 đến 40, ngoài chức năng làm cổng xuất nhập còn

có thêm một số chức năng phụ khác

 PORTC, PORTE: Tương tự như PORTB

 Chân Reset (MCLR): Ngõ vào ở chân 1 dùng để thiết lập điều kiện đầu cho

Chuẩn giao tiếp RS232

Vấn đề giao tiếp giữa PC và vi điều khiển rất quan trọng trong các ứng dụng điều khiển, đo lường v v ghép nối qua cổng nối tiếp RS232 là một trong những kỹ thuật được sử dụng rộng rãi để ghép nối các thiết bị ngoại vi với máy tính Nó là một chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều nhất là 2 thiết bị, chiều dài kết nối lớn nhất cho phép để đảm bảo truyền, nhận dữ liệu là 12.5m đến 25.4m, tốc

độ 20kbit/s, đôi khi là tốc độ 115kbit/s với một số thiết bị đặc biệt

Trang 29

Ở đây tôi chọn chuẩn giao tiếp RS232 và điều khiển Active X Microsoft Communication 6.0 (MSComm)

 Thiết lập giao diện cho chương trình

 Viết mã cho chương trình

Giao diện của RS232-9-pin và chức năng các chân như sau:

- Chân 1: Data Carrier Detect (DCD): phát tín hiệu mang dữ liệu

- Chân 2: Receive Data (RXD): Nhận dữ liệu

- Chân 3: Transmit Data (TxD): Truyền dữ liệu

- Chân 4: Data Terminal Ready (DTR): Đầu cuối dữ liệu sẵn sàng kích hoạt bởi

bộ phận khi muốn truyền dữ liệu

- Chân 5: Signal Ground (SG): mass của tín hiệu

- Chân 6: Data Set Ready (DSR): Dữ liệu sẵn sàng, được kích hoạt bởi bộ nhận khi nó muốn truyền dữ liệu

- Chân 7: Request to Send: Yêu cầu gửi bộ truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu

- Chân 8: Clear to Send (CTS): Xoá để gửi bộ nhận đặt đường này lên mức hoạt động để thông báo bộ truyền là nó đã sẵn sàng nhận tín hiệu

- Chân 9: Ring Indicate (RI): Báo chuông cho biết là bộ nhận đang nhận tín hiệu chuông

Hình 9: Cổng giao tiếp RS232

Trang 30

2.5 Giới thiệu về chíp mạch cầu L298N

IC L298N là mạch tích hợp đơn chíp có vỏ công suất 15 chân (multi watt 15) Là

IC mạch cầu đôi có khả năng hoạt động ở điện áp cao, dòng cao Nó có 2 chân enable

có chức năng cho phép hoặc không cho phép chíp hoạt động, độc lập với chân tín hiệu vào Cực phát (emitter) của transitor dưới của mỗi mạch cầu được nối với nhau và nối

ra chân ngoài để nối với mạch điện trở cảm ứng dòng khi cần

Nó có thêm một chân cấp nguồn giúp mạch logic có thể cấp nguồn ở điện thế thấp hơn

Bảng 1: Chức năng các chân của L298N

1; 15 Sensor A;

Sensor B

Nối chân này qua điện trở cảm ứng dòng xuống GND

để điều khiển dòng tải

Out 2

Ngõ ra của cầu A Dòng của tải mắc giữa 2 chân này được quy định bởi chân 1

4 VS Chân cấp nguồn cho tầng công suất, cần có một tụ

điện cảm kháng 100nF nối giữa chân này và chân GND

9 VSS Chân cấp nguồn cho khối logic Cần có tụ điện 100nF

giữa chân này với chân GND 10; 12 Input 3;

Input 4 Các chân logic ngõ vào của B

Trang 31

- Bảng điều khiển động cơ sử dụng L298N

Ta có thể thay đổi trạng thái động cơ dựa vào bảng sự thật sau (Input 1; Input 2), ở đây tôi luôn để mức ra ở chân cho phép (enable) là mức cao

Bảng 2: Tóm tắt nguyên tắc điều khiển động cơ sử dụng L298N

Trang 32

CHƯƠNG 3 XÂY DỰNG PHẦN MỀM ĐIỀU KHIỂN

Sơ đồ tổng quát của rô bốt di động

Hình 11: Sơ đồ khối tổng quát của rô bốt

3.1 Thị giác máy điều khiển rô bốt di động bám đối tượng

Mục tiêu của đồ án là điều khiển rô bốt bám theo một đối tượng sử dụng OpenCV Nó phải duy trì được khoảng cách nhất định giữa rô bốt và đối tương, khi đối tượng di chuyển rô bốt phải di chuyển theo dựa vào hình ảnh thu được từ webcam

để xác định đối tượng đi thẳng, rẽ phải, rẽ trái, đi tiến, đi lùi v v Nghĩa là chúng ta phải điều khiển cả tốc độ và hướng của rô bốt tuy nhiên trong đồ án này tôi chỉ điều khiển hướng, tốc độ của đối tượng có thể xem là không đổi Để làm được việc này, chúng ta phải nhận dạng được đối tượng và xác định được hướng di chuyển của nó Thứ hai phải xây dựng thuật toán bám đối tượng Thứ ba là phải xây dựng được phần cứng để kiểm định thuật toán CamShift

Có rất nhiều cách để dò tìm đối tượng ví dụ dựa trên hình dáng, âm thanh v v những thuật toán này thực sự rất phức tạp Để giảm độ khó của thuật toán theo dõi chúng ta đặt phía sau đối tượng một vật có những thuộc tính về màu sắc đặc biệt ví dụ

Trang 33

bóng đèn led phát sáng màu đỏ, màu vàng, màu xanh v v Như vậy, lúc tiến hành theo dõi sẽ giảm được rất nhiều về việc xử lý nhiễu do nền và các đối tượng không mong muốn gây ra, giảm đáng kể sự nhầm lẫn đối tượng theo dõi Chương trình xử lý ảnh sử dụng thuật toán CamShift trong OpenCV để tiến hành theo dõi căn cứ vào màu sắc đối tượng Khoảng cách giữa rô bốt và đối tượng chúng ta đặt là cố định, dựa vào tâm của đối tượng tìm được qua thuật toán CamShift chúng ta biết được vị trí của đối tượng tham chiếu trên mặt phẳng ảnh Các thuộc tính nhận được sẽ truyền qua cổng giao tiếp RS232 xuống vi điều khiển PIC16f877A để điều khiển hướng động cơ một chiều (DC) thông qua mạch cầu điều khiển động cơ L298N

3.2 Thuật toán tính hướng và kích cỡ của đối tượng cần theo dõi

3.2.1 Thuật toán chung

Hình 12: Sơ đồ thuật toán chung

Trang 34

3.2.2 Nhận dạng và bám mục tiêu di động

Cấu trúc của hệ bám mục tiêu di động gồm hai phần chính Phần thứ nhất là phần

xử lý ảnh dựa vào chuỗi hình ảnh thu được từ webcam để nhận dạng và tính toán vị trí của đối tượng quan tâm

Phần thứ hai là phần điều khiển, dựa vào thông tin vị trí đối tượng nhận được trong mặt phẳng ảnh, tính toán tín hiệu điều khiển rô bốt sao cho đối tượng di chuyển được duy trì ở một vị trí nhất định trên mặt phẳng ảnh và ở một khoảng cách nhất định

Để giảm ảnh hưởng của nhiễu và giảm khối lượng tính toán trong xử lý ảnh nên các bước xử lý ảnh nhận dạng, thích nghi cũng được sử dụng Các bước này sẽ được trình bày lần lượt như dưới đây

Nhận dạng mục tiêu là bước quan trọng đầu tiên trong hệ thống bám mục tiêu di động Mục tiêu của quá trình này là lưu giữ các giá trị thuộc tính của đối tượng đã được chọn như đã nói ở trên các thuộc tính đó như cạnh, góc, các thuộc tính về màu sắc v v Trên cơ sở đó để so sánh nhằm phân biệt mục tiêu với nền và các mục tiêu khác Qua đó xác định được vị trí của mục tiêu trên mặt phẳng ảnh Trong quá trình tìm kiếm ta chia bức ảnh thành tập hợp các pixel bao gồm hai thành phần hoặc thuộc đối tượng hoặc thuộc nền Qua đó ta tiến hành xử lý các giá trị thuộc tính của đối tượng trong vị trí mới và tìm nhận dạng được đối tượng cần theo dõi

Mặt phẳng ảnh là mặt phẳng có gốc nằm phía trên bên trái, trục x là trục nằm ngang, trục y là trục thẳng đứng như hình vẽ

Hình 13: Mặt phẳng ảnh

Trang 35

Căn cứ vào vị trí dịch chuyển của đối tượng trên mặt phẳng ảnh so với gốc toạ độ

mà ta tính toán các khả năng di chuyển của rô bốt sao cho đối tượng nằm ở một vị trí bất kỳ trên mặt phẳng ảnh

Tính toán vị trí của mục tiêu di động trong môi trường có nhiễu sử dụng thuật toán CamShift Căn cứ vào kết quả thu được về giá trị tâm của đối tượng qua thuật toán CamShift đề xuất thuật toán di chuyển như sau

Hình vẽ sau mô tả các vị trí tương ứng của đối tượng trên mặt phẳng ảnh với điều kiện di chuyển

Hình 14: Biểu diễn đối tượng di chuyển trên mặt phẳng ảnh

3.2.3 Chuyển đổi không gian màu từ RGB đến HSV

Chúng ta sử dụng hàm cvCvtColor() để chuyển đổi giữa các không gian màu trong OpenCV không gian màu chính là số lượng các kênh hay là chuyển đổi từ không gian màu này đến không gian màu khác

H: (Hue) vùng màu

S: (Saturation) Độ bão hoà màu

V( hay B): Độ sáng

Trang 36

Kết quả chuyển đổi trong không gian màu

Hình 15: Chuyển đối không gian màu RGB đến HSV 3.2.4 Histogram

Trong việc nhận dạng đối tượng, bức ảnh và thông tin video, chúng ta thường muốn mô tả đối tượng dưới dạng biểu đồ (Histogram) để dễ quan sát Histogram có thể được sử dụng để chỉ ra sự khác nhau giữa các đối tượng về màu sắc, góc, cạnh các mẫu Gradient cạnh của đối tượng và chỉ ra xác suất phân bố màu sắc Trong mỗi một khung vùng màu mà chúng ta quan tâm được tính toán ở khung hình tiếp theo sau đó một chuỗi các khung hình liên tiếp sẽ được theo dõi với Histogram Histogram của đối tượng là duy nhất nếu giá trị Histogram mới nhận được gần với giá trị histogram nhất thì đối tượng đó sẽ được chọn

Tạo một Histogram Camshift theo dõi đối tượng dựa căn cứ vào việc so sánh Histogram màu sắc của đối tượng nhận được với giá trị của thuộc tính ở vị trí mới nên việc tạo một Histogram là điều thiết yếu đầu tiên trong mục đích nhận dạng đối tượng

Hình 16: Histogram

Trang 37

Quan sát hai Histogram của đối tượng trong hình trên cho ta thấy thuộc tính màu sắc của hai đối tượng mà chúng ta cần theo dõi Mỗi thanh màu chỉ rõ có bao nhiêu pixel có giá trị “hue” Hue là một trong ba thuộc tính mô tả màu của pixel trong không gian màu HSV (Hue, Saturation, Value)

3.2.5 Lọc nhiễu Filter

Lọc thì được sử dụng để loại bỏ nhiễu, có nhiều nguyên nhân phát sinh nhiễu trong quá trình xử lý ảnh Ngoài ra lọc nhiễu còn quan trọng trong việc chúng ta giảm

độ phân giải của bức ảnh Có rất nhiều cách để chúng ta loại bỏ nhiễu, trong đồ án này,

do đối tượng theo dõi là vật bất kỳ nên tôi đặt các loại nhiễu thông thường qua đó sẽ tuỳ chỉnh tuỳ thuộc vào đối tượng nhận được

Kết quả lọc nhiễu sử dụng trong đồ án như sau

Hình 17: kết quả trước và sau khi lọc nhiễu

Trang 38

3.2.6 Thuật toán CamShift

Trong phần này tôi sẽ trình bày việc dùng thuật toán CamShift để theo dõi mục tiêu di động

Hình 18: Sơ đồ thuật toán CamShift

1) Histogram

Đầu tiên một Histogram sẽ được tạo ra, Histogram này chứa các thuộc tính liên quan đến màu sắc như đã trình bày ở phần trên Tiếp theo, tâm của và kích cỡ của mục tiêu được tính toán để theo dõi mục tiêu khi hình dạng và kích cỡ của nó thay đổi

2) Tính toán xác suất phân bố của mục tiêu căn cứ vào Histogram nhận được Histogram được tạo ra duy nhất một lần, lúc bắt đầu theo dõi Sau đó nó được sử dụng

để gán cho “xác suất đối tượng” giá trị mỗi điểm ảnh trong khung video tiếp theo 3) Dịch chuyển đến vị trí mới với mỗi khung hình vừa nhận được từ video, CamShift sẽ “dịch chuyển” đến vị trí mà nó ước lượng trên đối tượng nó sẽ mà tập trung nhiều điểm sáng nhất trong bức ảnh xác suất Nó tìm vị trí mới bắt đầu từ vị trí trước đó và tính toán giá trị trọng tâm của xác suất phân bố bên trong một hình chữ nhật Sau đó nó dịch chuyển vị trí của hình chữ nhật về trọng tâm vừa tìm được OpenCV sử dụng hàm cvCamShift() để thực hiện chuyển dịch này Việc tính toán trọng tâm trong Camshift thì dựa vào thuật toán Mean Shift như đã đề cập trước đó

Trang 39

Kết quả tính toán tâm đối tượng khi dùng thuật toán CamShift

Hình 19: Kết quả tính toạ độ tâm bằng thuật toán CamShift

Dựa vào giá trị x, y vừa tìm được này ta có thể điểu khiển rô bốt chạy bám đối tượng

Kết quả theo dõi đối tượng

Hình 20: Kết quả bước đầu theo dõi đối tượng bằng thuật toán CamShift

Dựa vào kết quả nhận đươc như trên, ta sẽ gửi tín hiệu điều khiển này qua cổng kết nối RS232 để điều khiển rô bốt di động

Trang 40

3.2.7 Thiết kế hoàn chỉnh phần mềm điều khiển

Chương trình được thiết kế trên visual C++ 2008 (MFC Aplication) Giao diện chương trình điều khiển được chia thành 3 khối chính như trên hình sau

- DIEU KHIEN ROBOT Khối được xây dựng có chức năng điều khiển rô bốt quay phải, quay trái, đi tiến đi lui v v Đặc biệt nút lệnh “Tự động” được tính hợp chương trình xử lý ảnh OpenCV như đã nói ở trên

- MO CONG COM: Khối có chức năng thực hiện việc giao tiếp RS232 giữa PIC16F877A và laptop

- DIEU KHIEN DONG CO DC Khối thực hiện việc điều khiển động cơ một chiều

- Vmin: giá trị nhỏ nhất độ sáng của bức ảnh

- Vmax: giá trị lớn nhất độ sáng của bức ảnh

- Smin: giá trị bão hòa của bức ảnh

- Dilate: giá trị giãn của các thành phần ảnh

- Erode: giá trị co lại của thành phần ảnh

- Filter: các hàm lọc khác nhau sử dụng trong chương trình

- Histogram: giá trị histogram của đối tượng

- Backproject: quan sát bức ảnh từ phía sau

Ngày đăng: 14/10/2014, 08:21

HÌNH ẢNH LIÊN QUAN

Hình 2: Rô bốt MIDbo (nguồn: telepresenceoptions.com) - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 2 Rô bốt MIDbo (nguồn: telepresenceoptions.com) (Trang 14)
Hình 3: Rô bốt Pops (nguồn: slashgear.com) - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 3 Rô bốt Pops (nguồn: slashgear.com) (Trang 15)
Hình 4: Rô bốt thám hiểm sao hoả (nguồn: robotics.youngester.com) - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 4 Rô bốt thám hiểm sao hoả (nguồn: robotics.youngester.com) (Trang 15)
Hình 5: Quá trình phát triển của OpenCV - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 5 Quá trình phát triển của OpenCV (Trang 18)
Hình 6: Cấu trúc cơ sở của OpenCV - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 6 Cấu trúc cơ sở của OpenCV (Trang 19)
Hình 7: PIC16F877A - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 7 PIC16F877A (Trang 26)
Hình 8: Sơ đồ khối của PIC16F877A - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 8 Sơ đồ khối của PIC16F877A (Trang 27)
Hình 9: Cổng giao tiếp RS232 - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 9 Cổng giao tiếp RS232 (Trang 29)
Hình 10: Chíp mạch cầu L298N - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 10 Chíp mạch cầu L298N (Trang 31)
Sơ đồ chân - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Sơ đồ ch ân (Trang 31)
Hình 11: Sơ đồ khối tổng quát của rô bốt - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 11 Sơ đồ khối tổng quát của rô bốt (Trang 32)
Hình 12: Sơ đồ thuật toán chung - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 12 Sơ đồ thuật toán chung (Trang 33)
Hình 13: Mặt phẳng ảnh - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 13 Mặt phẳng ảnh (Trang 34)
Hình vẽ sau mô tả các vị trí tương ứng của đối tượng trên mặt phẳng ảnh với điều  kiện di chuyển - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình v ẽ sau mô tả các vị trí tương ứng của đối tượng trên mặt phẳng ảnh với điều kiện di chuyển (Trang 35)
Hình 15: Chuyển đối không gian màu RGB đến HSV  3.2.4. Histogram - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 15 Chuyển đối không gian màu RGB đến HSV 3.2.4. Histogram (Trang 36)
Hình 16: Histogram - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 16 Histogram (Trang 36)
Hình 17: kết quả trước và sau khi lọc nhiễu - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 17 kết quả trước và sau khi lọc nhiễu (Trang 37)
Hình 18: Sơ đồ thuật toán CamShift - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 18 Sơ đồ thuật toán CamShift (Trang 38)
Hỡnh 20: Kết quả bước đầu theo dừi đối tượng bằng thuật toỏn CamShift - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
nh 20: Kết quả bước đầu theo dừi đối tượng bằng thuật toỏn CamShift (Trang 39)
Hình 19: Kết quả tính toạ độ tâm bằng thuật toán CamShift - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 19 Kết quả tính toạ độ tâm bằng thuật toán CamShift (Trang 39)
Hình 21: Giao diện phần mềm thiết kế hoàn chỉnh - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 21 Giao diện phần mềm thiết kế hoàn chỉnh (Trang 41)
Hình 22: Kết quả thử nghiệm với phần mềm - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 22 Kết quả thử nghiệm với phần mềm (Trang 42)
4.1. Sơ đồ mạch dùng trong đồ án - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
4.1. Sơ đồ mạch dùng trong đồ án (Trang 44)
Hình 26: Sơ đồ khối truyền thông RS232 - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 26 Sơ đồ khối truyền thông RS232 (Trang 45)
Hình 25: Sơ đồ khối nguồn - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 25 Sơ đồ khối nguồn (Trang 45)
Hình 27: Sơ đồ nguyên lý mạch cầu điều khiển động cơ - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 27 Sơ đồ nguyên lý mạch cầu điều khiển động cơ (Trang 46)
Hình 28: Sơ đồ phần cứng hoàn chỉnh - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 28 Sơ đồ phần cứng hoàn chỉnh (Trang 46)
Hình 29: Hình ảnh robot hoàn chỉnh - ĐIỀU KHIỂN ROBOT DI ĐỘNG SỬ DỤNG THƯ VIỆN OPENCV
Hình 29 Hình ảnh robot hoàn chỉnh (Trang 49)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w