PCL的kdtree查詢的示例應用

2021-10-03 03:35:04 字數 3155 閱讀 1824

首先使用系統時間初始化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 分...