Hough Transform & Kinect Camera

October 8, 2017 | Autor: Tuan Manh | Categoria: Image Processing
Share Embed


Descrição do Produto

Lời mở đầu Theo dự đoán trong tương lai, robot sẽ là tâm điểm của một cuộc cách mạng lớn sau Internet. Con người sẽ có nhu cầu sở hữu robot như nhu cầu PC bây giờ. Với xu hướng này, cùng các ứng dụng truyền thống khác của robot trong công nghiệp, y tế, giáo dục đào tạo, giải trí và đặc biệt là trong an ninh quốc phòng thì thị trường robot sẽ vô cùng to lớn. Đề tài hướng tới việc ứng dụng công nghệ xử lý ảnh mới cho robot cứu hộ, cứu nạn, tạo tiền đề cho việc xây dựng một robot cứu hộ, cứu nạn hoàn chỉnh, có thể sẽ là những trợ thủ đắc lực trong công tác cứu hô, cứu nạn mỗi khi xảy ra thảm họa thiên nhiên hoặc các vụ tai nạn. Trong khuôn khổ đề tài, nhóm sẽ có những bước đầu xây dựng nên một ứng dụng cho robot với khả năng phát hiện ra môi trường xung quanh robot, nhằm giúp robot có khả năng tìm đường đến đích và tránh chướng ngại vật trên đường di chuyển đến mục tiêu. Một điểm mới được nhấn mạnh là khối thị giác máy tính cho robot, với sự hỗ trợ của thiết bị chơi game Kinect có khả năng khôi phục các mặt phẳng phía trước robot dưới dạng 3D, đáp ứng được sự chính xác cần thiết khi đưa robot vào vận hành. Để hoàn thành đề tài này, chúng em đã nhận được sự hướng dẫn tận tình của thầy PGS.TS Nguyễn Tiến Dũng, từ quy trình cũng như việc lựa chọn đề tài phù hợp, luôn dõi theo và nhắc nhở chúng em. Đồng thời, chúng em còn nhận được sự hướng dẫn rất chu đáo và nhiệt tình của thầy Đặng Khánh Hòa trong việc hình thành ý tưởng, quá trình triển khai công việc, đưa ra các phương án giải quyết lỗi và vấn đề gặp phải. Chúng em xin chân thành cảm ơn các thầy!

2

Mục Lục Lời mở đầu............................................................................................................................... 2 Mục Lục ................................................................................................................................... 3 Chương 1: Giới thiệu tổng quan ........................................................................................... 4 1.

Khái quát về xử lý ảnh .................................................................................................... 5 1.1 Xử lý ảnh là gì ? ............................................................................................................. 5 1.2. Một số khái niệm cơ sở trong xử lý ảnh ..................................................................... 5

2.

Point cloud library (PCL) ............................................................................................... 7 2.1 Các module: ................................................................................................................... 7 2.2 Cấu trúc dữ liệu cơ bản của PCL ................................................................................ 9

3.

Thiết bị Camera Kinect ................................................................................................. 12 3.1 Giới thiệu chung .......................................................................................................... 12 3.2 Những thành phần chính của Kinect......................................................................... 12 3.3

Thư viện hỗ trợ Kinect........................................................................................... 13

Chương 2: Trích chọn mặt phẳng……………………………………………………...….15 1.

Ảnh độ sâu từ Kinect ..................................................................................................... 15 1.1 Nguyên lý các cảm biến độ sâu................................................................................... 15 1.2 Các dữ liệu đo được từ cảm biến ............................................................................... 15 1.3 Nhận và hiển thị các dữ liệu từ cảm biến .................................................................. 16 1.3.1 ColorStream .......................................................................................................... 16 1.3.2 Depth Stream ........................................................................................................ 17

2. Ánh xạ thông tin nhận được sang đám mây điểm ......................................................... 19 Chương 3: Biến đổi Hough Transform và Ransac ............................................................ 20 3.1 Tổng quan về biến đổi Hough .................................................................................... 20 3.2 Biến đổi Hough tìm đường thẳng............................................................................... 21 3.3 Ransac .......................................................................................................................... 25 Kết luận và hướng phát triển ............................................................................................... 27

3

Chương 1: Giới thiệu tổng quan Một trong các yêu cầu cơ bản của robot là khả năng định hướng tốt trong phạm vi môi trường chưa xác định và hình dung ra một bản đồ định hướng. Bằng cách sử dụng những quan sát thích hợp từ môi trường, kết hợp với bản đồ độ sâu cùng lúc để định hướng cho robot đang là một yêu cầu cần nghiên cứu. Vì vậy chúng em quyết định nghiên cứu và phát triển thuật toán phát hiện mặt phẳng và vật cản từ bản đồ độ sâu. Đó là một trong hai yếu tố căn bản (cùng với định hướng) giúp robot có thể hoạt động được trong môi trường thực tế. Mục tiêu nghiên cứu: Xây dựng được bản đồ độ sâu, từ đó tính toán để phát hiện các mặt phảng trong ảnh. Mỗi mặt phẳng được đánh dấu bằng màu sắc khác nhau. Phân loại được các mặt phẳng: mặt phẳng đất, mặt phẳng đứng. Ngoài ra chúng ta còn phải xác định được vị trí và hình dạng vật cản có trong môi trường di chuyển của robot hay các mặt phẳng mà ta đã nhận diện được.

4

1. Khái quát về xử lý ảnh 1.1 Xử lý ảnh là gì ? Con người thu nhận thông tin qua các giác quan trong đó thị giác đóngvai trò quan trọng nhất vì 80% thông tin được thu nhận bằng mắt tức là ở dạng ảnh. Mặt khác với sự phát triển mạnh mẽ của phần cứng máy tính, xử lý ảnh, đồ hoạ ngày càng có nhiều ứng dụng thực tiễn phục vụ cuộc sống. Như vậy, xử lý ảnh đóng một vai trò rất quan trọng trong sự tương tác giữa người và máy. Cũng như xử lý dữ liệu bằng đồ hoạ, xử lý ảnh số là một lĩnh vực của tin học ứng dụng. Xử lý dữ liệu bằng đồ hoạ đề cập đến những ảnh nhân tạo,các ảnh này đựợc xem xét như là một cấu trúc dữ liệu và được tạo ra bởi các chương trình. Xử lý ảnh số bao gồm các phương pháp và kĩ thuật để biến đổi, để truyền tải hoặc mã hoá các ảnh tự nhiên.

1.2. Một số khái niệm cơ sở trong xử lý ảnh Để có thể xử lý bằng máy tính điện tử thì ảnh cần phải được số hóa. Đó là quá trình biến đổi ảnh từ tín hiệu liên tục sang tín hiệu rời rạc thông qua việc lấy mẫu và lượng tử hóa. Trong quá trình này người ta sử dụng khái niệm “pixel”. Mỗi pixel được đặc trưng bởi một cặp tọa độ (X ,Y) và màu sắc của nó.[4] • Ảnh: Là một tập hợp các pixel có cấu trúc, ta có thể coi ảnh là một mảng hai chiều (n, p) I có n dòng và p cột, ảnh sẽ có n × p (pixel). Ta ký hiệu (X ,Y ) I để chỉ điểm ảnh có toạ độ (X ,Y) . • Điểm ảnh: Gốc của ảnh là ảnh liên tục về không gian và độ sáng. Để xử lý bằng máy tính, ảnh cần phải được số hoá. Số hoá ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element ) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với cặp tọa độ (x,y). Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh. • Mức xám (Gray level): Đó là kết quả của việc mã hóa, cho tương ứng một cường độ sáng của mỗi điểm ảnh với một giá trị số, có thể là 16, 32, 64 mức. • Biểu diễn ảnh: Trong biểu diễn ảnh người ta thường sử dụng các phần tử đặc trưng của ảnh là pixel. Một hàm hai biến chứa các thông tin như một biểu diễn ảnh. Một số mô hình thường dùng để biểu diễn ảnh là mô hình toán (biểu diễn ảnh nhờ các hàm cơ sở), mô hình

5

thống kê (ảnh coi như một phần tử của một tập hợp đặc trưng bởi kỳ vọng toán, hiệp biến, phương sai, moment…).[2] • tăng cường ảnh: Đây là một bước quan trọng bao gồm các kỹ thuật lọc độ tương phản, khử nhiễu, nổi màu…. • Biến đổi ảnh: Thao tác chủ yếu trên một tập các ma trận và sử dụng các kỹ thuật để biến đổi ảnh qua ma trận: Biến đổi Furie, Sin, Cosin, tích Kronecker. • Phân tích ảnh: Liên quan tới việc xác định các độ đo định lượng của một ảnh để đưa ra một mô tả đầy đủ về ảnh. Có những kỹ thuật cơ bản để hỗ trợ phân tích ảnh: Dò biên, lọc vi phân, dò theo quy hoạch động, phân vùng ảnh [2] • Nhận dạng ảnh: Quá trình này liên quan đến các mô tả đối tượng mà người ta muốn đặc tả nó. Nhận dạng ảnh thường đi sau các quá trình trích chọn các đặc trưng chủ yếu của đối tượng.

6

2.Point cloud library (PCL) PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện các thuật toán 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 ). Thư viện đi kèm để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện này gồm có : • Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học của PCL. • FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các điểm lân cận trong không gian 3D. • Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống. • VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D, hỗ trợ hiển thị, ước lượng thể tích vật thể. • CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến tính.

2.1 Các module: Thư viện có tất cả 14 module bao gồm: 2.1.1 PCL_Common: Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các thư viện trong PCL Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu diễn điểm, bề mặt, giá trị mầu, mô tả tính năng… VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB; 2.1.2 Module Features: Chứa các cấu trúc dữ liệu và cơ chế tính toán, ước lượng 3D từ các dữ liệu điểm PCD 3D Features biểu diễn chính xác điểm 3D hoặc vị trí trong không gian để mô tả phần hình khối dựa vào thông tin có được xung quanh điểm. Vùng dữ liệu được chọn lân cận điểm truy vấn thường gọi là K-neighborhood. 2.1.3 Module Filters:

PCL_filters Chứa các kỹ thuật loại bỏ nhiễu. 2.1.4 Module Geometry: Chứa tất cả các cấu trúc dữ liệu và giải thuật để tính toán hình học.

7

2.1.5 Module IO:

PCL_IO: Chứa các hàm và các lớp để đọc và ghi dữ liệu dạng PCD, có thể thu thập dữ liệu từ nhiều nguồn khác nhau (Trong đồ án này dùng Kinect). 2.1.6 PCL_Kdtree: Thư viện cung cấp cấu trúc dữ liệu Kd_tree, sử dụng FLANN giúp nhanh chóng tìm kiếm vùng gần nhất (nearest neighbors searches). Kd-tree là một cấu trúc dữ liệu phân để vùng không gian lưu trữ tập K-dimention điểm dưới dạng cây do đó dễ dàng phân loại và tìm kiếm. Có thể sử dụng để tìm sự tương ứng giữa các nhóm điểm, đặc tả tính năng, định nghĩa các vùng lân cận xung quanh điểm hoặc các điểm.

2.1.7: PCL_Keypoint: Là thư viện chứa thực thi của 2 thuật toán nhận dạng “Point clound keypoint”. Key Point (hay interest point) là các điểm trong ảnh hoặc trong point cloud mà có tính chất ổn định, riêng biệt và có thể dễ dàng phát hiện ra. Thông thường số lượng Key Point nhỏ hơn tổng số điểm trong cloud. 2.1.8 PCL_Octree: Chứa các thuật toán hiệu quả để tạo nên một cấu trúc dữ liệu phân cấp từ dữ liệu point cloud. Nó cho phép phân vùng không gian, downsampling (giảm số lượng các mẫu do đó tăng tốc độ tính toán) và thực hiện các phép toán tìm kiếm trong tập dữ liệu PointCloud. Mỗi nút Octree có 8 nút con hoặc không có nút con nào. Nút gốc (mầu đỏ hình dưới )được biểu diễn trong 1 hình lập phương bao toàn bộ các điểm con. Tại mỗi cấp của cây, không quan được chia thành 2 do đó tăng độ phân giải cho điểm ảnh không gian 3 chiều. Thư viện này cũng cung cấp các chương trình tìm kiếm lân cận hiệu quả. 2.1.9 Module registrantion (PCL_registration): Kết hợp các bộ dữ liệu vào một mô hình chung, thống nhất thường được thực hiện bằng một kỹ thuật gọi là registration. Ý tưởng chính là xác định các điểm tương ứng trong bộ dữ liệu và tìm một chuyển đổi khoảng cách tối thiểu các điểm tương ứng. 2.1.10 Module PCL_sample_consensus:

8

Thư viện pcl_sample_consensus có khả năng tách các nhóm điểm có cùng tính chất (Sample Consensus hay SAC) giống như thuật toán RANSAC (Tìm kiếm đường thẳng trong tập hợp các điểm). Các nhóm điểm có thể là các mặt phẳng, mặt cầu, trụ. Thư viện này rất thích hợp trong các ứng dụng dò tìm các đối tượng như tường, cửa, các vật trên bàn… 2.1.11 PCL_Search: Cung cấp các phương pháp tìm kiếm lân cận (nearest neighbors) bằng cách sử dụng các cấu trúc dữ liệu khác nhau, bao gồm: Kd_tree (từ thư viện PCL_Kdtree) Octrees (từ thư viện PCL_Octrees) Brute foce (Thuật toán) Các tìm kiếm đặc biệt cho các bộ dữ liệu có tổ chức. 2.1.12 PCL_Segmentation: Chứa các thuật toán để phân chia Point Cloud thành các nhóm riêng biệt. Các thuật toán này thích hợp nhất khi xử lý các point Cloud bao gồm các vùng không gian bị cô lập. Trong trường hợp như vậy, các clustering thường chia nhỏ để sau đó có thể xử lý độc lập. 2.1.13 PCL_surface: Là thư viện thích hợp cho việc xây dựng lại các bề mặt từ dữ liệu quét 3D. Các đối tượng chính gồm vỏ, bề mặt lưới, bề mặt nhẵn hay bình thường. Khi có nhiễu có thể làm mịn và lấy mẫu lại. Chia lưới ( meshing ) là một cách tổng quát để tạo ra các bề mặt điểm. Hiện nay có 2 thuật toán là a very fast triagulation of the original points và aslower meshing that does smoothing and hold filling as well. Có thể dùng thư viện để tạo ra một thân lồi hoặc lõm thích hợp cho đại diện bề mặt đơn giản hóa hoặ chỉ ra các ranh giới. 2.1.14: PCL_visualization: Thư viện được tạo ra có thể nhanh chóng hiển thị các kết quả thuật toán trên dữ liệu 3D. Thư viện cung cấp: - Các phương pháp dựng hình và thiết lập thuộc tính ảnh, mầu sắc, kích thước cho bất kì bộ dữ liệu nào có kiểu “PCL::PointCloud” - Vẽ các hình 3D cơ bản từ bộ điểm hoặc phương trình tham số. - Vẽ các biểu đồ.

2.2 Cấu trúc dữ liệu cơ bản của PCL 2.2.1 PointCloud: Kiểu dữ liệu cơ bản trong PCL là PointCloud. Một PointCloud là 1 lớp C++ bao gồm: • Width (int): Xác định chiều dài tập dữ liệu bằng số lượng điểm. “Width” có 2 nghĩa là

9

o Có thể xác định tổng số các điểm trong cloud (bằng số lượng các phần tử trong cloud) cho bộ dữ liệu có tổ chức. o Có thể xác định chiều rộng (tổng số điểm liên tiếp) của một tập dữ liệu có tổ chức Chú ý: Tập dữ liệu điểm có tổ chức là tập dữ liệu được chia thành các hàng và cột giống như ma trận. Vd: cloud.width=640;// Tao ra 640 diem tren mot dong • Height (int): Tương tự width nhưng đối với cột trong ma trận điểm. Nếu hieght=1 thì dữ liệu không được tổ chức (có thể dùng tính chất này để kiểm tra một tập dữ liệu có được tổ chức hay không) Vd: cloud.width = 640; // Khai bao mot anh co cau truc, gom 640 dong va 480 cot cloud.height = 480; // tong so diem anh la 640*480=307200. • Points (std::vector) Chứa các mảng dữ liệu lưu trữ tất cả các điểm có kiểu pointT. Kiểu PointT có thể là pcl::PointXYZ, pcl::PointXYZRGB, pcl::PointXYZRGBA… Ví dụ: pcl::PointCloud cloud; std::vector data = cloud.points; • Is_dense(bool) Trả về giá trị logic, nếu tất cả giá trị trong points hữu hạn => True ngược lại là False. Ngoài ra lớp pointCloud còn chứa các thành phần chứa các tùy chọn của sensor như Sensor_origin, sensor_orientation. Các thành phần này thường ít dùng trong các thuật toán của PCL. 2.2.2 Định dạng PCD: Định dạng PCD là một định dạng dùng để lưu trữ dữ liệu 3d pointCloud. Định dạng này gồm 2 phần là header và phần dữ liệu. Mỗi file có một phần header xác định các tính chất, thuộc tính của dữ liệu mà nó lưu trữ. Header của PCD được mã hóa bằng mã ASCII. Trong header gồm có o VERSION: xác định phiên bản định dạng PCD  FIELDS: Xác định tên các chiều và các trường của mỗi điểm: Vd:

FIELDS x y z # XYZ data FIELDS x y z rgb # XYZ + colors FIELDS x y z normal_x normal_y normal_z # XYZ + surface normals FIELDS j1 j2 j3 # moment invariants ... 10

 SIZE: Xác định kích thước các chiều tính theo byte Vd: Unsigned char/char ứng với 1byte Unsigned short/short ứng với 2byte Unsigned int/int ứng với 4 byte Double ứng với 8byte.  TYPE: Quy định kiểu của mỗi chiều, quy ước bằng các ký tự. I - Biểu diễn kiểu số nguyên có dấu (int8, int16,int32) U – Biểu diễn kiểu số nguyên không dấu. F- Biểu diễn kiểu số thực.  WIDTH : Xác định chiều rộng tập dữ liệu tính theo điểm.  HEIGHT: Tương tự WIDTH nhưng tính cho chiều dài. Nếu giá trị bằng 1 thì dữ liệu chưa được tổ chức.  POINT: chứa giá trị tổng số điểm ảnh. Phần 2 là DATA chứa dữ liệu của từng điểm, mỗi điểm có thể được mã hóa theo bin hay ASCII. Ví dụ một file PCD sẽ có dạng như sau: # .PCD v.7 – Point Cloud Data file format VERSION .7 FIELDS x y z rgb # Chứa tọa độ và mầu dạng RGB SIZE 4 4 4 4 # Mỗi thành phần tọa đọ xyz và mầu lưu bằng 4byte TYPE F F F F # Kiểu dữ liệu mỗi thành phần là số thực COUNT 1 1 1 1 WIDTH 4 # Độ rộng của dữ liệu là 4 HEIGHT 1 # Dữ liệu không được tổ chức. VIEWPOINT 0 0 0 1 0 0 0 POINTS 4 # Tổng số điểm ảnh là 4 DATA ascii # Dữ liệu được mã hóa bằng mã ascii 0.93773 0.33763 0 4.2108e+06 # Các giá trị của tọa độ và mầu của các điểm. 0.90805 0.35641 0 4.2108e+06 0.81915 0.32 0 4.2108e+06 0.97192 0.278 0 4.2108e+06

11

3. Thiết bị Camera Kinect 3.1 Giới thiệu chung

Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm 2010 [1]. Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ thể người (body skeleton tracking). Kinect đang giữ kỷ lục Guiness thế giới về “Thiết bị điện tử được tiêu thụ nhanh nhất” với 8 triệu sản phẩm trong 60 ngày. Mười triệu sản phẩm Kinect đã được phân phối trên thế giới vào ngày 9 tháng 3 năm 2011. Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng cung cấp các thông tin 3D với chất lượng chấp nhận được.

3.2 Những thành phần chính của Kinect Các thành phần bên trong Kinect gồm có: bộ nhớ RAM, bộ cảm ứng Prime Sense PS1080-A2, quạt tản nhiệt, động cơ điều khiển góc ngẩng (Motorized Tilt), bộ gia tốc 3 trục, 4 microphone (Multi – Array Mic) và camera: RGB camera, bộ cảm biến độ sâu (3D Depth Sensors). Các thông số kỹ thuật: - Khoảng cách hiệu quả: 0.8÷3.5m. - RGB camera: độ phân giải 640 x 480, 30 frame/s, 32 bit màu. - Góc quay hiệu quả: 57° ngang, 43° dọc, ± 27° nghiêng.

12

- Kết nối: USB 2.0 - Sensor: RGB& Depth - Audio: 4 microphones - Platfom: VS.NET 2010. - Middleware: SDK - Ngôn ngữ: C++,C# - OS: Win 7 - Dimensions: 1.5" x 7" x 1.9"

3.3

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. •Thư viện 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. •Thư viện Code Laboratories Kinect: Code Laboratories (CL) là một công ty 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. •Thư viện OpenNI: Thư viện OpenNI được xem là thư viện mạnh nhất trước sự có mặt của Kinect SDK 1.0, 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 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ạng cho Kinect. •Thư viện Kinect SDK: SDK cung cấp cho nhà phát triển những bộ cảm biến có chiều sâu, camera cảm biến màu sắc và xác định nguồn âm thanh theo chùm tia. Các nhà phát triển cũng có thể theo dõi ảnh ở dạng khung sườn của một hay hai người đang di chuyển trong tầm ngắm Kinect, từ đó các nhà phát triển có thể tạo ra những ứng dụng hướng theo cử chỉ 13

(gesture). SDK gồm tính năng âm thanh như giảm tiếng ồn và hạn chế tiếng vang. Các nhà phát triển có thể truy cập vào công nghệ hình thành tia để nhận diện ra nguồn âm thanh hay có thể truy cập vào giao diện trình ứng dụng (API) để nhận diện giọng nói trong hệ thống Windows.

14

Chương 2: Trích chọn mặt phẳng 1.Ảnh độ sâu từ Kinect

1.1 Nguyên lý các cảm biến độ sâu

Hình 1.1: Bên trong Kinect: RGB, IR camera và IR projector Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu bằng công nghệ Light Coding của PrimeSense. Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera và Projector

1.2 Các dữ liệu đo được từ cảm biến

Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu này có thể truyền vào máy tính thông qua cổng USB 2.0.

15

Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng. Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó, với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi. Một ưu điểm nữa của bản đồ độ sau đó là dữ liệu có thể được nén cao hơn so với ảnh mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu. Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo lại vật thể 3D. Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó rất thích hợp để ứng dụng trong các đề tài về robot tự hành.

1.3 Nhận và hiển thị các dữ liệu từ cảm biến Dữ liệu gửi về dưới dạng data stream. NUI API cho phép lập trình kiểm soát và truy nhập dữ liệu. Các bước làm bao gồm:  Xác định dòng dữ liệu cần thiết.  Cho phép mở dòng dữ liệu (Enable Data Streaming)  Tạo bộ đệm để lưu trữ dữ liệu sensor.  Giải phóng bộ đệm để có thể sử dụng trong khung hình tiếp theo. 1.3.1 ColorStream ColorStream có nhiều độ phân giải và định dạng tùy thuộc vào các lựa chọn colorStream là RGB, YUV hay Bayer. SDK cung cấp một số tùy chọn cho phép tối ưu hóa camera ứng với các tác động môi trường như: Tăng giảm độ sáng Thay đổi màu sắc, độ tương phản Tất cả được hỗ trợ trong class ColorCameraSetting. Để hiển thị các thành phần dữ liệu mầu sắc bằng C# chúng ta cần tiến hành các công việc sau: Khởi tạo cảm biến để tạo dữ liệu màu Tạo sự kiện thông báo dữ liệu đã sẵn sàng. Xử lý sự kiện và hiển thị lên Forms. a. Tạo sự kiện báo dữ liệu đã sẵn sàng: if (this.sensor != null) 16

{ this.sensor.ColorFrameReady += this.SensorColorFrameReady; } b. Xử lý sự kiện và hiển thị lên Forms. Ví dụ bên dưới được thực hiện với windows Forms với sự hỗ trợ của công cụ Coding4Fun.Kinect.Toolkit . private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) { using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) { if (colorFrame != null) { colorImage.Image = colorFrame.ToBitmap(); } } } 1.3.2 Depth Stream Mỗi khung hình của dữ liệu Depth Stream được tạo thành từ các pixels chứa khoảng cách (bằng mm) từ mặt phẳng camera đến đối tượng. Các ứng dụng có thể sử dụng depth data để bám theo chuyển động hoặc nhận dạng đối tượng. Dữ liệu về khoảng cách tính bằng mm là bộ số (x,y) chứa tọa độ trong field of view của sensor.

Có 3 tùy chọn độ phân giải là 640x480 (mặc định), 320x240 vào 80x60. Tất cả được quy định trong DepthImageFormat Enumeration. Việc hiển thị dữ liệu cho DepthStream hoàn toàn tương tự ColorStream. if (this.sensor != null) { 17

this.sensor.DepthFrameReady += this.SensorDepthFrameReady; } private void SensorDepthFrameReady (object sender, ColorImageFrameReadyEventArgs e) { using (DepthImageFrame DepthFrame = e.OpenColorImageFrame()) { if (DepthFrame != null) { DepthImage.Image = DepthFrame.ToBitmap(); } } }

18

2. Ánh xạ thông tin nhận được sang đám mây điểm 2.1Tổng quan Các thông tin thu được từ kineck còn rời rạc, cần chuẩn hóa để sử dụng.

2.2 Các thông số cơ bản của Camera Ma trận intrinsic, ma trận xoay, tịnh tiến, hệ trục tọa độ camera

2.3Kĩ thuật chuyển ảnh RGB và ảnh độ sâu sang đám mây điểm Phép chiếu trong không gian Xử lý vấn đề chuyển đổi hệ trục để tính toán trong Opencv Tính các thông tin của ma trận intrinsic (fx, fy, cx, cy) dùng hàm estimateCalibratrion, +tính đơn vị trong thế giới thực, tương ứng với bao nhiêu pixel +real world (0, 0, -1) --> điểm chiếu trong image --> điểm (cx, cy) +real world (1, 1, -1) --> điểm nằm ở biên ảnh --> lấy chênh lệch với điểm trên ra (fx, fy) +điểu chỉnh 4 đối số này bằng các tham số mặc định (ko biết căn cứ vào đâu) Áp dụng công thức sau: +từ 3d sang 2d: point2d = intrinsics * rt * point3d +từ 2d sang 3d: point3d = reverse(intrinsics * rt) * point2d +thực tế trong code thì công thức trên phức tạp hơn: intrinsics * rt tương đương intrinsics * projection * to_opencv * camera_transform; trong đó: projection = I; to_opencv: ma trận giúp thay đổi hệ trục dùng trong opencv; camera_transform: ma trận rt

19

Chương 3: Biến đổi Hough Transform và Ransac 3.1 Tổng quan về biến đổi Hough Biến đổi Hough (HT) (Hough, 1962) là một kỹ thuật mà nằm trong hình dạng hình ảnh. Đặc biệt, HT đã được sử dụng để trích chọn đường thẳng, hình tròn và hình elip (hoặc cắt hình nón). Trong trường hợp đường thẳng, xác định toán học của nó tương đương với biến đổi Radon (Deans, 1981). HT được giới thiệu bởi Hough (Hough, 1962) và sau đó được sử dụng để tìm đường bong bóng chứ không phải là hình dạng trong hình ảnh. Tuy nhiên, Rosenfeld ghi nhận lợi thế tiềm năng của HT như một thuật toán xử lý hình ảnh ( Rosenfeld, 1969). HT do đó đã được thực hiện để tìm đường thẳng trong hình ảnh (Duda, 1972) và nó đã được mở rộng rất nhiều, vì HT có nhiều lợi thế và nhiều tuyến đường tiềm năng để cải thiện. Ưu điểm chính của HT là nó có thể cung cấp các kết quả tương tự như đối với đối sánh mẫu nhưng nhanh hơn ( Princen, 1992), (Sklansky, 1978), (Stockman, 1977). Điều này đạt được bởi một tái định dạng lại của quá trình đối sánh mẫu, dựa trên một phương pháp tiếp cận thu thập dấu hiệu là các bình chọn trong một mảng tích lũy. Việc thực hiện HT xác định một ánh xạ từ các điểm ảnh vào một không gian tích lũy (không gian Hough). Ánh xạ được thực hiện trong một cách tính toán hiệu quả dựa trên các hàm mô tả hình dạng mục tiêu. Ánh xạ này đòi hỏi ít tài nguyên hơn nhiều so với đối sánh mẫu. Tuy nhiên, nó vẫn đòi hỏi lưu trữ quan trọng và yêu cầu tính toán cao. Những vấn đề này được giải quyết sau, kể từ khi họ cung cấp tập trung cho sự phát triển liên tục của HT. Tuy nhiên, thực tế là HT tương đương với đối sánh mẫu đã đưa ra đủ động lực cho kỹ thuật này là trong số phổ biến nhất của tất cả các kỹ thuật trích chọn hình dạng hiện có.

20

3.2.Biến đổi Hough tìm đường thẳng

Trên hệ toạ độ Đề các một đường thẳng có hình dạng như trên hình…. Mỗi một điểm sẽ có một toạ độ (xi, yi) trong trục toạ độ này. Nếu chúng ta dùng tham số ρ (độ dài đường vuông góc từ gốc toạ độ đến đường thẳng) và θ (góc giữa đường vuông góc với trục x) để biểu diễn đường thẳng thì chúng ta đã biểu diễn đường thẳng qua thông gian tham số. Chúng ta có quan hệ ρ = x*cos(θ)+y*sin(θ) Các giá trị ρ và θ có giới hạn θ trong giới hạn [0,360] hoặc [0, 2π] radian. ρ trong giới hạn [−D,D] trong đó D là đường chéo của ảnh. Như vậy một đường có thể biến đổi thành một điểm trong không gian tham số với các thông số ρ và θ, không gian này cũng được gọi là không gian Hough. Kết quả của biến đổi Hough được lưu giữ trong một ma trận gọi là accumulator. Một chiều của ma trận này là các giá trị θ (giá trị góc) và chiều kia là các giá trị ρ (khoảng cách) Các bước biến đổi Hough đơn giản cho đường thẳng: 1. Nạp ảnh 2. Tìm các biên trong ảnh (dùng một trong các phương pháp tìm biên) 3. Với mọi pixels trong ảnh Nếu pixel (x,y) là một điểm biên (edge) với mọi giá trị góc θ tính ρ và góc (θ) với mọi pixel (x,y) tăng vị trí (ρ, θ) trong accumulator 4. Vẽ không gian Hough. 5. Tìm giá trị lớn nhất trong accumulator 6. Vẽ đường với giá trị lớn nhất trong ảnh đầu vào Để tìm các đường tròn sử dụng biểu thức (x -a)^2 + (y-b)^2 = r^2 Chúng ta có 3 tham số. Nếu viết lại phương trình trên chúng ta nhận được 21

a = x – r*cos(θ) b =y - r*sin(θ) như vậy chúng ta cần một mảng cấu trúc dữ liệu accumulator 3 chiều (3D) θ lấy trong giới hạn 360. Sau khi ảnh toàn thể đã được xử lý, accumulator sẽ trông giống như hình bên dưới. Mảng accumulator thì được vẽ với r trên trục y và theta cắt chéo qua trục x (across the xaxis). Các đường trong đường cong accumulator - đường vật lý mạnh nhất trong ảnh đầu vào tương ứng với các vùng đen nhất trên accumulator.

Chương trình biến đổi Hough tìm đường thẳng Ý tưởng: Tìm các đường thẳng trong một ảnh được thông số hoá ở dạng: r = xcosθ + ysinθ , trong đó r là khoảng cách vuông góc từ gốc toạ độ đến đường thẳng và θ là góc của r với trục x. Với mọi điểm (x,y) trên đường này r và θ là hằng số. Với N điểm thẳng hàng trong toạ độ Đề các có phương trình r = xcosθ + ysinθ . Biến đổi Hough sẽ chuyển N điểm này thành N đường hình sin trong mặt phẳng (r,θ), chúng giao nhau ở điểm (r,θ).

Input: Ảnh nguyên bản ở dạng mảng 2 chiều: Image1[xMax][yMax] 22

Output: Ảnh mới: Image2 [xMax][yMax] chứa các đường thẳng tìm được. Intermediate data structure: Hough [tMax][rMax] to calculate the corresponding lines. xMax, yMax: Kích thước ảnh. tMax: Giới hạn lớn nhất của góc tìm kiếm; Chẳng hạn 3600. x, y toạ độ trong không gian ảnh Algorithm: /* Fill in the Hough array*/ for (x=0; x< xMax; x++){ // Tìm khắp for (y=0 ; y< yMax ; y++){ // các pixel trong ảnh if ( Image1[x][y] > IThresh){ // Nếu độ sáng điểm ảnh > ngưỡng độ sáng for (t=0 ; t< tMax ; t++){ // Xem trong khoảng góc tìm kiếm r = (x-xMax/2)*cos(t) +(y-yMax/2)*sin(t) ; // Tính r thực if (r >0) {Hough [t][r] ++;} // Nếu r> 0 cập nhật mảng Hough. } /* Process Hough array to find strong maxima */ for (t = 0; t < tMax / 2; t++) // Tìm trong nửa giới hạn góc for (r = 0; r < rMax; r++) // Tìm trong giới hạn r if (Hough[t][r] > Hthresh) // Nếu số điểm Hough > ngưỡng đặt trước { /* Check 5x5 neighborhood for max */ max = TRUE; for (dt = (t - 2); dt = 0) && (dt < tMax) && (Hough[dt][dr] > Hough[t][r])) // Nếu cả 5 điều kiện này đều // đúng thì max = FALSE { max = FALSE; break; } // Dựng lại ảnh /* Process Hough array to create output image array */ if (max == TRUE) { makeLine(r, t); } } void makeLine (r,t) { for (x=0 ; x
Lihat lebih banyak...

Comentários

Copyright © 2017 DADOSPDF Inc.