Point Feature Histograms (PFH) descriptors

点特徴量ヒストグラム(PFH)記述子

出典:http://pointclouds.org/documentation/tutorials/pfh_estimation.php#pfh-estimation

点特徴量表現として、表面の法線と曲率の推定値は、特定の点を中心としたジオメトリの表現においては基本的なものである。 非常に高速で計算が容易であるが、点のk-近傍のジオメトリをいくつかの数値で近似するというものなので、詳細をあまり捉えることができない。 直接的な帰結として、ほとんどの状況においては、同一もしくは非常に類似した特徴量を持つ多くの点が含まれるため、情報的特性が減少することになる。

このチュートリアルでは、PFH(Point Feature Histogram, 点特徴ヒストグラム)という一連の3D特徴量を紹介し、その理論上の利点を示し、PCLの観点から実装の詳細について説明する。 前提条件として、まずPointCloudにおける表面法線の推定を読むこと。なぜならPFHシグネチャはxyz 3Dデータと表面法線の両方に依存しているからである。

Theoretical primer

基礎理論

PFH定式化の目標は、多次元の値のヒストグラムを用いて点の周りの平均曲率を一般化することにより、点のk-近傍の幾何学的特性を符号化することである。この高次元の超空間は、特徴表現の情報量の多いシグネチャを提供し、基礎となる表面の6Dポーズに対して不変であり、いろいろなサンプリング密度や近傍に存在するノイズレベルに非常によく対応する。

点特徴ヒストグラム(PFH)表現は、k近傍内の点とそれらの推定表面法線との間の関係に基づいている。簡単に言えば、推定された法線の方向同士の全ての相互作用を考慮に入れて、サンプリングされた表面の変化を可能な限り最良に捕捉しようと試みる。その結果得られる超空間は、各点における表面法線推定の品質に依存する。

下の図は、赤でマークされ、半径${\bf r}$の円(3次元では球)の真ん中に位置するクエリーポイント($\boldsymbol{p}_q$)に対するPFH計算の影響領域図を示している。その点に対するすべての${\bf k}$近傍(半径${\bf r}$よりも距離が小さい点)は、メッシュ内で完全に相互接続されている。最終的なPFH記述子は、その近傍のすべての点対の間の関係のヒストグラムとして計算され、したがって、$O(k^2)$の計算複雑性を有する。

http://pointclouds.org/documentation/tutorials/_images/pfh_diagram.png

2つの点$\boldsymbol{p}_i$と$\boldsymbol{p}_j$の差と、それらの点についての法線$\boldsymbol{n}_i$と$\boldsymbol{n}_j$を計算するために、どちらかの点に固定座標系を定義する(下図参照)。 http://pointclouds.org/documentation/tutorials/_images/math/3e4246b085f695d74072d1be058cf8283ed94655.png

http://pointclouds.org/documentation/tutorials/_images/pfh_frame.png

上の${\bf uvw}$座標系を使用して、2つの法線$\boldsymbol{ n}_s$と$\boldsymbol{n}_t$の間の差は、以下のような角度特徴の集合として表すことができる: http://pointclouds.org/documentation/tutorials/_images/math/477bd704365b5b567c59680f376bb72176a593fe.png

ここで、$d$は2点$\boldsymbol{p}_s$と$\boldsymbol{p}_t$のユークリッド距離であり、$d = \| \boldsymbol{p}_t- \boldsymbol{p}_s \|_2$。 四つ組$\langle \alpha、\phi、\theta、d \rangle$は、k-近傍内の2つの点のペアそれぞれについて計算され、したがって2つの点とその法線による12個の値(xyz座標と法線情報)を4に削減する。

一対の点に対するPFH四つ組を推定するには、次のようにする(C++):

computePairFeatures (const Eigen::Vector4f &p1, const Eigen::Vector4f &n1,
                     const Eigen::Vector4f &p2, const Eigen::Vector4f &n2,
                     float &f1, float &f2, float &f3, float &f4);

クエリーポイントの最終的なPFH表現を作成するために、すべての4つ組のセットからヒストグラムを作る。ここでヒストグラム作成プロセスとは、各特徴量の値の範囲を$b$個の領域に分割し、それぞれの領域内の特徴量の出現数をカウントするものである。上に示した4つの特徴量のうち3つは法線間の角度の尺度であるため、その値は三角関数の円内で同間隔に容易に正規化できる。分割の例として、各特徴量の間隔を同数のパーツに分割する方法があり、この方法だと完全に相関のある空間に$b^4$個のビンを持つヒストグラムを作成する。この空間では、ヒストグラム・ビン・インクリメントは、その4つの特徴量すべてについてある一定の値をもつ点に対応する。下の図は、クラウド内のさまざまな点に対するPFH表現の例を示すものである。

いくつかのケースにおいて、特に通常ロボティクスで得られるような2.5Dデータセットに対しては、第4の特徴量${\bf d}$はあまり重要ではない、なぜなら隣接ポイント間の距離は視点からみると増加するからである。したがって、局所的な点密度がこの特徴次元に影響を及ぼすデータ取得方法に対しては${\bf d}$を省略することは有益である。

http://pointclouds.org/documentation/tutorials/_images/example_pfhs.jpg