PCL點雲聚類後輸出聚類剩餘的點雲

2021-09-30 16:30:07 字數 1069 閱讀 8917

之前使用區域增長演算法將點雲檔案聚類後,聚類的面通過索引就可以輸出,但是想既要聚類的面,也要聚類剩餘的點,搜遍了沒有這方面的資料,國內網上聚類方面的資料都是抄抄pcl學習教程,都是輸出聚類麵就完事了。遂決定,自己寫乙個,輸出聚類後剩餘的點雲。

主要方法是使用kd-tree來比較聚類完所有的聚類麵與原點雲檔案,通過比較點距來判斷是否是剩餘點

第二種方法是使用八叉樹來做,先寫第一種方法,有時間更新八叉樹。

話不多說,完成這個需要先將所有聚類的面整合在一起輸出成乙個pcd

//當聚類完後,提取聚類點的索引這一步相信都會關鍵**:

pcl::聚類演算法不同這裡也不同yy;

std::vectorxx;

yy.extract(xx);//提取點索引

//輸出所有聚類麵

pcl::pointcloud::ptr cloudout(new pcl::pointcloud);//存在cloudout裡

std::out<<"複製後"//存放a,b點雲的**塊

pcl::pointcloud::ptr acloud(new pcl::pointcloud);

if (pcl::io::loadpcdfile("a.pcd", *acloud) == -1)

int apoints = (int)acloud->points.size();

int bpoints = (int)bcloud->points.size();

std::vectorla(apoints, 0);

std::vectorlb(bpoints, 0);

std::vectorla; la.clear();

std::vectorlb; lb.clear();

for (int i = 0; i < apoints; ++i)

}}

這裡是第一種方法,第一種方法實際上是便利判斷兩個點雲的不同,試用場景較廣,但是遍歷,效率太低,如果僅想知道兩個點雲相比較多了那些點,使用八叉樹更為迅速

點雲庫pcl教程,第6章八叉樹

第131頁

PCL點雲歐式聚類

pcl庫里有pcl euclideanclusterextraction函式,可以提取點雲的歐式聚類,把每個點簇的索引存到vector裡。threshold 歐式聚類的最小距離閾值 minclustersize 點簇的最小數目 maxclustersize 點簇的最大數目下面 裡的cluster i...

PCL點雲庫 歐式聚類分割

pcl euclideanclusterextraction是基於歐式距離提取集群的方法,僅依據距離,將小於距離閾值的點雲作為乙個集群。具體的實現方法大致是 1 找到空間中某點p10,由kdtree找到離他最近的n個點,判斷這n個點到p的距離 2 將距離小於閾值r的點p12 p13 p14 放在類q...

點雲學習 3 2 聚類演算法之譜聚類

譜聚類推導過程較為繁瑣,本文不作介紹,重點在於使用python語言實現演算法。譜聚類步驟 1.建無向圖,獲取鄰接矩陣w 對稱矩陣 2.計算拉普拉斯矩陣l l d w,其中d為對角陣,每個元素為w在該行求和 3.對l進行特徵分解,獲取最小的k個特徵值對應的特徵向量 4.將k個特徵向量構造成矩陣v 5....