5

Ich habe eine Punktwolke eines Objekts, die mit einem Laserscanner erhalten wurde, und ein CAD-Oberflächenmodell dieses Objekts.3D-Punktwolke an CAD-Modell anpassen

Wie kann ich die Punktwolke an die Oberfläche anpassen, um die Translation und Rotation zwischen Wolke und Modell zu erhalten?

Ich nehme an, ich könnte die Oberfläche abtasten und den Iterative Closest Point (ICP) Algorithmus ausprobieren, um die resultierende Punktwolke mit der Punktwolke des Scanners abzugleichen.

Würde das tatsächlich funktionieren?

Und gibt es bessere Algorithmen für diese Aufgabe?

Antwort

4

Ja, ICP kann auf dieses Problem angewendet werden, wie Sie es bei der Bemusterung der Oberfläche vorschlagen. Es wäre am besten, wenn Sie alle verfügbaren Flächen in Ihrem Laserscan haben, ansonsten müssen Sie möglicherweise unsichtbare Flächen aus Ihrem Modell entfernen (abhängig davon, wie viele davon vorhanden sind).

Eine Möglichkeit, ein Modell automatisch vorzubereiten, indem man einige der versteckten Flächen loswird, ist die Berechnung der konkaven Hülle, mit der verdeckte Flächen (z. B. Flächen, die nicht dicht an der konkaven Hülle liegen) verworfen werden können. Abhängig davon, wie stark das Modell beteiligt ist, kann dies erforderlich sein oder auch nicht.

ICP funktioniert gut, wenn eine gute erste Schätzung gegeben, da es Punkte ignoriert, die nicht in Bezug auf die aktuelle Schätzung schließen. Wenn ICP nicht mit einer guten Ausrichtung übereinstimmt, können Sie es mit mehreren zufälligen Neustarts versuchen, um dieses Problem zu beheben, indem Sie die beste Ausrichtung auswählen.

Eine kompliziertere Lösung ist das lokale Feature-Matching. Sie probieren und berechnen einen invarianten Deskriptor wie SHOT oder FPFH. Sie finden die besten Übereinstimmungen, weisen nicht konsistente Übereinstimmungen zurück, verwenden sie, um eine gute anfängliche Ausrichtung zu erzielen, und verfeinern sie anschließend mit ICP. Je nachdem, wie robust und schnell der Random-Restart-ICP ist, benötigen Sie diesen Schritt möglicherweise nicht.

1

Es gibt eine Open-Source-Bibliothek für point cloud algorithms, die registration gegen andere Punktwolken implementiert. Vielleicht können Sie einige ihrer Methoden ausprobieren, um zu sehen, ob sie passen.

Als Starter können Sie, wenn sie nichts Bestimmtes für ein Polygonnetz haben, die Gitterscheitelpunkte als eine weitere Punktwolke behandeln und Ihre Punktwolke dagegen anpassen. Dies ist etwas, das sie definitiv unterstützen.

3

Im neuen OpenCV habe ich ein Oberflächenanpassungsmodul implementiert, um ein 3D-Modell an eine 3D-Szene anzupassen. Es ist keine anfängliche Pose erforderlich und der Erkennungsprozess ist vollautomatisch. Das Modell beinhaltet auch einen ICP.

eine Vorstellung zu bekommen, wenden Sie sich bitte, dass hier ein Video Check-out (obwohl es durch die Umsetzung in OpenCV nicht erzeugt wird):

https://www.youtube.com/watch?v=uFnqLFznuZU

Der vollständige Quellcode ist here und die Dokumentation ist here.

Sie erwähnten, dass Sie Ihr CAD-Modell testen mussten.Das ist richtig, und wir haben einen Sampling-Algorithmus für Punktpaar Merkmalsanpassung, wie die Umsetzung in OpenCV geeignet gegeben:

A Point Sampling-Algorithmus für 3D-Matching irregulären Geometries, Tolga Birdal, Slobodan Ilic

http://campar.in.tum.de/pub/tbirdal2017iros/tbirdal2017iros.pdf

+0

Das Video sieht interessant aus, aber diese Antwort nicht über die erforderlichen Informationen, um Ihre Ergebnisse zu reproduzieren. Können Sie den von Ihnen verwendeten Ansatz zusammenfassen und die relevanten OpenCv-Aufrufe anzeigen? Ist der vollständige Code irgendwo verfügbar? – HugoRune

+0

Der vollständige Code ist verfügbar unter https://github.com/tolgabirdal/opencv_contrib/tree/master/modules/surface_matching –