Tiêu cự, góc mở IRcamera và RGB camera:

Một phần của tài liệu Nghiên cứu, ứng dụng openCV và kinect hỗ trợ dò đường báo cáo nghiên cứu khoa học giáo viên (Trang 26 - 48)

Hai camera RGB và IR được đặt cách nhau 2.5 cm nên có chút khác nhau ở khung hình thu về từ hai camera. Để đảm bảo khung hình RGB có thể chứa được khung hình IR, người ta thiết kế góc mở của RGB camera lớn hơn. Điều này cũng dẫn đến tiêu cự của RGB camera nhỏ hơn. Các thông số trong bảng sau được đo đạc bằng thực nghiệm:

Feature RGBcamera IRcamera

Field of View (degrees) Horizontal ~62o ~58o Vertical ~48o ~44o

Diagonal ~72o ~69o

Focal length (pixels) 525 580

Bảng1.2: Góc mở và tiêu cự của RGB và IR camera 1.5.4 Nguồn cung cấp và công suất tiêu thụ:

Vì Kinect cần nhiều điện năng để hoạt động nên cổng USB của Xbox-360 không thể đáp ứng mà phải qua một cổng chia để chia thành 2 kết nối riêng là USB và kết nối nguồn, giúp cho thiết bị kết nối với Xbox-360 bằng cổng USB trong khi nguồn điện cần cho Kinect là 12VDC được lấy từ adapter. Phiên bản Xbox-360 mới sẽ không cần adapter vì nó có các AUX port đặc biệt để cung cấp cho cổng kết nối. Với kết nối USB ta hoàn toàn có thể cho Kinect giao tiếp với máy tính.

Hình 1.18: Kinect adapter 1.5.5 Công suất tiêu thụ đo bằng thực nghiệm:

Power consumption (idle) ~3.3W Power consumption

(active)

~4.7W

Bảng1.3: Công suất tiêu thụ trên Kinect 1.5.6 Môi trường hoạt động

Kinect là thiết bị được thiết kế cho việc sử dụng ở môi trường trong nhà (indoor). Ở môi trường ngoài trời, kết quả thử nghiệm cho bản đồ độ sâu không chính xác vào thời điểm ánh sáng mạnh, nhưng cho kết quả chấp nhận được khi ánh sáng yếu (vào thời điểm buổi chiều tối).

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

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

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

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

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. (adsbygoogle = window.adsbygoogle || []).push({});

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.

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

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.

1.7 Thư viện hỗ trợ Kinect

Ngay khi mới ra đời, Kinect đã được quan tâm bởi rất nhiều nhà phát triển phần mềm, không chỉ trên mảng phát triển game cho Xbox mà còn trên mảng xử lý ảnh ứng dụng trong y học, robot, mapping... Do đó mà nhiều thư viện được viết cho Kinect ra đời. Cho đến thời điểm hiện tại, các thư viện đáng chú ý là Libfreenect, Code Laboratories Kinect, OpenNI và Kinect SDK beta.

1.7.1 Libfreenect:

Libfreenect là thư viện được phát triển bởi OpenKinect, do một cộng đồng những người quan tâm đến phần cứng Kinect viết ra và chia sẻ. Cộng đồng OpenKinect làm việc hoàn toàn tự nguyện và không vì mục đích lợi nhuận, họ phát triển Libfreenect thành một mã nguồn mở cho các hệ điều hành khác nhau Windows, Linux và OS X. Hiện tại, Libfreenect được đóng gói cho việc sử dụng trên Python, C, C++, C#, Java JNI, Java JNA, Javascript.

1.7.2 Code Laboratories Kinect:

Code Laboratories (CL) là một công ty về phần mềm chuyên hỗ trợ các nhàphát triển, lập trình viên khai thác các tính năng của các thiết bị xử lý ảnh. Trong số đó Kinect không phải là ngoại lệ, CL cung cấp cho người sử dụng những tính năng cơ bản nhất của Kinect về camera, audio và motor.

1.7.3 OpenNI:

Thư viện OpenNI [9] được xem là thư viện mạnh nhất trước sự có mặt của Kinect SDK beta, thư viện này hỗ trợ đa ngôn ngữ trên nhiều platform khác nhau, giúp cho các lập trình viên có thể viết các ứng dụng trên Kinect rất dễ dàng với tương tác tự nhiên Natural Interaction (NI). Mục đích chính của OpenNI là xây dựng các hàm API chuẩn, cho phép thư viện có khả năng kết hợp với các middleware nhằm làm tăng sức mạnh cho Kinect.

1.7.4 Kinect SDK beta:

Kinect SDK [10] beta được Microsoft đưa ra vào ngày 16 tháng 6 năm 2011, là một công cụ lập trình mạnh cho các nhà phát triển. Nó cho phép lập trình viên truy xuất toàn bộ tính năng của thiết bị Kinect. Một điều bất tiện là thư viện này chỉ hỗ trợ trên công cụ lập trình của Microsoft là Visual Studio 2010 với các ngôn ngữ là C++, C# và Visual Basic. Các tính năng nổi bật như: thu ảnh từ các sensor, skeleton

tracking và điều khiển bằng giọng nói thông qua công cụ nhận biết giọng nói, Windows Speech Recognition API. Phiên bản beta hiện tại chỉ cho phép sử dụng vào những mục đích phi lợi nhuận, phiên bản thương mại hứa hẹn sẽ sớm ra mắt trong năm 2012. Phiên bản beta mới nhất được cập nhật vào ngày 1 tháng 11 năm 2011 với nhiều lỗi được sửa và chạy tốt trên Windows S Developer Preview.

Tới thời điểm hiện tại, hai thư viện OpenNI và Kinect SDK beta là lựa chọn sáng suốt cho việc lập trình trên Kinect bởi tính năng hỗ trợ mạnh mẽ của hai thư viện này. Mục S.2 sẽ phân tích và so sánh hai thư viện này và chọn lựa thư viện phù hợp cho đề tài.

1.7.5 Point Cloud Library

Hình 1.19: Point cloud library logo

PCL là thư viện hỗ trợ cho n-D Point Cloud và cho việc xử lý ảnh trong không gian 3D. Thư viện được xây dựng với nhiều giải thuật như lọc (filtering), khôi phục bề mặt (surface reconstruction), phân vùng (segmentation), ước lượng đặc tính vật (feature estimation),... PCL có thể dùng trên nhiều platform như Linux, MacOS, Windows và Android. Để đơn giản cho việc phát triển, PCL được chia ra thành nhiều thư viện nhỏ và có thể biên dịch một cách riêng lẻ. Phiên bản mới nhất là PCL 1.3 đưa ra vào ngày 31 tháng 10 năm 2011. PCL hoàn toàn miễn phí cho việc nghiên cứu hay phát triển các sản phẩm thương mại hóa.

Có thể nói PCL là sự kết hợp của nhiều module nhỏ. Những module này thực chất cũng là các thư viện thực hiện các chức năng riêng lẻ trước khi được PCL đóng gói. Các thư viện cơ bản này là:

Eigen: một thư viện mở hỗ trợ cho các phép toán tuyến tính, được dùng trong hầu hết các tính toán toán học của PCL. (adsbygoogle = window.adsbygoogle || []).push({});

FLANN: (Fast Library for Approximate Nearest Neighbors) hỗ trợ cho việc tìm kiếm nhanh các điểm lân cận trong không gian 3D.

Boost: giúp cho việc chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để tránh việc sao chép trùng lặp dữ liệu đã được lấy về trong hệ thống.

VTK: (Visualization Toolkit) hỗ trợ cho nhiều platform trong việc thu về dữ liệu 3D, hỗ trợ việc hiển thị, ước lượng thể tích vật thể.

CMinPack: một thư viện mở giúp cho việc giải quyết các phép toán tuyến tính và không

2 Chương 2: Nội dung nghiên cứu

Nội dung nghiên cứu của đề tài bao gồm:

- Tìm hiểu các thuật toán nhận dạng đối tượng sử dụng đặc trưng bất biến, trong đó trọng tâm là thuật toán SIFT.

- Thực hiện cài đặt thuật toán SIFT và xây dựng chương trình nhận dạng đối tượng sử dụng SIFT.

2.1 Tổng quan về SIFT

Một thuật toán tiêu biểu và có hiệu quả khá cao là dựa theo các đặc trưng cục bộ bất biến trong ảnh: SIFT (Scale-invariant Feature Transform) do David Lowe đưa ra từ năm 2004 và đến nay đã có nhiều cải tiến trong thuật toán. Đặc trưng được trích chọn trong SIFT là các điểm đặc biệt (keypoint), các điểm này kèm theo các mô tả về nó và một véc tơ có lấy keypoint làm điểm gốc.

Có bốn giai đoạn chính được thực hiện trong thuật toán để trích xuất các điểm đặc biệt và các đặc trưng của nó bao gồm:

Dò tìm cực trị trong không gian đo (Scale-space Extrema Detection):Bước đầu tiên này sẽ áp dụng hàm sai khác Gaussian (DoG - Deffirence of Gaussisan) để tìm ra các điểm có khả năng làm điểm đặc trưng tiềm năng (candidate keypoints), đó là những đểm rất ít phụ thuộc (bất biến) vào sự thu phóng ảnh và xoay ảnh.

Lọc và trích xuất các điểm đặc biệt (Keypoint localization):Từ những điểm tiềm năng ở trên sẽ lọc và lấy ra tập các điểm đặc trưng tốt nhất (keypoints).

Gán hướng cho các điểm đặc trưng (Oriented Assignment):Mỗi điểm đặc trưng sẽ được gán cho một hoặc nhiều hướng dựa trên hướng gradient của ảnh. Mọi phép toán xử lý ở các bước sau này sẽ được thực hiện trên những dữ liệu ảnh mà đã được biến đổi tương đối so với hướng đã gán, kích cỡ và vị trí của mỗi điểm đặc trưng. Nhờ đó, tạo ra một sự bất biến trong các phép xử lý này.

Bộ mô tả điểm đặc trưng (Keypoint Description):Các hướng gradient cục bộ

được đotrong ảnh có kích cỡ cụ thể nào đó trong vùng lân cận với mỗi điểm đặc

trưng. Sauđó, chúng sẽ được biễu diễn thành một dạng mà cho phép mô tả các tầng quan trọngcủa quá trình bóp méo hình dạng cục bộ và sự thay đổi về độ sáng.

Tập các điểm đặc biệt thu được thường phụ thuộc rất ít vào các phép biến đổi cơ bản như xoay, phóng to, thu nhỏ, tăng giảm cường độ sáng, vì vậy có thể xem đây là các đặc trưng mang tính cục bộ của ảnh. Để đối sánh và nhận dạng hai ảnh thì ta tìm tập keypoint giống nhau trong hai ảnh, dựa vào hướng và tỉ lệ để có thể biết đối tượng trong ảnh gốc đã xoay, thu phóng bao nhiêu so v ới ảnh đem đối sánh. Cách tiếp cận của thuật toán này dựa vào điểm bất biến cục bộ của ảnh, chúng được trích xuất ra, được định hướng và mô tả sao cho hai keypoint ở hai vùng khác nhau thì khác nhau. Tuy nhiên một yếu tố ảnh hưởng không nhỏ đế n tốc độ thuật toán là số lượng các keypoint được lấy ra là không nhỏ. Trung bình một ảnh kích thước 500 x 500 pixels thì sẽ trích xuất được khoảng 1000 điểm (số lượng điểm này phụ thuộc vào tùy từng ảnh và tham số lọc khác nhau). Số lượng các điểm đặ c trưng có một tầm quan trọng trong vấn đề nhận dạng đối tượng, để nhận dạng một đối tượng nhỏ trong một ảnh

chứa tập hợp các đối tượng hỗn độn thì cần ít nhất 3 điểm đặc trưng giống nhau để phát hiện và và bóc tách đối tượng.

Đối với vấn đề xây dựng một cơ sở dữ liệu ảnh và thực hiện nhận dạng đối tượng bất kì thì ban đầu thường sử dụng SIFT để tạo một hệ dữ liệu các đặc trưng (keypoints) được trích xuất từ dữ liệu ảnh gốc. Sau đó với m ỗi ảnh đối tượng đem nhận dạng ta dùng giải thuật SIFT trích xuất tập đặc trư ng từ ảnh và đem đối sánh với hệ dữ liệu đặc trưng để tìm ra tập keypoint giống nhau, từ đó nhậ n dạng đối tượng trong cơ sở dữ liệu ảnh ban đầu. Tuy nhiên việc đối sánh này cần chi phí đối sánh rất lớn đối với cơ sở dữ liệu ảnh có số lượng lớn do số lượng các đặc trưng ở mỗi ảnh là lớn.

2.2 Nội dung giải thuật2.2.1 Dò tìm cực trị cục bộ 2.2.1 Dò tìm cực trị cục bộ

Như đã nêu ở trên, bước đầu tiên sẽ tìm các điểm tiềm năng có thể trở thành điểm đặc trưng bằng phương pháp lọc theo tầng dựa vào việc thay đổi tham số bộ lọc Gaussisan. Trong bước này, ta cần dò tìm các vị trí và các số đo (kích cỡ) mà chúng bất biến trong các khung nhìn khác nhau của cùng một đối tượng. Các vị trí đó bất biến về số đo có thể được dò tìm bằng cách tìm kiềm các đặc trưng ổn định trên toàn bộ các số đo có thể, sử dụng một hàm liên tục về số đo vốn rất nổi tiếng có tên là hàm không gian đo (Witkin 1983).

Theo các công bố của Koenderink (1984) và Lindeberg(1994) thì hàm Gaussian là hàm tốt nhất để biễu diễn không gian đo của ảnh 2 chiều. Vì vậy, không gian đo của một ảnh sẽ được định nghĩa như là một làm L(x,y,ó) được tạo ra bằng cách nhân

Một phần của tài liệu Nghiên cứu, ứng dụng openCV và kinect hỗ trợ dò đường báo cáo nghiên cứu khoa học giáo viên (Trang 26 - 48)