Quán trình thu nhận dữ liệu:
Dữ liệu đám mây điểm ảnh được thu nhận thông qua thiết bị cảm biến kinect được thực hiện bởi hàm pcl::Grabber* interface = new pcl::OpenNIGrabber(); Dữ liệu từ kinect sẽ được nhập vào trong hệ thống.
Quá trình xử lý
Sau khi thu thập dữ liệu qua Kinect, thì dữ liệu sẽ được lọc được thực hiện thông qua các hàm Voxel_grid và Pass_through.
Voxel grid có tác dụng làm giảm mật độ số điểm xuống, tập hợp các điểm quá
gần nhau sẽ chỉ cần một điểm đại diện. Ta chọn giá trị mật độ phù hợp mà vẫn đảm bảo quan sát rõ hình dạng vật thể. Mật độ ta chọn ở đây là 3 centimet theo ba chiều X, Y và Z.
Hàm hỗ trợ thực hiện : setLeafSize(0.03f, 0.03f, 0.03f);
Pass through sẽ giới hạn không gian của point cloud theo các chiều X, Y và Z.
Ở đây ta chỉ giới hạn theo chiều Z. Giá trị khoảng cách theo chiều Z mà Kinect có thể nhìn thấy khoảng 0.5÷5.0 mét, đây là tầm nhìn không cần thiết cho chương trình, việc giới hạn lại sẽ giúp cho PCL xử lý nhanh hơn. Tốc độ thu hình sau khi kết hợp pass_through và voxel_grid đạt giá trị 30 fps, tức đạt tốc độ tối đa.
Các hàm hỗ trợ thực hiện: setFilterFieldName ("z"); setFilterLimits(0.5, 1.4);
Quá trình phân vùng đối tượng:
Quá trình phân vùng đối tượng sẽ tách các đám mây điểm có cấu trúc phẳng, sau đó tách ra các đám mây điểm có tổng số điểm lớn nhất, bằng giải thuật RANSAC. Với mô hình mặt phẳng α có dạng ax + by + cz + d =0, thuật toán RANSAC cũng làm được điều tương tự như đối với mô hình đường thẳng, thay vì chọn hai điểm bất kỳ để tìm mô hình thì mặt phẳng cần ba điểm.
setModelType(pcl::SACMODEL_PLANE); setMethodType(pcl::SAC_RANSAC);
setDistanceThreshold(0.02);//threshold = 2cm
Quá trình nhóm các điểm đặc trưng sẽ thực hiện công việc tách các đám mây điểm ảnh có mặt trên mặt phẳng, tập hợp các điểm gần nhau sẽ được nhóm lại thành một đám mây điểm ảnh, mỗi một nhóm đám mây điểm ảnh đại diện một vật thể.
Các hàm hỗ trợ thực hiện: setInputCloud(cloud_filtered); setIndices(inliers);
filter(*cloud_cluster);