2017-03-27 2 views
0

Ich benutze eine Bibliothek namens Point Cloud Library (PCL). Insbesondere versuche ich Punkt-Feature-Histogramme zu berechnen. Ich folgte diesen Code von der Website:Punkt Feature Histogramme in PCL Bibliothek Ausgabe Interpretation

#include <pcl/point_types.h> 
#include <pcl/features/pfh.h> 

{ 
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); 
    pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>()); 

    ... read, pass in or create a point cloud with normals ... 
    ... (note: you can create a single PointCloud<PointNormal> if you want) ... 

    // Create the PFH estimation class, and pass the input dataset+normals to it 
    pcl::PFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::PFHSignature125> pfh; 
    pfh.setInputCloud (cloud); 
    pfh.setInputNormals (normals); 
    // alternatively, if cloud is of tpe PointNormal, do pfh.setInputNormals (cloud); 

    // Create an empty kdtree representation, and pass it to the PFH estimation object. 
    // Its content will be filled inside the object, based on the given input dataset (as no other search surface is given). 
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>()); 
    //pcl::KdTreeFLANN<pcl::PointXYZ>::Ptr tree (new pcl::KdTreeFLANN<pcl::PointXYZ>()); -- older call for PCL 1.5- 
    pfh.setSearchMethod (tree); 

    // Output datasets 
    pcl::PointCloud<pcl::PFHSignature125>::Ptr pfhs (new pcl::PointCloud<pcl::PFHSignature125>()); 

    // Use all neighbors in a sphere of radius 5cm 
    // IMPORTANT: the radius used here has to be larger than the radius used to estimate the surface normals!!! 
    pfh.setRadiusSearch (0.05); 

    // Compute the features 
    pfh.compute (*pfhs); 

    // pfhs->points.size() should have the same size as the input cloud->points.size()* 
} 

Der Ausgang mir ein Array von 125 Werten pro Punkt von der ursprünglichen Punktwolke. Wenn ich zum Beispiel eine Punktewolke mit 1000 Punkten habe, wo jeder Punkt XYZ enthält, dann gibt es 1000 * 125 Werte. Ich konnte verstehen, warum ich 125 Einträge habe, von denen jeder einer Bin entspricht. (Unter der Annahme, 3 Merkmale und 5 Divisionen 5^3 = 125)

Dieser Beitrag half einige: PCL Point Feature Histograms - binning

Leider habe ich noch ein paar Fragen:

1) Warum habe ich eine 125-Histogramme pro Punkt ? Ist es, weil es misst, was der Prozentsatz der Punkte ist, die in der K-nächsten Nachbarschaft zum gegenwärtigen Punkt sind, haben ähnliche Eigenschaften und dann hat jeder Punkt seine eigene Nachbarschaft?

2) Ich sehe für einige Punkte alle 125 Einträge sind Nullen. Warum?

3) Graphische Darstellung von Punkt-Feature-Histogramme Werte wie in der Papier- und Website gezeigt:

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

Papier: https://pdfs.semanticscholar.org/5aee/411f0b4228ba63c85df0e8ed64cab5844aed.pdf

Die gezeigten Graphen ihre X-Achse als Anzahl der Bins haben (in meinem Fall 125 Bins) so die natürliche Frage, wie konsolidieren wir 125 Werte pro Punkt in einem Graphen? Ich habe versucht, eine einfache Summierung von geeigneten Spalten und skalieren sie um eine Konstante, aber ich denke nicht, dass es richtig ist. Mit summierung meine ich addiere alle bin [0] für jeden Punkt, summiere als nächstes alle bin [1] für jeden Punkt und so weiter bis bin [124].

Ich würde wirklich jede Hilfe schätzen, um dies zu klären. Danke.

Antwort

1

Der PFH-Deskriptor ist ein lokaler Deskriptor, daher wird das Histogramm für jeden gegebenen Punkt berechnet. Sie werden wahrscheinlich nur einen Schlüsselpunkt oder eine Menge von KPypunkten verwenden wollen.

Das Histogramm enthält Einträge von 0, wenn es innerhalb der Radiussuche keine nächsten Nachbarn gibt.

Wie für die grafische Darstellung, versuchen Sie, das Histogramm für jeweils einen Punkt anzuzeigen. Ich denke nicht, dass es sinnvoll ist, es in einem Diagramm zu konsolidieren.

Wenn Sie an globalen Deskriptoren interessiert sind, die alle Punkte berücksichtigen, werfen Sie einen Blick auf den CVFH-Deskriptor (Clustered Viewpoint Feature Histogram) oder andere globale Deskriptoren.