Positionsbestimmung mit Bildern

nero76

Moderator
Hallo,
nachdem einige Erfahrungen mit dem Google Tango System gemacht wurden lässt sich sagen dass eine große Schwachstelle des Systems die schlechte Wiederkennung ist und natürlich dass es eine Black Box ist. Aber kann man das Prinzip nicht grundsätzlich aufgreifen für eine eigene Lösung? Hier ein Vorschlag und ein erster Test damit:

Das Prinzip nennt sich "Structure from Motion" (SFM) und wird vor allem in der 3D-Rekonstruktion von Objekten abgewandt, dabei wird versucht aus vielen Kamera-Bildern gemeinsame 3D Punkte (und damit gleichzeitig die Kamera-Positionen) zu errechnen. Zum "Trainieren" würde man ebenfalls viele Bilder verwenden, für die Wiedererkennung im Normalbetrieb dann immer nur ein Bild.

Hier ist eine Software mit der man das Prinzip selber ausprobieren kann: http://ccwu.me/vsfm/ 1. Man macht ein paar Bilder der Umgebung mit einer Digital-Kamera (z.B. 2560x1920). Vorteil: man muss sich um Faktor Webcam-Qualität/Kalibrierung erstmal nicht kümmern). Am Besten eignen sich planare Flächen (Mauern, Wände, Dächer etc.). Alle Bildern sollten mindestens zwei gemeinsame Gegenstände (Mauern, Wänder, Dächer etc.) aufweisen (Maximal 20 Grad gedreht), jeweils 2 Bilder sollten sich also überlappen (leichte Drehung und Verschiebung ist ok). Möglichst viel der Umgebung sollte gleichzeitig auf einem Bild vorhanden sein (keine Nahaufnahmen), damit das System errechnen kann wie sich Gegenstand A zu Gegenstand B in der Umgebung geografisch befindet (das geht nur wenn 2 Gegenstände gleichzeitig auf jedem Bild zu sehen sind ohne starke Winkeländerung). Mehr als 50 Bilder sollten es nicht sein, da die Rechenzeit quadratisch mit der Anzahl Bilder wächst.
2. In der Software wählt man File->Open Multi images und die so gemachten Bilder.
3. Dann auf SfM->Pairwise Matching->Compute Missing Match - das kann schon mal 5-15 Minuten dauern (je nach Anzahl Bilder).
4. Dann auf Sfm->Reconstruct Sparse
5. Mit der Maus kann das Ergebnis so gedreht werden dass man von oben auf die 3D Punkte schaut. Angezeigt werden nicht nur die erkannten 3D Punkte sondern auch die Kamera-Positionen.
Das Ergebnis könnte so aussehen:
vision1.png

6.Das Ergebnis kann gespeichert werden mit SfM->Save NView Match (neu laden mit Load NView Match)
7. Nun testen wir die Wiedererkennung. Dafür wurden 12 weitere Bilder gemacht - genauer: die Eckpunkte einer Platte welche an 3 verschiedene Positionen im Garten bewegt wurde. Alle 12 Positionen wurden erkannt. Hierfür in der Software über SfM->Load NView Match die "erlernten" Bilder laden, dann "Open->Multi Images" für die neuen Test-Bilder, dann "SfM->Pairwise Matching->Compute Missing Match" und danach "SfM->Reconstruct Resume".
vision5.png

8. Wie verhält sich das System bei Kunstlicht und Tageslicht? Dazu wurde ein Indoor Test gemacht. Erstaunlicherweise konnte das System die Position bei Tageslicht in den Bildern bei Kunstlicht erkennen:
vision4.png

9. Dann wurde versucht den kompletten Garten zu erfassen, ingesamt 50 Bilder:
vision8.png


Das System ist nicht das schnellste (Echtzeit ausgeschlossen), für ein einzelnes Bild werden schon mal 30 Sek. benötigt. Es scheint aber äußerst robust zu sein. Die Genauigkeit scheint ebenfalls akzetabel (cm-Bereich, genaue Messungen später). Denkbar wäre ein PC dem der Roboter ein Bild schickt für eine genaue Ortung...

Gruss,
Alexander
 
Oben