KdTree密度聚類算法


參考博客:https://blog.csdn.net/zhubaohua_bupt/article/details/70194047

第一種方法叫做密度減法聚類
功能:能識別特定尺寸的點雲簇集合,通過參數設置期望形狀的大小。
輸入:一片點雲
輸出:是幾個聚類完成的點簇和聚類中心點
類別不需要提前設定,最終聚成幾類由初始參數決定。
論文  3D Candidate Selection Method for Pedestrian Detection on Non-Planar Roads 用其來提取行人的ROI。

第二種方法叫做自適應密度聚類
功能:可以尋找出每個點雲的三維連通域,不需要設置形狀和大小參數。
輸入:一片點雲
輸出:每個點雲所在的連通域以及此點雲集合一共有多少連通域。
類別不需要提前設定,最終聚成幾類由連通規則中參數決定。
論文 一種聚類與濾波融合的點雲去噪平滑方法  和  密度聚類算法在連續分布點雲去噪中的應用 用這種聚類方法來對點雲去噪。

下面只介紹自適應密度聚類,用於定位面積變化的物體

這種方法就是實際上就是三維連通域檢測。聚類最后的輸出是若干塊三維連通域。和上一種方法不一樣,這種聚類方法不需要設置新裝參數,輸出的每塊連通域的大小不一定相等。下面給出這種 方法的流程圖:

                                     

 

圖 4  自適應密度聚類算法流程

此算法尋找連通域的步驟對應於流程圖的第二至第三個判斷條件組成的循環體。每循環一次,生成一個新的三維連通域。

密度定義 :此方法沒有對密度定義,而是定義了一個類似密度的核心對象:是在點雲空間范圍內,如果離點p的歐式距離小於e的其他點雲數大於一個值Minpts,就認為點p是核心對象。

那么為什么稱這種方法叫自適應密度聚類呢?

答案是,聚類它可以根據點雲自適應求出半徑參數e和點數Minpts,不需要自己提前設定,當然自己也可以提前設定。

怎么求參數e和Minpts呢?

引用原文的話:


在上述密度聚類步驟中,初始半徑e 和最小鄰域數MinPts均為自定義參數。參數初始值設置好后,需要根據聚類效果不斷調整這兩個參數以獲得最好的聚類效果,比較耗時。為了解決這一問題,本文提出一種自適應參數計算方法。

                                                                                         (1)

【1】首先,根據式(1) 計算任意兩點之間的歐式距離1。

然后根據式( 2)-式( 3) 求得dist(i,j ) 的最大值maxdist 和最小值mindist。axdist = Max{dist( i,j)| 0 ≤ i < n,0 ≤ j < n}                    ( 2)

                                                                      mindist = Min{dist( i,j )| 0 ≤ i < n,0 ≤ j < n}                  ( 3)

【2】進而根據式( 4) 求得距離間隔distrange。

                                                                      distrange = maxdist -mindist                                            ( 4)

其中,n 表示點的數目。將距離間隔等距分為十段,統計dist(i,j)在每段范圍內的頻數,初始半徑e 的值即為erang 所在分段的中值。erang 的計算公式如式( 5)所示。

                                                                       erang = Max{pk | 0 ≤ k < 10}                                            (5)

【3】初始半徑e 確定后,根據e 逐步增大最小鄰域數目MinPts,計算鄰域超過最小鄰域數目的點的數目pNum(計算公式如式( 7)所示) 。隨着最小鄰域數目的增加,pNum 會逐漸減少並趨於穩定,選擇拐點所在的最小鄰域數目作為MinPts。其中,對於任意給定點p 的鄰域點數目pNumi的計算如式( 6)所示。

                                                                       pNumi = count{dist( i,j)< e | 0 ≤ j < n}                           ( 6)

那么:                                                               pNum = count{ pNumi ≥ MinPts |0 ≤ i < n}                       ( 7)

通過該方法可以實現初始半徑和最小鄰域數的自動選擇,進而避免這兩個參數的反復設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM