Beitrag
von KaoTai » Fr Sep 03, 2010 12:38 pm
Das wesentliche ist wohl die radiale Verzerrung.
Die dürfte um die optische Achse annähernd isotrop sein, also nur wenig vom Richtungswinkel abhängen.
Ich würde mir an der Laborwand ein paar konzentrische Kreise aufmalen - sagen wir Radius 20cm, 40cm, 60cm, 80cm.
Und auf jedem Kreis acht Punkte markieren (0°, 45°, 90°, usw.)
Dann würde ich das Bild erfassen.
Die Kamera so aufstellen, daß der Mittelpunkt der Kreise in der Bildmitte liegt, also auf der optischen Achse.
Und die Kamera so nah heran, daß der größte Kreis gerade die Bildbreite ausfüllt.
Dann das digitale Bild erfassen und die Pixel-Koordinaten der Markierungen sowie der Bildmitte identifizieren. Notfalls mit der Maus auf die Punkte fahren und die Pixel-Werte per Hand in eine Excel-Tabelle eingeben.
Dann die Pixel in Polarkoordinaten umrechnen.
[Von realen Objekten kennst Du nicht den Radius des Kreises und die Entfernung von der Wand, sondern nur das Verhältnis der beiden Längen, bzw. den Entfernungswinkel von der optischen Achse.
Du könntest also anstatt in (R, phi) hier auch in (theta, phi) umrechnen.]
So, nun sollten die alle Punkte auf einem Kreis den gleichen Radius wert haben.
Und die Radien der unterschiedlichen Kreise sollten äquidistant sein.
Sind sie das nicht, brauchst Du eine Mapping-Funktion, welche die Pixelwerte entsprechend umrechnet, denn in Wirklichkeit sind die Punkte an der Wand ja äquidistant.
Dazu würde ich mir ein mathematisches Modell machen und die Parameter mittels einer der üblichen Software-Bibliotheken fitten.
Als ein-parametriges Modell könnte
r -> r^alpha
phi -> phi
schon genügen, d.h. Du müsstest nur den Exponenten alpha bestimmen.
Dann würde ich mal sehen, ob das Ergebnis die Verhältnisse schon genau genug wiedergibt. (*)
Und nur wenn es nicht reicht, dann noch mehr Parameter hinzuziehen.
Alternativ könntet Du auch für die Markierungen die erwarteten Pixel-Koordinaten berechnen und mit den im Bild vorhandenen vergleichen.
Damit ergibt sich für jeden der Punkte im Bild ein Verschiebungsvektor.
Da Du die Verschiebungsvektoren für vier Ringe und jeweils 8 Punkte pro Ring kennst, könntest Du sie für andere Punkte im Bild einfach bi-linear interpolieren.
Naja, dafür wäre es einfacher die Kalibrierpunkte nicht auf Ringen sondern auf einem rechteckigen Gitter (z.B. 7x7 Punkte) zu verteilen.
(*) Als ich damals das gleiche Problem für ein Kamera mit anularem Objektiv lösen mußte, brauchte ich als zweiten Parameter das "Pixel-Aspect-Ratio", d.h. ein Kreis war auf dem Bild kein Kreis sondern ein leicht flachgedrückte Ellipse.
Y-Koordinaten der Pixel mußtne also erstmal vertikal etwas gestreckt werden.
Zuletzt geändert von KaoTai am Sa Sep 04, 2010 9:04 am, insgesamt 1-mal geändert.