歐式聚類是一種基於歐氏距離度量的聚類演算法。基於kd-tree的近鄰查詢演算法是加速歐式聚類演算法的重要預處理方法。
kd-樹是k-dimension tree的縮寫,是對資料點在k維空間中劃分的一種資料結構;kd-樹是一種平衡二叉樹。為了能有效的找到最近鄰,kd-樹採用分而治之的思想,即將整個空間劃分為幾個小部分。k-d樹演算法的應用可以分為兩方面,一方面是有關k-d樹本身這種資料結構建立的演算法,另一方面是在建立的k-d樹上如何進行最鄰近查詢的演算法。
k-d tree是每個節點均為k維數值點的二叉樹,其上的每個節點代表乙個超平面,該超平面垂直於當前劃分維度的座標軸,並在該維度上將空間劃分為兩部分,一部分在其左子樹,另一部分在其右子樹。即若當前節點的劃分維度為d,其左子樹上所有點在d維的座標值均小於當前值,右子樹上所有點在d維的座標值均大於等於當前值,本定義對其任意子節點均成立。
構建開始前,對比資料點在各維度的分布情況,資料點在某一維度座標值的方差越大分布越分散,方差越小分布越集中。從方差大的維度開始切分可以取得很好的切分效果及平衡性。
常規的k-d tree的構建過程為:迴圈依序取資料點的各維度來作為切分維度,取資料點在該維度的中值作為切分超平面,將中值左側的資料點掛在其左子樹,將中值右側的資料點掛在其右子樹。遞迴處理其子樹,直至所有資料點掛載完畢。
給定點p,查詢資料集中與其距離最近點的過程即為最近鄰搜尋
圖中對於給定的查詢資料點m,須從kd-tree的根結點開始進行比較,其中m(k)為當前結點劃分維度k上資料點m對應的值,d為當前結點劃分的閾值。若 m(k)小於d,則訪問左子樹;否則訪問右子樹,直至到達葉子結點q。此時q就是當m前最近鄰點,而m與q之間的距離就是當前最小距離dmin 。隨後沿著原搜尋路徑回退至根結點,若此過程中發現和m之間距離小於 dmin的點,則須將未曾訪問過的子節點均納入搜尋範疇,並及時更新最近鄰點,直至所有的搜尋路徑都為空,整個基於kd-tree結構的最近鄰點查詢過程便告完成。
對於歐式聚類來說,距離判斷準則為前文提到的歐氏距離。對於空間某點p,通過kd-tree近鄰搜尋演算法找到k個離p點最近的點,這些點中距離小於設定閾值的便聚類到集合q中。如果q中元素的數目不在增加,整個聚類過程便結束;否則須在集合q中選取p點以外的點,重複上述過程,直到q中元素的數目不在增加為止。
《基於kdtree樹和歐式聚類的越野環境下行人識別的研究》_範晶晶
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...
PCL 歐式聚類演算法詳解
參考 歐式聚類是一種基於歐氏距離度量的聚類演算法。基於kd tree的近鄰查詢演算法是加速歐式聚類演算法的重要預處理方法。pcl對歐幾里德演算法進行了很好的封裝,其 如下 被分割出來的點雲團 標號佇列 std vector pointindices cluster indices 歐式分割器 pcl...