2017-10-29 3 views
0

Ich segmentieren das Objekt aus der Punktwolke in PCL und haben die Punktwolke des Objekts. Auf diese Weise berechne ich den Schwerpunkt des segmentierten Objekts unter Verwendung der PCL-Methoden:Schwerpunkt des segmentierten Objekts nicht in der Mitte

pcl :: PointXYZRGB centroidDDS; pcl :: computeCentroid (* gereinigt, centroidDS);

Wenn ich den Schwerpunkt mit Überlagerung zum Objekt visualisiere, liegt es immer an den Rändern des Objekts. Ich verwende den Schwerpunkt als Feature, also wäre es schön, wenn jemand eine Idee hat, wie man das berechnet. Zentroid eines segmentierten Objekts sollte mehr oder weniger in der Mitte des Objekts sein.

Antwort

1

Sicher hast du nicht mehrere identische Punkte irgendwo? Das würde den Schwerpunkt vom scheinbar logischen Zentrum der Punktwolke wegziehen. Wenn Sie glauben, dass die pcl-Funktion etwas falsch macht, testen Sie es einfach mit

float x = y = z = 0.0; 
for (int i = 0; i < cleaned->points.size(); i++){ 
    x += cleaned->points[i].x; 
    y += cleaned->points[i].y; 
    z += cleaned->points[i].z; 
} 
x = x/cleaned->points.size(); 
y = y/cleaned->points.size(); 
z = z/cleaned->points.size(); 

Dies sollte der gleiche wie der Schwerpunkt sein. Wenn dies Ihr Problem ist, können Sie versuchen, die verschiedenen Punkte zu entfernen oder eine Voxel-Grid-Filterung der Punktwolke durchzuführen, um eine gleichmäßig verteilte Wolke zu erhalten. http://pointclouds.org/documentation/tutorials/voxel_grid.php

+0

Ich habe Voxel Grid Downsampling vor der Segmentierung gemacht. Wie überprüfe ich die verschiedenen Punkte? Kann es sein, dass meine Segmentierung nicht gut genug ist und es einige kleine Punkte oder Blobs gibt, die ich nicht sehe, die den Schwerpunkt verschieben. – bugmaker06

+0

Wenn Sie das Downsampling des Voxel-Rasters durchgeführt haben, sollten in einem kleinen Bereich keine mehreren Punkte oder ein Cluster von Punkten vorhanden sein. Offensichtlich abhängig von Ihrer Rastergröße. Vielleicht möchte ich das auch überprüfen. Wenn Sie jedoch immer noch Duplikate oder Quasi-Duplikate haben, bei denen die Koordinatendifferenz minimal ist, können Sie mit Octree berechnen, wie viele Punkte in ein Voxel fallen. Auch funktioniert nur eine normale kdtree-Suche mit einem Radius und zählt die Anzahl der Nachbarn innerhalb einer Entfernung. Dieser Beitrag spricht über Octree. http://www.pcl-users.org/Saving-Octree-voxel-density-information-to-file-td3840729.html – Rooscannon

Verwandte Themen