首先使用系統時間初始化rand()函式的種子,然後用隨機資料填充點雲物件
srand (time (null));
pcl::pointcloud::ptr cloud (new pcl::pointcloud);
// generate pointcloud data
cloud->width = 1000;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size (); ++i)
下邊**建立了kdtreeflann物件,並把建立的點雲設定成輸入,然後建立乙個searchpoint作為查詢點,並分配隨機座標
pcl::kdtreeflannkdtree;
kdtree.setinputcloud (cloud);
pcl::pointxyz searchpoint;
searchpoint.x = 1024.0f * rand () / (rand_max + 1.0f);
searchpoint.y = 1024.0f * rand () / (rand_max + 1.0f);
searchpoint.z = 1024.0f * rand () / (rand_max + 1.0f);
現在建立乙個整數(設定成10)和兩個向量來儲存搜尋到的k近鄰,兩個向量中乙個儲存搜尋到查詢點近鄰的索引,另乙個儲存對應近鄰的距離平方
// k nearest neighbor search
int k = 10;
std::vectorpointidxnknsearch(k);
std::vectorpointnknsquareddistance(k);
std::cout << "k nearest neighbor search at (" << searchpoint.x
<< " " << searchpoint.y
<< " " << searchpoint.z
<< ") with k=" << k << std::endl;
假設kd-tree物件返回了多於0個近鄰,搜尋結果已經儲存在兩個向量中,並把所有十個近鄰的位置列印輸出
if ( kdtree.nearestksearch (searchpoint, k, pointidxnknsearch, pointnknsquareddistance) > 0 )
下面**展示查詢到給定searchpoint的某一半徑內的所有近鄰,重新定義兩個向量來儲存關於近鄰的資訊
std::vectorpointidxradiussearch;
std::vectorpointradiussquareddistance;
float radius = 256.0f * rand () / (rand_max + 1.0f);
如果kd-tree物件在指定半徑內返回多於0個近鄰,列印向量儲存值的座標和距離
kdTree介紹以及PCL示例
kdtree概念 kd tree或者k維樹是電腦科學中使用的一種資料結構,用來組織表示k維空間中點的集合。它是一種帶有其他約束條件的二分查詢樹。kd tree對於區間和近鄰搜尋十分有用。一般位於三維空間中的鄰域搜尋常用kd tree,因此本文中所有的kd tree都是三維的kd tree。圖一kd ...
PCL系列2 Kd Tree的使用
include kdtree近鄰搜尋 include 檔案輸入輸出 include 點型別相關定義 include 視覺化相關定義 include include int main 2.原始點雲著色 for size t i 0 i cloud points.size i 3.建立kd tree p...
MongoDB下的高階查詢示例
mongo mongodb shell version 1.8.1 connecting to test db test show collections data test system.indexes system.users db.data test.find skip 3 limit 4 分...