Forum: PC-Programmierung Bildverarbeitung in Robotik


von autsys (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Zwie B. (zwieblum)


Angehängte Dateien:

Lesenswert?

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.

von steve (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von autsys (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

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
Noch kein Account? Hier anmelden.
Lade...