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

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

Đ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

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

Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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: Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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. Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 đó. Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 . Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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. Thị giác máy – Computer Vision dangtq@gmail.com Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN 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 [...]... 19 Thị giác máy – Computer Vision c) dangtq@gmail.com Hình 18 Log – Polar Những sự biến đổi ảnh đặc biệt (Biến đổi Hough) #include #include #include int main(int argc, char** argv) { IplImage* src=0; char*filename = argc == 2 ? argv[1] : (char*)"pic1.png"; if((src=cvLoadImage(filename,0))!= 0) Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 20 Thị giác máy – Computer Vision. .. quay về thư mục trước đó Bằng cách này chúng ta sẽ chỉ tới Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 14 Thị giác máy – Computer Vision dangtq@gmail.com đường dẫn chứa file chạy của dự án của ta như sau: D:\NGHIEN CUU\OpenCV\Hoc OpenCV\ImageViewer\Debug\ ImageViewer.exe như hình 16 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. .. - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 11 Thị giác máy – Computer Vision dangtq@gmail.com 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) Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 12 Thị giác máy – Computer Vision dangtq@gmail.com Hình 13 Object/library... 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 2.5.1 a) Các chương trình xử lý ảnh Những thao tác hình thái học #ifdef _CH_ #pragma package #endif #ifndef _EiC #include Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 15 Thị giác máy – Computer Vision dangtq@gmail.com.. .Thị giác máy – Computer Vision dangtq@gmail.com 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 Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 11 Thị. .. cvNamedWindow("Haar Window",0); //Ve mot bien dang hinh chu nhat quanh moi khuon mat tim duoc for(i=0;itotal:0);i++) { CvRect*r=(CvRect*)cvGetSeqElem(pFaceRectSeq,i); CvPoint pt1={r->x,r->y}; CvPoint pt2={r->x+r->width,r->y+r->height}; Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 23 Thị giác máy – Computer Vision dangtq@gmail.com cvRectangle(pInpImg,pt1,pt2,CV_RGB(0,255,0),3,4,0);... = 0.f; cvSetImageROI( hue, selection );//Dat kenh quan tam toi gia tri duoc chon cvSetImageROI( mask, selection ); cvCalcHist( &hue, hist, 0, mask ); cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); cvConvertScale( hist->bins, hist->bins, max_val ? 255 / max_val : 0., 0 ); Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 28 Thị giác máy – Computer Vision dangtq@gmail.com cvResetImageROI( hue ); cvResetImageROI(... trình: Hình 17 Những thao tác hình thái học b) Biến đổi Log – Polar #include #include int main(int argc, char** argv) { Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 18 Thị giác máy – Computer Vision dangtq@gmail.com IplImage* src=0; char* filename = argc == 2 ? argv[1] : (char*)"fruits.jpg"; if(( src=cvLoadImage(filename,1))!= 0 ) { //Khoi tao 3 anh dst,src1 va rsc2 IplImage* dst... (char*)"lena.jpg"; image = cvLoadImage(filename, 0); /*Tai mot anh co ten la filename voi cac chi so : 0 cho anh grayscale , 1 cho anh mau color*/ Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 13 Thị giác máy – Computer Vision dangtq@gmail.com 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... (CvPoint*)cvGetSeqElem(lines,i); cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 ); } #endif cvNamedWindow( "Source", 1 ); cvShowImage( "Source", src ); Trần Quóc Dăng - Cơ Điện Tử 2 – K48 - ĐHBKHN Trang 21 Thị giác máy – Computer Vision dangtq@gmail.com cvNamedWindow( "Destination", 1 ); cvShowImage( "Destination", dst ); cvNamedWindow( "Hough", 1 ); cvShowImage( "Hough", color_dst ); cvWaitKey(); } return 0; } Kết

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

Tài liệu cùng người dùng

Tài liệu liên quan