Point Cloud-Bibliothek, robuste Registrierung von zwei Punktwolken

8

Ich muss die Transformations- und Rotationsdifferenz zwischen zwei 3D-Punktwolken finden. Dafür sehe ich PCL, wie es ideal erscheint.

Bei sauberen Testdaten funktioniert Iterativ am nächsten, aber es ergeben sich merkwürdige Ergebnisse (obwohl ich es möglicherweise falsch implementiert habe ...) Ich habe pcl::estimateRigidTransformation funktioniert, und es scheint besser, obwohl ich nehme an, wird mit lauten Daten schlechter umgehen.

Meine Frage ist:

Die zwei Wolken werden laut sein, und obwohl sie die gleichen Punkte enthalten sollten, wird es einige Diskrepanzen geben. Was ist der beste Weg, damit umzugehen?

Sollte ich zu Beginn entsprechende Features in den beiden Clouds finden und dann estimateTransform verwenden? Oder sollte ich eine Funktion RANSAC betrachten, um Ausreißer zu entfernen? Ist ICP ein besserer Weg als estimateRigidTransform ?

    
anti 31.05.2015, 16:09
quelle

3 Antworten

6

Die Einrichtung eines robusten Punktwolken-Registrierungsalgorithmus kann eine Herausforderung darstellen, bei der verschiedene Optionen, Hyperparameter und Techniken korrekt eingestellt werden, um starke Ergebnisse zu erzielen.

Allerdings enthält die Point Cloud-Bibliothek eine ganze Reihe vorimplementierter Funktionen, um diese Art von Aufgabe zu lösen. Das einzige, was noch zu tun ist, ist zu verstehen, was jeder Block macht, und dann eine sogenannte ICP-Pipeline aufzubauen, die aus diesen Blöcken besteht, die aufeinander gestapelt sind.

Eine ICP-Pipeline kann zwei verschiedenen Pfaden folgen:

1. Iterativer Registrierungsalgorithmus

Der einfachere Pfad beginnt sofort, indem er einen iterativen Algorithmus für den nächstgelegenen Punkt auf der Eingangs-Wolke (IC) anwendet, um ihn mit der festen Referenz-Wolke (RC) zu berechnen, indem immer die Methode des nächsten Punktes verwendet wird. Der ICP nimmt eine optimistische Annahme an, dass die zwei Punktwolken nahe genug sind (gute Vorperiode von Rotation R und Translation T), und die Registrierung konvergiert ohne weitere anfängliche Ausrichtung.

Dieser Pfad kann natürlich in einem lokalen Minimum hängen bleiben und daher sehr schlecht funktionieren, da er anfällig dafür ist, durch irgendwelche Ungenauigkeiten in den gegebenen Eingabedaten getäuscht zu werden.

2. Feature-basierter Registrierungsalgorithmus

Um dies zu überwinden, haben die Menschen daran gearbeitet, alle Arten von Methoden und Ideen zu entwickeln, um die schlechte Registrierung zu überwinden. Im Gegensatz zu einem rein iterativen Registrierungsalgorithmus ist eine featurebasierte Registrierung zunächst darauf angewiesen, höhere Hebelkorrespondenzen zwischen den beiden Punktwolken zu finden, um den Prozess zu beschleunigen und die Genauigkeit zu verbessern. Die Methoden werden gekapselt und dann in die Registrierungsziffer eingebettet, um ein vollständiges Registrierungsmodell zu bilden.

Das folgende Bild aus der PCL-Dokumentation zeigt eine solche Registrierungs-Pipeline:

Wie Sie sehen können, sollte eine paarweise Registrierung durch verschiedene Berechnungsschritte laufen, um die beste Leistung zu erbringen. Die einzelnen Schritte sind:

  1. Datenerfassung: Eine Eingangswolke und eine Referenzwolke werden in den Algorithmus eingegeben.

  2. Schätzung von Schlüsselpunkten: Ein Schlüsselpunkt ( Interessenpunkt ) ist ein Punkt innerhalb der Punktwolke das hat die folgenden Eigenschaften:

    1. es hat eine klare, vorzugsweise mathematisch fundierte Definition
    2. es hat eine klar definierte Position im Bildraum,
    3. Die lokale Bildstruktur um den Interessenpunkt ist reich an lokalen Informationsinhalten

    Solche hervorstechenden Punkte in einer Punktwolke sind so nützlich, weil ihre Summe eine Punktwolke charakterisiert und dabei hilft, verschiedene Teile davon unterscheidbar zu machen.

    %Vor%

    Detaillierte Informationen: PCL-Keypoint - Dokumentation

  3. Beschreibung der Schlüsselpunkte - Feature-Deskriptoren: Nachdem wir die Schlüsselpunkte erkannt haben, berechnen wir einen Deskriptor für jeden von ihnen. "Ein lokaler Deskriptor eine kompakte Darstellung der lokalen Nachbarschaft eines Punktes. Im Gegensatz zu globalen Deskriptoren, die ein vollständiges Objekt oder eine Punktwolke beschreiben, versuchen lokale Deskriptoren nur in einer lokalen Nachbarschaft um einen Punkt herum Form und Aussehen zu ähneln und eignen sich daher sehr gut dazu in Bezug auf das Matching. " (Dirk Holz et al.)

    %Vor%

    Detaillierte Informationen: PCL-Funktionen - Dokumentation

  4. Korrespondenzschätzung: Die nächste Aufgabe besteht darin, Übereinstimmungen zwischen den in den Punktwolken gefundenen Schlüsselpunkten zu finden. In der Regel nutzt man die berechneten lokalen Featuredeskriptoren aus und vergleicht jedes einzelne mit seinem entsprechenden Gegenstück in der anderen Punktwolke. Aufgrund der Tatsache, dass zwei Scans aus einer ähnlichen Szene nicht notwendigerweise die gleiche Anzahl von Feature-Deskriptoren haben, wie eine Cloud mehr Daten als die andere haben kann, müssen wir einen separaten Korrespondenz-Ablehnungs-Prozess durchführen.

    %Vor%
  5. Korrespondenzabweisung: Einer der gebräuchlichsten Ansätze zum Zurückweisen von Korrespondenz ist RANSAC (Stichprobenkonsens). Aber PCL kommt mit mehr Zurückweisungsalgorithmen, die es wert sind, sie genauer zu betrachten:

    %Vor%

    Detaillierte Informationen: Registrierung des PCL-Moduls - Dokumentation

  6. Transformation Estimation: Nachdem robuste Korrespondenzen zwischen den beiden Punktwolken berechnet wurden, wird ein Absoluter Orientierungsalgorithmus verwendet, um eine 6DOF Transformation (6 Freiheitsgrade) zu berechnen, die auf die Eingangswolke angewendet wird Referenzpunktwolke. Es gibt viele verschiedene algorithmische Ansätze, aber PCL enthält eine Implementierung, die auf der Singular Value Decomposition (SVD) basiert. Es wird eine 4x4-Matrix berechnet, die die Rotation und Translation beschreibt, die für die Anpassung der Punktwolken benötigt wird.

    %Vor%

    Detaillierte Informationen: Registrierung des PCL-Moduls - Dokumentation

Weiterführende Literatur:

Kevin Katzke 20.07.2016, 16:01
quelle
2

Wenn Ihre Wolken laut sind und Ihre anfängliche Ausrichtung nicht sehr gut ist, vergessen Sie die Anwendung von ICP von Anfang an. Versuchen Sie, Schlüsselpunkte in Ihren Clouds zu erhalten, und schätzen Sie dann die Funktionen dieser Schlüsselpunkte. Sie können verschiedene Schlüsselpunkt- / Feature-Algorithmen testen und den Algorithmus auswählen, der für Ihren Fall besser ist.

Dann können Sie diese Merkmale zuordnen und Übereinstimmungen erhalten. Filtern Sie diese Korrespondenzen in einer RANSAC-Schleife, um Inliers zu erhalten, mit denen Sie eine Anfangstransformation erhalten. CorrespondenceRejectorSampleConsensus wird Ihnen in diesem Schritt helfen.

Sobald Sie diese Umwandlung angewendet haben, können Sie ICP für eine abschließende Verfeinerung verwenden.

Die Pipeline ist etwas wie:

  1. Erkennen von Tastenpins in beiden Punktwolken
  2. Schätzen Sie die Merkmale dieser Schlüsselpunkte
  3. Übereinstimmungen und Entsprechungen erhalten
  4. Entfernen Sie die Duplikate und wenden Sie eine RANSAC-ische Schleife an, um Inliers zu erhalten
  5. Erhalten Sie die erste Umwandlung und wenden Sie sie auf eine Punktwolke an
  6. Wenn beide Wolken anfänglich ausgerichtet sind, wenden Sie die ICP-Registrierung für die Verfeinerung an

HINWEIS: Diese Pipeline ist nur sinnvoll, wenn beide Punktwolken im gleichen Maßstab sind. In anderen Fällen müssen Sie den Skalierungsfaktor zwischen den Wolken berechnen.

    
Finfa811 12.05.2016 06:53
quelle
0

Sie können super 4pcs für die globale Registrierung verwenden. ICP ist eine lokale Methode, wie zum Beispiel die Gradientenabsenkung, die von der anfänglichen Antwort abhängt.

Weitere Informationen: Ссылка

    
mahdi_12167 22.08.2015 16:44
quelle