PCL點雲特徵描述與提取(2)

2021-07-30 09:32:34 字數 3133 閱讀 3759

點特徵直方圖(pfh)描述子

正如點特徵表示法所示,表面法線和曲率估計是某個點周圍的幾何特徵基本表示法。雖然計算非常快速容易,但是無法獲得太多資訊,因為它們只使用很少的幾個引數值來近似表示乙個點的k鄰域的幾何特徵。然而大部分場景中包含許多特徵點,這些特徵點有相同的或者非常相近的特徵值,因此採用點特徵表示法,其直接結果就減少了全域性的特徵資訊。那麼三維特徵描述子中一位成員:點特徵直方圖(point feature histograms),我們簡稱為pfh,從pcl實現的角度討論其實施細節。pfh特徵不僅與座標軸三維資料有關,同時還與表面法線有關。

pfh計算方式通過引數化查詢點與鄰域點之間的空間差異,並形成乙個多維直方圖對點的k鄰域幾何屬性進行描述。直方圖所在的高維超空間為特徵表示提供了乙個可度量的資訊空間,對點雲對應曲面的6維姿態來說它具有不變性,並且在不同的取樣密度或鄰域的噪音等級下具有魯棒性。點特徵直方圖(pfh)表示法是基於點與其k鄰域之間的關係以及它們的估計法線,簡言之,它考慮估計法線方向之間所有的相互作用,試圖捕獲最好的樣本表面變化情況,以描述樣本的幾何特徵。因此,合成特徵超空間取決於每個點的表面法線估計的質量。如圖所示,表示的是乙個查詢點(pq)

的pfh計算的影響區域,pq

用紅色標註並放在圓球的中間位置,半徑為r,

(pq)

的所有k鄰元素(即與點pq

的距離小於半徑r的所有點)全部互相連線在乙個網路中。最終的pfh描述子通過計算鄰域內所有兩點之間關係而得到的直方圖,因此存在乙個o(k)

的計算複雜性。

查詢點 的pfh計算的影響區域

為了計算兩點pi

和pj及與它們對應的法線ni

和nj之間的相對偏差,在其中的乙個點上定義乙個固定的區域性座標系,如圖2所示。

使用上圖中uvw座標系,法線

和之間的偏差可以用一組角度來表示,如下所示:

d是兩點ps

和pt之間的歐氏距離

。計算k鄰域內的每一對點的

四組值,這樣就把兩點和

它們法線相關的12個引數(xyz座標值和法線資訊)減少到4個

為查詢點建立最終的pfh表示,所有的四元組將會以某種統計的方式放進直方圖中,這個過程首先把每個特徵值範圍劃分為b個子區間,並統計落在每個子區間的點數目,因為四分之三的特徵在上述中為法線之間的角度計量,在三角化圓上可以將它們的引數值非常容易地歸一到相同的區間內。乙個統計的例子是:把每個特徵區間劃分成等分的相同數目,為此在乙個完全關聯的空間內建立有

個區間的直方圖。在這個空間中,乙個直方圖中某一區間統計個數的增一對應乙個點的四個特徵值。如圖3所示,就是點雲中不同點的點特徵直方圖表示法的乙個例子,在某些情況下,第四個特徵量d在通常由機械人捕獲的2.5維資料集中的並不重要,因為臨近點間的距離從視點開始是遞增的,而並非不變的,在掃瞄中區域性點密度影響特徵時,實踐證明省略d是有益的。

更詳細的解釋:pointclouds.org/documentation/tutorials/how_features_work.php#rusudissertation

估計pfh特徵

點特徵直方圖(pfh)在pcl中的實現是pcl_features模組的一部分。預設pfh的實現使用5個區間分類(例如:四個特徵值中的每個都使用5個區間來統計),

以下**段將對輸入資料集中的所有點估計其對應的pfh特徵。

#include //

點型別標頭檔案

#include

//pfh特徵估計類標頭檔案

...//

其他相關操作

pcl::pointcloud

::ptrcloud(new pcl::pointcloud);

pcl::pointcloud

::ptrnormals(new pcl::pointcloud());

...//

開啟點雲檔案估計法線等

//建立pfh估計物件pfh,並將輸入點雲資料集cloud和法線normals傳遞給它

pcl::pfhestimation

pfh;

pfh.setinputcloud(cloud);

pfh.setinputnormals(normals);

//如果點雲是型別為pointnormal,則執行pfh.setinputnormals (cloud);

//建立乙個空的kd樹表示法,並把它傳遞給pfh估計物件。

//基於已給的輸入資料集,建立kdtree

pcl::kdtreeflann

::ptrtree(new pcl::kdtreeflann());

pfh.setsearchmethod(tree);

//輸出資料集

pcl::pointcloud

::ptrpfhs(new pcl::pointcloud());

//使用半徑在5厘公尺範圍內的所有鄰元素。

//注意:此處使用的半徑必須要大於估計表面法線時使用的半徑!!!

pfh.setradiussearch(

0.05

);//

計算pfh特徵值

pfh.compute(*pfhs);

//pfhs->points.size ()應該與input cloud->points.size ()有相同的大小,即每個點都有乙個pfh特徵向量

pfhestimation類的實際計算程式內部只執行以下:

對點雲p中的每個點p

1.得到p點的最近鄰元素

2.對於鄰域內的每對點,計算其三個角度特徵引數值

3.將所有結果統計到乙個輸出直方圖中

PCL點雲特徵描述與提取(2)

點特徵直方圖 pfh 描述子 正如點特徵表示法所示,表面法線和曲率估計是某個點周圍的幾何特徵基本表示法。雖然計算非常快速容易,但是無法獲得太多資訊,因為它們只使用很少的幾個引數值來近似表示乙個點的k鄰域的幾何特徵。然而大部分場景中包含許多特徵點,這些特徵點有相同的或者非常相近的特徵值,因此採用點特徵...

點雲庫PCL學習 特徵描述與提取(1)

點雲的識別 分割 重取樣 配準 曲面重建等處理的大部分演算法,都嚴重依賴特徵描述與提取的結果。特徵向量所滿足的條件 通常,pcl中特徵向量利用k d tree 查詢。輸入點雲呼叫習慣 setinputcloud pointcloudconstptr 必須乙個完整的點雲資料集,此函式必須設定,seti...

特徵描述子提取公用介面

opencv封裝了一些特徵描述子提取演算法,使得使用者能夠解決該問題時候方便使用各種演算法。這章用來計算的描述子提取被表達成乙個高維空間的向量 vector 所有實現 vector 特徵描述子子提取的部分繼承了 descriptorextractor 介面.class descriptorextra...