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

TỔNG QUAN VỀ THỊ GIÁC MÁY TÍNH Computer Vision

31 3,5K 23

Đ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 31
Dung lượng 1,25 MB

Nội dung

Giới thiệu về thị giác máy Computer Vision Thị giác máy là một lĩnh vực đã và đang phát triển mạnh mẽ trên thế giới hiện nay. Khái niệm về thị giác máy – Computer Vision có liên quan tới nhiều ngành học và có nhiều hướng nghiên cứu khác nhau. Kể từ những năm 70 của thế kỷ 20 khi mà khả năng tính toán của các máy tính trở nên mạnh mẽ , nó có thể giải quyết được những công việc cần tới tốc độ cao như xử lý các tập ảnh hay các đoạn video thì thị giác máy được nhắc đến , nghiên cứu và phát triển cho đến ngày nay. Thị giác máy là một lĩnh vực rất mới mẻ đối với các nhà nghiên cứu ở Việt nam, nó chỉ mới xuất hiện gần đây ở trong các tổ chức quân đội và một số viện nghiên cứu khác. Việc áp dụng thị giác máy vào các ứng dụng nghiên cứu khoa học được coi là một khởi đầu cho chặng đường phát triển của thị giác máy ở các trường đại học hiện nay. 1.1. Thế nào là thị giác máy Thị giác máy bao gồm lý thuyết và các kỹ huật liên quan nhằm mục đích tạo ra một hệ thống nhân tạo có thể 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. Máy móc càng ngày càng thông minh, nó không chỉ thay con người làm những công việc nặng nhọc và nhàm chán mà nó còn có một số khả năng bắt chước động vật và con người. Một trong số những khả năng đó là nhận biết được thế giới qua “mắt” của nó. Bằng việc kết hợp với các mô hình khác nữa như máy học , mạng nơron … giúp cho chúng dần tiến tới một hệ thống nhân tạo có những quyết định linh hoạt và chính xác hơn. 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 đều không có một đề bài chung và cách giải quyết duy nhất. Mỗi giải pháp giải quyết vấn đề được một kết quả nhất định cho những trường hợp cụ thể.

Trang 1

TỔNG QUAN VỀ THỊ GIÁC MÁY TÍNH

1 Giới thiệu về thị giác máy - Computer Vision

Thị giác máy là một lĩnh vực đã và đang phát triển mạnh mẽ trên thế giới

hiện nay Khái niệm về thị giác máy – Computer Vision có liên quan tới nhiều

ngành học và có nhiều hướng nghiên cứu khác nhau Kể từ những năm 70 của thế

kỷ 20 khi mà khả năng tính toán của các máy tính trở nên mạnh mẽ , nó có thể giải

quyết được những công việc cần tới tốc độ cao như xử lý các tập ảnh hay các đoạn

video thì thị giác máy được nhắc đến , nghiên cứu và phát triển cho đến ngày nay

Thị giác máy là một lĩnh vực rất mới mẻ đối với các nhà nghiên cứu ở Việt

nam, nó chỉ mới xuất hiện gần đây ở trong các tổ chức quân đội và một số viện

nghiên cứu khác Việc áp dụng thị giác máy vào các ứng dụng nghiên cứu khoa

học được coi là một khởi đầu cho chặng đường phát triển của thị giác máy ở các

trường đại học hiện nay

1.1 Thế nào là thị giác máy

Thị giác máy bao gồm lý thuyết và các kỹ huật liên quan nhằm mục đích tạo

ra một hệ thống nhân tạo có thể 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

Máy móc càng ngày càng thông minh, nó không chỉ thay con người làm

những công việc nặng nhọc và nhàm chán mà nó còn có một số khả năng bắt

chước động vật và con người Một trong số những khả năng đó là nhận biết được

thế giới qua “mắt” của nó Bằng việc kết hợp với các mô hình khác nữa như máy

học , mạng nơron … giúp cho chúng dần tiến tới một hệ thống nhân tạo có những

quyết định linh hoạt và chính xác hơn

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 đều không có một đề bài chung và cách giải quyết duy nhất

Mỗi giải pháp giải quyết vấn đề đượ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 vực khác như

sau:

Trang 2

Hình 1 Mối quan hệ giữa thị giác máy với các ngành liên quan

1.2 Các ứng dụng của thị giác máy

Một số ứng dụng của thị giác máy vào các lĩnh vực được kể đến ở đây là:

- Điều khiển tiến trình (ví dụ: trong các robot công nghiệp, hay các thiết bị,

xe tự hành…)

- Phát hiện sự thay đổi (ví dụ: các thiết bị giám sát…)

- Tổ chức thông tin (ví dụ: chỉ số kho dữ liệu các ảnh hoặc chuỗi ảnh liên

tục…)

- Mô hình hoá đối tượng (ví dụ: quá trình kiểm tra trong môi trường công

nghiệp, xử lý ảnh trong y học)

- Tương tác (đóng vai trò làm đầu vào cho thiết bị trong quá trình tương tác

giữa người và máy)

1.3 Các thư viện thị giác máy mã nguồn mở

Chúng ta có thể tận dụng những thành quả của cộng đồng mã nguồn mở để

áp dụng cho ứng dụng thị giác máy của mình Hiện nay trên thế giới có rất nhiều

thư viện mã nguồn mở cho chúng ta sử dụng, cụ thể là:

- Intel OpenCV ( http://sourceforge.net/projects/opencvlibrary )

- CMVision (http://www.cs.cmu.edu/~coral/minnow/platform.html)

- ImLib3D

Trang 3

- Imalab

- v.v…

2 Thư viện OpenCV

Có rất nhiều thư viện thị giác máy mã nguồn mở như đã giới thiệu ở trên,

mỗi thư viện có một nét riêng của nó mà chúng ta có thể khai thác Ở đây tôi đặc

biệt nghiên cứa thư viện OpenCV của Intel vì tính phổ biến và những khả năng của

nó có thể phục vụ cho công việc của tôi

2.1 Tổng quan về thư viện OpenCV

OpenCV là một thư viện thị giác máy tính mã nguồn mở của Intel nó có thể

làm đơn giản hóa công việc lập trình thị giác máy tính của ban OpenCV bao gồm

nhiều khả năng tiên tiến – tìm, theo dõi, nhận dạng các bề mặt, lọc Kalman , là sự

đa dạng của một hệ thống trí tuệ nhân tạo Ngoài ra nó còn cung cấp các cơ sở

thuật toán thị giác máy tính thông qua các giao diện lập trình ứng dụng ở mức

thấp Nó được đóng gói và hoàn toàn miễn phí , người dùng có thể sẵn sàng sử

dụng cho những mục đích khác nhau của họ

Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999 Ban đầu , nó chỉ là

thư viện xử lý ảnh của Intel Về sau , tính lệ thuộc đó đã được loại bỏ và bây giờ

bạn có thể sử dụng OpenCV như một thư viện độc lập OpenCV là một thư viện đa

nền tảng, nó chấp nhận cả Window và Linux, hơn thế nữa gần đây là Mac OSX

2.2 Những khả năng của OpenCV

OpenCV có nhiều chức năng , sau đây là tóm tắt các chức năng của nó:

- Ảnh và vào ra video

Các giao diện này cho phép bạn đọc dữ liệu ảnh từ các tệp hoặc từ các video

sống Bạn cũng có thể tạo file ảnh và video

- Thị giác máy tính nói chung và các giải thuật xử lý ảnh (APIs mức thấp và

trung bình)

Sử dụng các giao diện này, bạn có thể thí nghiệm với nhiều thuật toán thị

giác nhân tạo chuẩn mà bạn không cần viết code về chúng Chúng bao gồm sự dò

tìm viền, đường thẳng và góc, điều chỉnh elip, lấy mẫu và những biến đổi khác

nhau (Furiê rời rạc, cosin rời rạc và các biến đổi khoảng cách), v.v…

- Những module thị giác máy ở mức cao

Trang 4

OpenCV bao gồm vài khả năng ở mức cao Ngoài việc dò tìm, nhận dạng và

theo dõi khuôn mặt nó còn bao gồm cả luồng quang hoc (sử dụng sự di chuyển

động của camera để xác định cấu trúc 3D), định cỡ camera và hình khối

- Các giải thuật trí tuệ nhân tạo và dạy học máy

Các ứng dụng thị giác máy tính thường đòi hỏi các phương pháp dạy học

máy hoặc trí tuệ nhân tạo (AI) khác Một vài trong số chúng sẵn có trong gói dạy

học máy của OpenCV

- Lấy mẫu ảnh và các biến đổi khung nhìn

Nó thường có ích để xử lý một tập điểm như một khổi OpenCV bao gồm

giao diện cho những sự phân miền sao chép ảnh, xử lý ngẫu nhiên, hồi phục kích

thước yêu cầu, làm vênh, quay và sử dụng những hiệu ứng phối cảnh

- Các phương pháp tạo và phân tích ảnh nhị phân

Ảnh nhị phân thường xuyên được sử dụng trong các hệ thống quét để kiểm

tra khuyết điểm hình dạng hay đểm các bộ phận của vật

- Thao tác với ảnh 3D

Các chức năng này có ích cho phép ánh xạ và sự xác định vị trí – hay với

thiết bị vật thể hoặc với nhiều dạng phép chiế từ một camera đơn

- Các thuật toán xử lý ảnh, thị giác máy và hiển thị ảnh

OpenCV bao gồm cả toán học cũ, các thuật toán đại số tuyến tính, khoa học

thống kê và hình học tính toán

- Đồ họa

Các giao diện này cho phép bạn viết chữ và vẽ trên ảnh Thêm vào các hàm

khác nhau và khả năng sáng tạo, các hàm này có ích cho sự ghi nhãn và đánh dấu

Ví dụ, nếu bạn viết một chương trình dò tìm đối tượng , nó giúp ích cho các ảnh

nhãn về kích thước và vị trí của chúng

- Các phương pháp GUI

OpenCV bao gồm các giao diện cửa sổ của chính nó Trong khi đây là hạn

chế so sánh tới cái gì có thể được làm trên mỗi nền tảng, họ cung cấp API đơn,

nhiều nền tảng để hiển thị ảnh, chấp nhận người sử dụng nhập vào qua chuột hay

bàn phím và thực hiện điều khiển bằng thanh trượt

- Cấu trúc dữ liệu và thuật toán

Với những giao diện này bạn có thể lưu trữ, tìm kiểm , bảo lưu và thao tác

một cách hiệu nghiệm các danh sách lớn, đống ,đồ thị và cây

- Ổn định dữ liệu

Trang 5

Các phương pháp này cung cấp các giao diện tiện lợi cho các kiểu lưu trữ

khác nhau của dữ liệu trên đĩa và khôi phục chúng sau

2.3 Cấu tạo của OpenCV

Chức năng của OpenCV được chứa trong các module khác nhau :

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

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

2.4 Bắt đầu viết ứng dụng sử dụng OpenCV

Để tạo những ứng dụng cho mục đích của chúng ta, tôi sẽ sử dụng ngôn ngữ

lập trình Visual C++ 6.0 để viết code Nhưng để viết code sử dụng thư viện

OpenCV thì ta cần phải làm một số công việc sau:

2.4.1 Cài một số phần mề m hỗ trợ

Để viết được ứng dụng dùng ngôn ngữ lập trình Visual C++ 6.0 nên nhất

thiết chúng ta phải cài đặt nó

Tiếp theo chúng ta cần cài đặt thêm DirectX SDK và Platform SDK vì

OpenCV cần có hỗ trợ hai phần mềm này Mọi sự giúp đỡ về điều này bạn sẽ tìm

thấy ở “[OPENCV_ROOT]\OpenCV\docs\ faq.htm”, trong đó [OPENCV_ROOT]

là thư mục cài đặt OpenCV của bạn

Cuối cùng là cài đặt thư viện OpenCV Đến hiện tại thì đã có năm phiên bản

của OpenCV mà bạn có thể sử dụng (từ bản 1.0 đến beta 5.0), tuy nhiên bản mới

nhất sẽ có những bổ sung và chỉnh sửa mới, vì thế chúng ta sẽ cài đặt bản beta 5.0

Trang 6

để dùng Download phiên bản này theo đường dẫn

http://sourceforge.net/projects/opencvlibrary và cài đặt bình thường Chú ý rằng,

trước khi cài đặt OpenCV thì Visaul C++ 6.0 phải được chạy it nhất một lần rồi

2.4.2 Thiết lập Visual C++ 6.0 cho OpenCV

a) Thiết lập đường dẫn hệ thống cho biến môi trường

Mặc dù chúng ta đã có một số lựa chọn trong khi cài đặt OpenCV nhưng có

vẽ những lựa chọn này không hoạt động đúng trong các phiên bản hiện thời của

OpenCV Vì thế chúng ta cần phải thiết đặt lại đường dẫn hệ thống cho các biến

môi trường Để thực hiện công việc này ta làm thư sau:

Kích vào nút “Start” sau đó chọn “Control Panel” rồi kích đúp vảo mục

“System”, hộp thoại “System Properties” xuất hiện, ta chọn Advanced thì được

như hình 2:

Hình 2 “System Properties” Dialog Box

Trang 7

Chọn “Environment Variables” thì hộp thoại “Environment Variables” sẽ

xuất hiện như hình 3:

Hình 3 “Environment Variables” Dialog Box

Trong mục “System variables” chọn “Path” sau đó kích vào nút “Edit” và sẽ

xuất hiện hộp thoại “Edit System Variable”, đánh đường đẫn tới thư mục “bin” của

OpenCV vào cuối “Variable value” (chú ý phải ngăn cách bằng dấu chấm phẩy)

như hình 4 sau đó nhấn “OK”

Hình 4 “Edit System Variable” Dialog Box

Chú ý, phải khởi động lại máy để hệ thống cập nhật biến môi trường Sau

đó, OpenCV sẽ tìm thấy những DLL trong thư mục “bin” mỗi khi chúng ta chạy

một ứng dụng nào đó

Trang 8

b) Chỉ rõ những thư mục trong Visual C++ 6.0

Chúng ta sẽ khởi động Visual C++ 6.0 Từ menu chọn Tools\Options… như

hình 5

Hình 5 Tools\Options…

Hộp thoại “Options” xuất hiện, chọn Tab “Directories”, hộp thoại xuất hiện

như hình6

Trang 9

Hình 6 Options\Directories=>Includey files

Trong hộp thoại “Options” ta chọn “Include files” trong “Show directories

for:”, trong “Directories” tạo các đường dẫn tới các thư mục “Include” của

DirectXSDK, Microsoft Platform SDK và OpenCV, chú ý đường dẫn tới

DirectXSDK phải được đặt ở trên cùng như hình 6

Tiếp theo ta làm tương tự với “Library files”, các đường dẫn sẽ là tới

“…lib\x86” của DirecXSDK và “lib” của OpenCV Cũng cần chú ý là đường dẫn

tới DirectXSDK phải được đặt trên cùng như hình 7

Hình 7 Option\Directories s=>Library files

Ta cũng thực hiện tương tự với “Executable files” ,đường dẫn tới hai thư

mục “bin” của DirectXSDK và OpenCV, như hình 8

Trang 10

Hình 8 Option\Directories s=>Executacle files

c) Tạo dự án sử dụng OpenCV

Ta sẽ tạo một dự án theo tuần tự File\New… \Projects\Win32 Console

Aplication, đặt tên cho dự án trong mục “Project name”, lưu dự án vào nơi cần

thiết trong “Location”, kích “OK” và mặc định các bước tiếp theo

Hình 9 New Project

Trang 11

Trước khi tạo một ứng dụng thực tế chúng ta cần sửa đổi sự thiết lập đự án

tới các đường link Từ menu chọn “Project\Settings…” (hình 10)

Hình 10 Project\Settings…

Trong “Projects Settíng” chọn dự án của chúng ta, trong “Settings For:”

chọn “All Configurations” (hình 11)

Hình 11 All Configurations

Trang 12

Chọn Tab “Link”, chọn “General” cho “Categry” (hình 12)

Hình 12 Link General

Trong thẻ “Object/library modules” đánh các thư viện (cv.lib, cxcore.lib,

highgui.lib, strmbase.lib) vào (hình 13)

Trang 13

Hình 13 Object/library modules

Ta đã thực hiện xong việc thay đổi các đường link, sau đây ta sẽ tạo một ứng

dụng đầu tiên Từ Menu chọn File\New…\FilesC++ Source File, đánh tên vào

“File name” là ImageViewer, chọn “OK” là xong (hình14)

Hình 14 File\New…\FilesC++ Source File

Tiếp theo viết code cho chương trình đầu tiên như sau:

image = cvLoadImage(filename, 0); /*Tai mot anh co ten la filename voi cac chi

so : 0 cho anh grayscale , 1 cho anh mau color*/

Trang 14

if(image != 0) {

cvNamedWindow("Display", CV_WINDOW_AUTOSIZE); // Tao mot cua so

cvShowImage("Display", image); // Hien thi anh len cua so cvWaitKey(0); // Cho cho toi khi mot ky tu d uoc an

cvDestroyWindow("Display");//Huy cua so }

}

Sau khi viết xong code thì thực hiện biên dịch chương trình (Ctrl+F7 hoặc

F7) Để chạy chương trình chúng ta làm như sau:

Trên thanh Toolbar của Windows kích vào “Start”, chọn “Run”, đánh “cmd”

vào “Open” rồi chọn “OK”, hộp thoại “C:\WINDOWS\system32\cmd.exe” hiện ra

như hình 15

Hình 15 C:\WINDOWS\system32\cmd.exe

Dùng các thao tác “cd” để chuyển tới các thư mục kế tiếp chứa dự án của

chúng ta và “cd ” để quay về thư mục trước đó Bằng cách này chúng ta sẽ chỉ tới

Trang 15

đường dẫn chứa file chạy của dự án của ta như sau: D:\NGHIEN

Hình 16 ImageViewer.exe

Trên đây là từng bước để tạo một ứng dụng bằng Visual C++ 6.0 sử dụng

thư viện thị giác máy tính mã nguồn mở - OpenCV Từ đây, để tạo một dự án mới

ta sẽ làm tuần tự theo các bước trong mục c)

2.5 Các chương trình sử dụng thư viện OpenCV

Trang 16

IplConvKernel* element = 0;//Cau truc phan tu

const int element_shape = CV_SHAPE_CROSS;//Kieu phan tu hinh thanh

//Dia chi cau bien ma nhan duoc vi tri cua bien cap nhat

int global_pos = 0;

//Goi ham thuc hien thanh truot , thuc hien mo

void Opening(int pos)

{

element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0

);//Tao cau truc phan tu

cvErode(src,image,element,1);//An mon anh bang viec su dung cau truc phan tu bat ky

cvDilate(image,dest,element,1);//Mo rong anh bang viec su dung cau truc phan tu bat ky

cvReleaseStructuringElement(&element);//Giai phong cau truc phan tu

cvShowImage("Opening and Closing window",dest);

}

//Goi ham thuc hien thanh truot , thuc hien dong

void Closing(int pos)

//Goi ham thuc hien thanh truot , thuc hien su lam mon

void Erosion(int pos)

{

element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0 );

Ngày đăng: 04/05/2015, 01:53

TỪ KHÓA LIÊN QUAN

w