Hallo Zusammen, Ich habe im Rahmen meiner Projektarbeit ganz interessante Aufgabe bekommen. Ein Roboter soll mit Hilfe einer Kamera Positionen der Objekte bestimmen. Es wird ein Bild gemacht und sollen danach relative Koordinaten bestimmt werden. Da die Kamera zur Spielfläche unter einem bestimmen Winkel Alpha geneigt ist, wird dann das Bild durch projektive Transformation verzehrt. Um ein reelles Bild zu erhalten (Bild wird unter 90 ° gemacht), muss das Bild zurück transformiert werden. Das wäre mein Lösungsweg. Es soll da mit Transformationsmatrizen gearbeitet werden. Aber welche ? Hat jemand schon Erfahrungen damit gemacht ? Ich freue mich auf eure Antworten und Ideen!
Flache/ebene Objekte mit vernachlässigbarer Höhe: Deine Bildebene der Kamera entspricht Winkeln, wie du von 2 Winkeln mit ein bischen Triginemetrie auf X/Y umrechnest sollte bekannt sein. Hohe Objekte: ohne Tiefeninformation: viel Spaß. Oder die Kamera zentrisch über den Objekten so hoch als möglich montieren :-) Abbildungsfehler/Genauigkeit: Wenn du eine brauchbare Entzerrung haben willst, musst du dein Kamerasystem eichen. Hast du hochwertige Komponenten, dann kannst du unter Umständen vom Hersteller die Daten für die Transferfunktion bekommen (liefert aber auch keine besonders guten Ergebnisse) oder du kalibrierst selber (das geht sehr gut). z.B.: http://epaperpress.com/ptlens/ Hab' dir 2 Bilder angehängt. Das System läuft bei einem Steinmetzt, es werden Steinplatten vermessen und dann in Autocad weiterbearbeitet. Selbst bei 3cm dicken Platten gibt's schon einen beachtlichen Abbildungsfehler durch die Verschiebung der Objektebene. Ach ja. es wurden alle Gitterpunkte vermessen, nicht nur die markierten.
Hallo, falls die Auswertung auf einem x86-System laufen soll, könntest du dir mal OpenCV anschauen. Dort sind schon sehr viele Algorithmen der Bildverarbeitung implementiert, inklusive, wie von Zwie Blum angesprochen, die Kalibrierung der Kameraoptik.
autsys schrieb: > Das wäre mein Lösungsweg. Es soll da mit Transformationsmatrizen > gearbeitet werden. > > Aber welche ? Die hier: http://de.wikipedia.org/wiki/Projektionsmatrix Da, wenn ich dich richtig verstanden habe, alle zu erkennenden Objekte in einer Ebene liegen, kannst du in der Formel Z=0 setzen, so dass die Matrixelemente p13, p23 und p33 bedeutungslos werden. Damit kannst du sowohl Z als auch die drei Elemente komplett weglassen, so dass eine 3×3-Matrix übrigbleibt. Deren Elemente kannst du bspw. dadurch bestimmen, dass du 4 Referenzpunkte in der Ebene markierst und schaust, an welchen Bildkoordinaten diese erscheinen. Daraus stellst du acht Gleichungen auf, deren Lösungen acht der neun Matrixelemente sind. Ein Freiheitsgrad bleibt übrig, da die Matrix mit einem beliebigen Wert multipliziert werden kann, ohne dass sich die Abbildungseigenschaften ändern. Deswegen wird die Matrix meist so normiert, dass p33 (bzw. p34 in ursprünglichen 3×4-Matrix) immer 1 ist. Das Ganze funktioniert natürlich nur dann, wenn man die nichtlinearen Verzerrungen der Kamera vernachlässigen kann. Dies wiederum hängt davon ab, wie hoch deine Genauigkeitsanforderungen sind und wie teuer das Kameraobjektiv sein darf. Sonst musst du dich mit den von Zwie Blum und Steve beschriebenen nichtlinearen Kalibrationsverfahren beschäftigen.
Vielen Dank für eure Antworten. @Yalu X. Wie ich jetzt verstehe, die Abbildung auf dem 2D Bild beschreibt die Projektionsmatrix P: x'(2D) = P*X(3D). Muss man noch zusätzlich das Bild entzehren oder es steckt in P-Matrix. Ich verstehe noch nicht, wie ich acht Gleichungen aufstellen kann, wenn die 4 Referenzpunkte im Bild erscheinen. Brauche ich dann keine Kalibrierungsmatrix K aufzustellen? Wäre echt dankbar, wenn du hier etwas genauer erklären kannst.
autsys schrieb: > Ich verstehe noch nicht, wie ich acht Gleichungen aufstellen kann, wenn > die 4 Referenzpunkte im Bild erscheinen. Jeder Punkt hat auf dem Bild eine X und eine Y Koorindate Jeder der 4 Punkte wurde nach P_Bild = P_Welt * Matrix transformiert. Da jeder der 4 Punkte jeweils eine X und eine Y Koordinate hat, ergibt das 8 Gleicheungen, wenn man die Matrixmultiplikation jeweils in den für X und Y relevanten Teil zerlegt.
Mit einem Bild alleine kommt man nicht zu 3D Koordinaten, aber mit 2 Bildern, die einen festen Bezug zwischen einander haben. Im Wesentlichen rechnet man die Projektionsmatrizen durch und bekommt eine Gleichung fuer jeden Punkt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.