2017-05-22 5 views
1

Ich verwende derzeit die Point Cloud Library (PCL), um mit Punktwolken zu arbeiten. Jetzt muss ich ein Mesh für eine Punktwolke berechnen und denke, dass es am besten ist, Meshlab zu verwenden. So weit so gut, mein Problem ist, dass meine Punktwolke Etiketten hat, das heißt es in der folgenden Form ist:Wie gelabelte Punktwolke in Meshlab laden?

pcl::PointCloud<pcl::PointXYZRGBL> cloud; 

Wichtig: ich die Etiketten nicht auslassen kann, muß ich wissen, nachdem das Netz berechnet wird, welcher Punkt des Netzes hat welches Label. Später usw. nach einiger Manipulation speichere ich diese Wolke über

pcl::io::savePLYFileBinary(writePath, *cloud); 

die gut arbeitet IF die Wolke vom Typ

pcl::PointCloud<pcl::PointXYZRGB> cloud; 

aber für den ersten Fall nicht funktioniert. Hat jemand eine Idee, was ich tun könnte, um eine PLY-Datei zu erhalten, die Labels enthält und in Meshlab geladen werden kann?

Vielen Dank!

+0

"Was gut funktioniert" bedeutet, dass MeshLab in der Lage ist, es zu öffnen und ein Netz zu erzeugen, oder dass 'savePLYFileBinary' die Datei korrekt speichert? Was ist dein Problem? MeshLab kann die Datei nicht öffnen? MeshLab kann Etiketten beim Öffnen nicht beibehalten? MeshLab kann Etiketten nach der Vernetzung nicht beibehalten? – cbuchart

+0

MeshLab ist nicht in der Lage, es überhaupt zu öffnen, aber es gibt keinen Fehler, stattdessen kann ich es laden, aber sieht keine Wolke. – Tukk

Antwort

0

Als MeshLab nicht in der Lage ist Ihre markierten Punkte Wolke zu öffnen, würde ich vorschlagen, zu:

  1. Export Ihre Punktwolke auf ein lesbares Format MeshLab (zum Beispiel die pcl::PointCloud<pcl::PointXYZRGB> Sie erwähnt).

  2. Rekonstruieren Sie das Dreiecksnetz mithilfe einer interpolierenden Methode wie Kugelschwenkung. Die Interpolationsmethode ist notwendig, um die ursprünglichen Punkte als Knoten des Netzes zu erhalten. Wenn Sie fertig sind, speichern Sie das Netz.

  3. Laden Sie das Netz bei Übereinstimmung der Scheitelpunkte mit Ihrer ursprünglichen Punktwolke, damit Sie die Beschriftungen und alle anderen zugeordneten Attribute wiederherstellen können. Im Schnelltest habe ich sogar die Reihenfolge der Scheitelpunkte mit der der Punkte eins gemacht.


aktualisieren

Sie in einem Kommentar erwähnt, dass Sie dieAbgeschirmte Poisson Rekonstruktion verwendet haben. Diese Methode verwendet Eingabepunkte als Positionsbeschränkungen, um die Genauigkeit der Methode zu verbessern. Sie ist jedoch immer noch eine Näherungsmethode, sodass Ausgabescheitelpunkte nicht garantiert den Eingabepunkten entsprechen (was wahrscheinlich nicht der Fall ist).

Sie können entweder wechseln Sie zu einem Interpolationsverfahren (wenn Rauschen und Ausreißern können Sie) oder den nächsten Punkt für jeden Scheitelpunkt zu finden (unter Verwendung eines -NN, wie Sie jetzt tun) Eckpunkte zu beschriften.

Oben gilt für alle diskreten Werte. Sie sollten auch andere Werte anpassen, z. B. Farbe, um die Rekonstruktion besser anzupassen (Scheitelpunkte, die nicht mit Punkten übereinstimmen). Dazu können Sie den entsprechenden Wert aus dem k -NN interpolieren.

+0

Das mache ich gerade. Ich berechne nur das Mesh und speichere es. Dann lade ich dieses Mesh in mein Programm und mache eine Nearest Neighbour-Zuweisung von Label. Da ich gescreente Poisson-Rekonstruktion verwende, bin ich nicht sicher, ob die Punkte entfernt/verschoben werden oder etwas anderes, was später zu falschen Label-Zuweisungen führen würde. – Tukk

+0

Der SPR garantiert keine interpolierende Methode, sondern führt nur Positionsbeschränkungen ein, um die Genauigkeit des rekonstruierten Netzes zu erhöhen. In diesem Fall können Sie also nicht garantieren, dass die Anzahl der Scheitelpunkte gleich der Anzahl der Eingabepunkte ist. Sie sollten a) die Rekonstruktionsmethode ändern (abhängig von Ihrem Lärmpegel und Ausreißern, die nicht möglich ist), b) halten Sie sich an Ihre aktuelle Methode, die ich für sehr gut halte. – cbuchart

+0

Ich gehe davon aus, dass Etiketten diskrete Werte sind. Wahrscheinlich möchten Sie stattdessen die nächsten Nachbarn finden und eine Interpolation für alle anderen Kontinuumswerte wie z. B. Farbe vornehmen. – cbuchart

Verwandte Themen