| Operatoren |
calibrate_cameras — Bestimmen aller Kameraparameter durch simultane Ausgleichsrechnung.
calibrate_cameras( : : CalibDataID : Error)
Der Operator calibrate_cameras berechnet die internen und externen Kameraparameter eines Kalibrierdatenmodells CalibDataID. Siehe den Abschnitt „Kameraparameter“ für eine detaillierte Beschreibung der Kameraparameter.
Das Kalibrierdatenmodell beschreibt einen Aufbau mit einer oder mehreren Kameras und wird beim Erstellen des Modells festgelegt. Siehe den Abschnitt „Vorbereitung der Eingabekalibrierdaten“ für weitere Informationen.
Nach erfolgreicher Kalibrierung gibt der Operator calibrate_cameras die Wurzel des mittleren quadratischen Rückprojektionsfehlers (RMSE) der Optimierung im Parameter Error (in Pixel) zurück. Dieser Fehler gibt einen allgemeinen Hinweis darauf, ob die Optimierung erfolgreich war. Siehe den Abschnitt „Ergebnisse der Kalibrierung überprüfen“ für weitere Informationen.
Für eine erfolgreiche Kalibrierung wird mindestens ein Kalibrierobjekt mit genau bekannten metrischen Abmessungen benötigt, z.B. eine HALCON-Kalibrierplatte. Vor dem Aufruf von calibrate_cameras nehmen Sie eine Serie von Bildern des Kalibrierobjektes in unterschiedlichen Orientierungen auf, so dass das gesamte Blickfeld bzw. Messvolumen ausgefüllt wird. Der Erfolg der Kalibrierung hängt im hohen Maße von der Qualität der Kalibrierbildern ab. Deshalb wird bei der Aufnahme der Kalibrierbilder hohe Sorgfalt empfohlen. Siehe den Abschnitt „Wie nehme ich geeignete Bilder auf?“ für weitere Informationen.
Im Folgenden wird der Kalibrierprozess im Detail erläutert:
Bevor der Operator calibrate_cameras aufgerufen wird, müssen die benötigten Daten im Kalibrierdatenmodell gesammelt werden. Dabei müssen diese Schritte befolgt werden:
Erstellen des Kalibrierdatenmodells mit dem Operator create_calib_data, wobei die Anzahl der Kameras und die Anzahl der Kalibrierkörper im Modell festgelegt werden.
Definieren des Kameratyps und der internen Kameraparameter für alle Kameras mit dem Operator set_calib_data_cam_param. Beachten Sie, dass nur Kameras vom gleichen Typ in einem Aufbau kalibriert werden können.
Definieren der Kalibrierkörperbeschreibung für alle Kalibrierkörper mit dem Operator set_calib_data_calib_object.
Sammeln von Beobachtungen mit den Operatoren find_calib_object oder set_calib_data_observ_points, d.h. die Bildkoordinaten der extrahierten Kalibrierkörpermarker und eine grob geschätzte Pose des Kalibrierkörpers relativ zur beobachtenden Kamera.
Kalibrierprozess konfigurieren, z.B. die Referenzkamera setzen oder bestimmte interne oder externe Kameraparameter von der Optimierung ausschließen. Kalibriereinstellungen für den ganzen Aufbau oder für einzelne Kameras bzw. Kalibrierkörperposen können mit dem Operator set_calib_data angepasst werden. Wenn bestimmte Kameraparameter genau bekannt sind, z.B. die Zellgrößen des Kamerasensors von Kamera 0, brauchen sie nicht kalibriert zu werden. Das kann mit folgendem Aufruf konfiguriert werden:
set_calib_data (CalibDataID, 'camera', 0, \
'excluded_settings', ['sx','sy']).
Je nach Kameratypen, welche im Aufbau kalibriert werden, führt calibrate_cameras die Kalibrierung auf unterschiedliche Weisen durch.
Für einen Aufbau mit projektiven Flächenkameras ('area_scan_division', 'area_scan_polynomial', 'area_scan_tilt_division', 'area_scan_tilt_polynomial', 'area_scan_tilt_image_side_telecentric_division' und 'area_scan_tilt_image_side_telecentric_polynomial') wird die Kalibrierung in vier Schritten durchgeführt. Im ersten Schritt versucht der Algorithmus eine Kette von Beobachtungsposen zu bauen, welche alle Kameras und Kalibrierobjektposen verbindet.
| (1) | (2) |
Wenn eine Kamera nicht erreicht werden kann (d.h. die Kamera beobachtet keine Kalibrierkörperpose, die in der Kette eingegliedert ist), wird der Kalibrierprozess abgebrochen und ein Fehler zurückgegeben. Ansonsten initialisiert der Algorithmus die Posen aller Objekte im Aufbau beim Durchlaufen der Kette. Im zweiten Schritt optimiert calibrate_cameras alle Kamera- und Kalibrierkörperposeparameter, die nicht explizit von der Optimierung ausgeschlossen wurden. Im dritten Schritt korrigiert der Algorithmus anhand des soweit kalibrierten Kameraaufbaus jene Beobachtungen, die Konturdaten enthalten (siehe find_calib_object), und kalibriert den Aufbau zur Berücksichtigung der Korrekturen erneut. Sollten keine Konturbeobachtungsdaten im Modell vorhanden sein, wird dieser Schritt übersprungen. Im letzten Schritt berechnet calibrate_cameras die Standardabweichungen und die Kovarianzen der kalibrierten Kameraparameter.
Für einen Aufbau mit telezentrischen Flächenkameras, ('area_scan_telecentric_division', 'area_scan_telecentric_polynomial', 'area_scan_tilt_bilateral_telecentric_division', 'area_scan_tilt_bilateral_telecentric_polynomial', 'area_scan_object_side_telecentric_polynomial' oder 'area_scan_tilt_object_side_telecentric_polynomial') werden dieselben vier Schritte durchlaufen wie bei den projektiven Flächenkameras. Für den ersten Schritt (Aufbau einer Kette von Beobachtungen, die alle Kameras und Kalibrierobjektposen verbindet) gelten jedoch zusätzliche Voraussetzungen. Da die Lage eines Objektes mit nur einer Kamera nur bis auf eine Verschiebung entlang der optischen Achse bestimmt werden kann, muss ein Kalibrierkörper von mindestens zwei Kameras beobachtet werden, damit seine relative Lage bestimmt werden kann. Sonst wird er aus der Kalibrierung entfernt. Außerdem gilt: Da ein planares Kalibrierobjekt aus jeweils zwei Winkeln gleich erscheint, kann die relative Lage der Kameras untereinander nicht eindeutig bestimmt werden. Es gibt immer zwei gültige Varianten der relativen Lage der zweiten Kamera. Beide Alternativen stellen ein konsistentes Kamerasetup dar und können zum Messen benutzt werden. Da die Mehrdeutigkeit nicht aufgelöst werden kann, wird die erste Lösung zurückgeliefert. Wenn die zurückgegebene Pose nicht die reell vorliegende sondern die alternative Lösung ist, so sind die damit rekonstruierten Daten gespiegelt.
Für einen gemischten Aufbau mit projektiven und telezentrischen Flächenkameras läuft der Algorithmus dieselben Schritte durch wie bei einem Aufbau mit projektiven Flächenkameras. Mögliche Mehrdeutigkeiten während des ersten Schrittes (Aufbau einer Kette von Beobachtungen, die alle Kameras und Kalibrierobjektposen verbindet), die bei einem reinen telezentrischen Flächenkameraaufbau auftreten, können bei einem gemischten Aufbau verhindert werden. Voraussetzung dafür ist die Existenz einer Kette, die aus allen projektiven Flächenkameras und einer ausreichenden Anzahl an Kalibrierobjekten besteht. Hierbei bedeutet eine ausreichende Anzahl, dass jede telezentrische Flächenkamera mindestens zwei Kalibrierobjekte dieser Kette beobachtet.
| (1) | (2) |
Für Zeilenkameras ('line_scan') existieren einige Beschränkungen: Es kann nur eine Kamera pro Aufbau kalibriert werden und nur ein Kalibrierobjekt pro Aufbau verwendet werden. Weiterhin werden keine Informationen über die Standardabweichungen und die Kovarianzen der Kameraparameter geliefert. Schließlich muss beachtet werden, dass bei Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltab) keine Beobachtungen akzeptiert werden, in denen nicht alle Kalibrierkörpermarken extrahiert wurden. Bei Kalibrierplatten mit hexagonaler Markenanordnung (siehe create_caltab) gilt diese Einschränkung nicht.
Nach erfolgreicher Kalibrierung gibt der Operator calibrate_cameras die Wurzel des mittleren quadratischen Rückprojektionsfehlers (RMSE) der Optimierung im Parameter Error (in Pixel) zurück. Dieser Fehler gibt einen allgemeinen Hinweis dafür, ob die Optimierung erfolgreich war:
Bei der Kalibrierung von nur einer einzelnen Kamera ist ein Fehler in der Größenordnung von 0.1 Pixel (der typische Detektionsfehler beim Extrahieren der Koordinaten der projizierten Kalibrierkörpermarken) ein Hinweis dafür, dass die Optimierung gut zu den Beobachtungsdaten passt. Wenn der Fehler deutlich über 0.1 Pixel liegt, wurde die Kalibrierung nicht gut ausgeführt. Die Gründe hierfür können z.B. eine schlechte Bildqualität, eine unzureichende Anzahl an Kalibrierbildern oder auch eine fehlerhafte Kalibrierplatte sein. Bei der gleichzeitigen Kalibrierung mehrerer Kameras ist der Wert des Fehlers schwieriger zu beurteilen. Als Faustregel sollte der Fehler so klein wie möglich sein oder zumindest kleiner als 1.0 sein, da dies ein Hinweis ist, dass mit den kalibrierten Parametern eine subpixelgenaue Evaluierung der Daten noch möglich ist. Bei bestimmten Konfigurationen kann es schwierig sein, diesen Wert zu erreichen. Eine weitere Analyse der Kalibrierqualität kann anhand der zurückgegebenen Standardabweichungen und Kovarianzen der Kameraparameter erfolgen. Dies ist zurzeit nur bei Flächenkameras möglich (siehe get_calib_data).
Alle Ergebnisse der Kalibrierung, d.h. die internen Kameraparameter, die Kameraposen (externe Parameter), die Kalibrierkörperposen usw., können mit get_calib_data abgefragt werden. Da bei telezentrischen Kameras die Lage nur bis auf ihre Verschiebung entlang der z-Achse des Koordinatensystems der jeweiligen Kamera bekannt ist, werden die Kameraposen entlang dieser Richtung so verschoben, dass alle Kameras auf einer gemeinsamen Kugel liegen. Der Mittelpunkt der Kugel wird in den ersten Kalibrierkörper gelegt. Der Radius dieser Kugel variiert je nach gegebenen Aufbau. Falls ein gemischter Aufbau mit projektiven und telezentrischen Kameras vorliegt, wird als Radius das Maximum über alle Abstände zwischen projektiven Kameras und dem ersten Kalibrierkörper gewählt. Falls nur telezentrische Kameras im Aufbau vertreten sind, beträgt der Radius 1m.
Die Kameraparameter werden unterschieden nach internen und externen Kameraparametern.
Die internen Kameraparameter beschreiben die Beschaffenheit der verwendeten Kamera, insbesondere die interne Sensorgröße und die Abbildungseigenschaften der verwendeten Kombination von Objektiv, Kamera und Framegrabber. Unten sehen Sie eine Übersicht über alle verfügbaren Kameratypen und deren jeweilige Parameter. In der Liste bezieht sich „projektive Flächenkameras“ auf die Eigenschaft, dass das Objektiv eine perspektivische Projektion auf der Objektseite des Objektivs durchführt, während sich „telezentrische Flächenkameras“ auf die Eigenschaft bezieht, dass das Objektiv eine telezentrische Projektion auf der Objektseite des Objektivs durchführt
haben 9 bis 16 interne Parameter abhängig vom Kameratyp.
Flächenkameras mit normalen Objektiven
Projektive Flächenkameras
['area_scan_division', Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_polynomial', Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
Telezentrische Flächenkameras
['area_scan_telecentric_division', Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
Flächenkameras mit Tilt-Objektiven
Projektive Flächenkameras
['area_scan_tilt_division', Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_polynomial', Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_image_side_telecentric_division', Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_image_side_telecentric_polynomial', Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]
Telezentrische Flächenkameras
['area_scan_tilt_bilateral_telecentric_division', Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_bilateral_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_object_side_telecentric_division', Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
['area_scan_tilt_object_side_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]
Aus weiter unten genannten Gründen werden die mit einem * Sternchen gekennzeichneten Parameter nicht von dem Algorithmus geschätzt, sondern bleiben fest.
Beschreibung der internen Kameraparameter:
Typ der Camera, wie oben aufgelistet.
Brennweite des Objektivs (nur für Kameras mit Objektiven, die auf der Objektseite eine perspektivische Projektion durchführen).
Startwert ist gleich der nominalen Brennweite des verwendeten Objektivs, also beispielsweise 0.008 m.
Vergrößerungsmaßstab des Objektivs (nur für Kameras mit Objektiven, die auf der Objektseite eine telezentrische Projektion durchführen). Startwert ist der nominelle Vergrößerungsmaßstab des verwendeten telezentrischen Objektivs (Bildgröße geteilt durch Objektgröße), beispielsweise 0.2.
Verzeichnungskoeffizient zur Modellierung der radialen Verzeichnungen mit dem Divisionsmodell. Startwert: 0.0.
Verzeichnungskoeffizienten zur Modellierung der radialen und tangentialen Verzeichnung mit dem Polynommodell. Startwert für alle fünf Koeffizienten: 0.0
Abstand der Austrittspupille zur Bildebene. Die Austrittspupille ist das (virtuelle) Bild der Aperturblende (typischerweise die Irisblende), betrachtet von der Bildseite des Objektivs. Typische Werte liegen in der Größenordnung von wenigen Zentimetern bis zu sehr großen Werten, falls das Objektiv fast bildseitig telezentrisch ist.
Der Tiltwinkel , um den die optische Achse im Vergleich zur Normalen der Bildebene verkippt ist, und der Rotationswinkel , der beschreibt, in welche Richtung die optische Achse verkippt ist. Diese Parameter werden nur benötigt, falls ein Tiltobjektiv verwendet wird.
Diese Winkel sind typischerweise aus den Überlegungen, die zur Verwendung des Tiltobjektivs geführt haben, bekannt oder können von dem Mechanismus, der zur Verkippung des Objektivs verwendet wird, abgelesen werden.
Skalierungsfaktoren. Entsprechen dem horizontalen und vertikalen Abstand zweier benachbarter Zellen auf dem Sensor. Da in der Regel das Bildsignal zeilensynchron ausgelesen wird, ist Sy durch die Größe des Sensors exakt festgelegt und muss daher nicht durch die Kalibrierung bestimmt werden.
Die Startwerte für den Abstand zweier benachbarter Zellen hängen von der Größe des Chips der verwendeten Kamera ab und können den technische Daten der Kamera entnommen werden. Vorsicht: Bei Unterabtastung des Bildes erhöhen sich diese Werte!
Für Lochkameras mit Flächensensor ist es unmöglich, Focus, und gleichzeitig zu bestimmen. Daher wird nicht optimiert, sondern bleibt fest. Für telezentrische Objektive ist es unmöglich, Magnification, und gleichzeitig zu bestimmen. Daher wird nicht optimiert, sondern bleibt fest. Bei bildseitig telezentrischen Tiltobjektiven ist es unmöglich, Focus, , und die Verkippungsparameter und gleichzeitig zu bestimmen. Daher wird zusätzlich nicht optimiert, sondern bleibt fest. Bei beidseitig telezentrischen Tiltobjektiven ist es unmöglich, Magnification, , und die Verkippungsparameter und gleichzeitig zu bestimmen. Daher wird zusätzlich nicht optimiert, sondern bleibt fest.
Spalten- () und Zeilenkoordinate () des Kamerahauptpunktes (Zentrum der radialen Verzeichnung).
Startwerte für die Koordinaten des Kamerahauptpunktes sind die halbe Bildbreite bzw. -höhe. Hinweis: Bei Unterabtastung des Bildes verringern sich die Werte entsprechend!
Breite und Höhe des abgetasteten Bildes. Vorsicht: Bei Unterabtastung des Bildes verringern sich diese Werte!
Zeilenkameras haben die folgenden 12 internen Parameter: ['line_scan', Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]
* 'Sx' und 'Sy' werden aus unten genannten Gründen nicht von dem Algorithmus geschätzt, sondern bleiben fest.
'line_scan'
Brennweite des Objektivs.
Startwert ist gleich der nominalen Brennweite des verwendeten Objektivs, also beispielsweise 0.008 m.
Verzeichnungskoeffizient zur Modellierung der radialen Verzeichnung mit dem Divisionsmodell. Startwert: 0.0.
Skalierungsfaktor. Entspricht dem horizontalen Abstand zweier benachbarter Zellen auf der Sensorzeile. Es ist zu beachten, dass Focus und Sx nicht gleichzeitig bestimmt werden können. Deshalb wird Sx in der Kalibrierung festgehalten. Der Startwert für den Abstand zweier benachbarter Zellen kann den technischen Daten der Kamera entnommen werden. Vorsicht: Bei Unterabtastung des Bildes erhöht sich dieser Wert!
Skalierungsfaktor, der im Rahmen der Kalibrierung nur in der Form auftritt. Daher können Sy und Cy nicht gleichzeitig bestimmt werden. Deshalb wird Sy in der Kalibrierung fest gehalten. pv beschreibt den Abstand des Kamerahauptpunktes von der Sensorzeile in Meter. Der Startwert für die Größe einer Zelle senkrecht zur Richtung der Sensorzeile kann ebenfalls den technischen Daten der Kamera entnommen werden. Vorsicht: Bei Unterabtastung des Bildes erhöht sich der Wert von Sy!
Spaltenkoordinate des Kamerahauptpunktes (Zentrum der radialen Verzeichnung). Der Startwert für die x-Koordinate des Kamerahauptpunktes ist die halbe Bildbreite, d.h. die halbe Anzahl von Pixeln des Zeilensensors. Hinweis: Bei Unterabtastung des Bildes verringert sich der Wert für Cx entsprechend!
Abstand des Kamerahauptpunktes (Zentrum der radialen Verzeichnung) von der Sensorzeile in Bildzeilen. Der Startwert für die y-Koordinate des Kamerahauptpunktes ist normalerweise 0.
Breite und Höhe des abgetasteten Bildes. Vorsicht: Bei Unterabtastung des Bildes verringern sich diese Werte!
X-, Y- und Z-Komponente des Bewegungsvektors. Die Startwerte für die x-, y- und z-Komponente des Bewegungsvektors hängen vom Aufbau des gesamten Aufnahmesystems ab. Blickt die Kamera beispielsweise senkrecht auf ein Fließband, und ist dabei so um ihre optische Achse gedreht, dass die Sensorzeile senkrecht zur Bewegungsrichtung des Fließbandes steht, dass also die y-Achse des Kamerakoordinatensystems parallel zur Bewegungsrichtung des Fließbandes ausgerichtet ist, so sind die Startwerte Vx = Vz = 0. Der Startwert für Vy lässt sich dann aus der Aufnahme eines Objektes dessen Größe bekannt ist (z.B. Kalibrierplatte, Lineal) folgendermaßen bestimmen:
Mit:
Wird die Kamera gegenüber diesem Aufbau z.B. um 30 Grad um die optische Achse, also die z-Achse des Kamerakoordinatensystems gedreht, so sind die oben bestimmten Startwerte folgendermaßen zu verändern:
Wenn die Kamera gegenüber dem ursprünglichen Aufbau z.B. um -20 Grad um die x-Achse des Kamerakoordinatensystems gedreht wird, so ergeben sich folgende Startwerte:
Die Qualität der Startwerte für Vx, Vy und Vz ist entscheidend für den Erfolg der gesamten Kalibrierung. Werden zu schlechte Startwerte verwendet, kann dies zum Abbruch der Kamerakalibrierung führen.
Bitte beachten Sie, dass die Bezeichnung Focus im Allgemeinen nicht der realen Brennweite entspricht, wenn die Objektweite nicht unendlich ist. Der Einfachheit halber wird hier aber nicht zwischen Brennweite und Bildweite unterschieden.
Bitte beachten Sie, dass für alle Operatoren, die Kameraparameter als Eingabe verwenden, die Werte der Kameraparameter geprüft werden, ob sie die folgenden Restriktionen erfüllen:
Für manche Operatoren gibt es kleine Unterschiede in den Restriktionen. Im Speziellen für Operatoren, die Lochkameras mit Zeilensensor nicht unterstützen, gilt folgende Restriktion:
Translation entlang der x-Achse des Kamerakoordinatensystems.
Translation entlang der y-Achse des Kamerakoordinatensystems.
Translation entlang der z-Achse des Kamerakoordinatensystems.
Rotationswinkel um die x-Achse des Kamerakoordinatensystems.
Rotationswinkel um die y-Achse des Kamerakoordinatensystems.
Rotationswinkel um die z-Achse des Kamerakoordinatensystems.
Diese 6 Parameter beschreiben die 3D-Lage (Pose) des Weltkoordinatensystems relativ zum Kamerakoordinatensystems. Bei Kameras mit Zeilensensor bezieht sich die Pose des Weltkoordinatensystems auf das Kamerakoordinatensystem der ersten Bildzeile. Die drei Parameter (TransX, TransY und TransZ) beschreiben die Position, die drei Parameter (RotX, RotY und RotZ) die Orientierung (siehe create_pose für weitere Informationen).
Bei Benutzung einer HALCON-Kalibrierplatte definiert deren Koordinatensystem das Weltkoordinatensystem. Bei Kalibrierplatten mit hexagonaler Markenanordnung (siehe create_caltab) befindet sich der Ursprung des Koordinatensystems in der Mitte der zentralen Marke des ersten Suchmusters. Bei Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltab) liegt der Ursprung im Mittelpunkt der Kalibrierkörperoberfläche. In beiden Fällen zeigt die z-Achse des Koordinatensystems in den Kalibrierkörper hinein, die x-Achse nach rechts und die y-Achse nach unten.
Startwerte für alle 6 Parameter können bei Verwendung einer HALCON-Kalibrierplatte mit dem Operator find_calib_object gewonnen werden. Alternativ kann bei HALCON-Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltab) auch eine Kombination der beiden Operatoren find_caltab und find_marks_and_pose verwendet werden.
Die folgenden Abschnitte befassen sich jeweils mit einzelnen Fragen, die sich bei der Verwendung von calibrate_cameras stellen und sollen daher sowohl dem Verständnis als auch als Leitfaden für die eigene Anwendung dienen.
Hochgenaue Kalibrierkörper können Sie in verschiedenen Größen und Materialien über Ihren lokalen HALCON-Vertrieb erhalten. Diese Kalibrierplatten werden mit dazugehörigen Beschreibungsdateien ausgeliefert und können einfach mit find_calib_object extrahiert werden.
Es ist auch möglich, beliebige Objekte zur Kalibrierung zu verwenden. Einzige Voraussetzung ist, dass der Kalibrierkörper charakteristische Merkmalspunkte aufweist, die robust in Bildern erkannt werden können und deren 3D-Weltkoordination hochgenau bekannt sind. Siehe den „Solution Guide III-C 3D Vision“ für weitere Informationen.
Selbst ausgedruckte Kalibrierplatten sind normalerweise nicht genau genug für Anwendungen mit hohen Präzisionsanforderungen.
Ist eine HALCON-Kalibrierplatte vorhanden, so kann folgendermaßen vorgegangen werden: Mit der zu kalibrierenden Kombination aus Objektiv (mit fester Scharfstellung), Kamera und Framegrabber wird der Kalibrierkörper aufgenommen, vgl. open_framegrabber bzw. grab_image. Dabei sollten folgende allgemeine Hinweise berücksichtigt werden:
Insgesamt sollten mindestens 10 bis 20 Bilder zur Verfügung stehen.
Es sollten keine Reflexionen o.ä. auf dem Kalibrierkörper sein.
Die Blende der Kamera darf sich während der Aufnahme der Bilder zu keinem Zeitpunkt ändern. Wird die Blende der Kamera nach der Kalibrierung verstellt, so ist die Kamera erneut zu kalibrieren.
Die Position der Kamera darf sich während der Bildaufnahme nicht verändern.
Innerhalb der zur Kalibrierung verwendeten Bilder sollte der Kalibrierkörper jeweils unterschiedlich im Bild erscheinen: Z.B. in allen vier Ecken, in der Mitte und am Rand, sowie in verschiedenen Entfernungen. Dabei sollte der Kalibrierkörper am besten jeweils leicht bis mittel verdreht und gekippt gehalten werden, so dass die perspektivische Verzerrung der Kalibrierkörpermarken gut sichtbar ist.
Der Kalibrierkörper sollte jeweils mindestens etwa ein Viertel des gesamten Bildes ausfüllen, damit die Marken robust detektiert und die radialen Verzeichnungen vernünftig modelliert werden können.
Die Kalibriermarken dürfen nicht seitenverkehrt aufgenommen werden. Dies kann z.B. passieren, wenn ein Glas-Kalibrierkörper von der Rückseite aufgenommen wird.
Ihr lokaler Vertrieb bietet zur Kamerakalibrierung zwei verschiedene HALCON-Kalibrierkörper an: Kalibrierplatten mit hexagonaler Markenanordnung (siehe create_caltab) und Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltab). Da sich die beiden Kalibrierkörper deutlich voneinander unterscheiden sind bei deren Verwendung neben den allgemeinen Hinweisen zusätzliche, kalibrierplattenspezifische Besonderheiten zu beachten (siehe auch find_calib_object):
HALCON-Kalibrierplatten mit hexagonaler Markenanordnung
Der Kalibrierkörper darf das ganze Bild ausfüllen und sogar teilweise über den Rand hinausragen. Es ist ausreichend, wenn mindestens ein Suchmuster des Kalibrierkörpers im Bild sichtbar ist. Es sollte dennoch darauf geachtet werden, dass möglichst viele Marken von der Kamera aus gesehen werden. Dadurch können pro Bild mehr Marken extrahiert werden, was nicht nur eine robuste Kalibrierung mit wenigen Bildern, sondern auch eine zuverlässige Schätzung der Verzeichnung ermöglicht.
Aufgrund der großen Markenanzahl werden in der Regel weniger Bilder für eine genaue Kalibrierung benötigt als bei Kalibrierplatten mit rechteckiger Markenanordnung.
Sind mindestens zwei Suchmuster im Bild zu sehen, ist es möglich zu erkennen, ob die Kalibrierplatte gespiegelt im Bild zu sehen ist. In dem Fall gibt HDevelop eine adäquate Fehlermeldung zurück.
HALCON-Kalibrierplatten mit rechteckiger Markenanordnung
Der Kalibrierkörper muss jeweils komplett (inkl. Rand!) im Bild sein.
Für Kameras mit Flächensensor stehen zwei unterschiedliche Verzeichnungsmodelle zur Verfügung: das Divisionsmodell und das Polynommodell. Das Divisionsmodell verwendet einen Parameter, um die radiale Verzeichnung zu modellieren, während das Polynommodell fünf Parameter verwendet, um die radiale Verzeichnung und die tangentiale Verzeichnung zu modellieren (siehe Abschnitt „Kameraparameter“).
Der Vorteil des Divisionsmodells ist, dass die Korrektur der Verzeichnung schneller berechnet werden kann, insbesondere, wenn Weltkoordinaten in ein verzeichnetes Bild projiziert werden und die Verzeichnung somit in der umgekehrten Richtung angebracht werden muss. Des Weiteren liefert das Divisionsmodell typischerweise stabilere Ergebnisse, wenn nur wenige Kalibrierbilder verwendet werden oder das Sichtfeld nicht ausreichend durch Kalibrierkörper abgedeckt ist. Der Hauptvorteil des Polynommodells ist, dass es die Verzeichnung genauer modellieren kann, weil einerseits Terme höherer Ordnung zur Modellierung der radialen Verzeichnung verwendet werden und andererseits auch die tangentiale Verzeichnung modelliert wird.
Normalerweise sollte das Divisionsmodell für die Kalibrierung verwendet werden. Reicht die Genauigkeit der Kalibrierung nicht aus, kann das Polynommodell verwendet werden. Hierbei ist dann aber besonders darauf zu achten, dass durch die Folge von Kalibrierbildern das gesamte Gebiet abgedeckt werden muss, in dem später gemessen werden soll. Die Verzeichnungskorrektur kann außerhalb des Gebietes, das durch Kalibrierkörper abgedeckt ist, fehlerhaft sein. Dies gilt sowohl für die Bildränder als auch für Bereiche innerhalb des Bildes, die nicht durch einen Kalibrierkörper abgedeckt sind.
Ganz allgemein bedeutet Kamerakalibrierung, diejenigen Parameter exakt zu bestimmen, die die (optische) Abbildung eines beliebigen 3D-Weltpunktes im Raum auf ein (Sub-)Pixel (r,c) im Bild modellieren. Dies ist insbesondere von Bedeutung, wenn aus dem Kamerabild die ursprüngliche räumliche Lage von Gegenständen im Bild bestimmt werden soll, beispielsweise bei der Vermessung von Werkstücken.
Um einen 3D-Punkt in Weltkoordinaten in einen 2D-Punkt in Pixelkoordinaten umzuwandeln, ist eine Kette von Transformationen notwendig:
Zuerst wird in das Kamerakoordinatensystem zu transformiert. Danach wird in die Bildebene projiziert, in den Punkt , immer noch in metrischen Koordinaten. Dann wird die Linsenverzeichnung angewandt und auf den verzerrten Punkt abgebildet. Falls ein Tiltobjektiv verwendet wird, liegt nur auf einer virtuellen Bildebene eines Systems ohne Tiltobjektiv. Das wird dadurch korrigiert, dass auf den Punkt auf der gekippten Bildebene projiziert wird. Zum Schluss werden die Koordinaten des verzerrten Punktes (oder ) in Pixelkoordinaten umgerechnet, um schließlich zu erhalten.
Im Folgenden werden die einzelnen Schritte ausführlich erklärt:
Der Punkt wird vom Welt- in das Kamerakoordinatensystem transformiert (Punkte in Form von homogenen Vektoren, vgl. affine_trans_point_3d):
Dann wird der Punkt in die Bildebene, d.h. auf den Sensor-Chip projiziert.
Für die Modellierung dieses Abbildungsvorganges, der durch die Kombination von Kamera, Objektiv und Framegrabber festgelegt ist, stellt HALCON die folgenden drei 3D-Kameramodelle zur Verfügung:
Die Kombination einer Kamera mit Flächensensor mit einem Objektiv, das auf der Objektseite eine perspektivische Projektion durchführt, und das radiale und tangentiale Verzeichnung aufweisen kann. Das Objektiv kann ein Tiltobjektiv sein, d.h. die optische Achse kann schräg zum Sensor der Kamera stehen (dies wird manchmal auch als Scheimpflug-Objektiv bezeichnet). Die Modelle für normale (d.h. nicht verschwenkbare) perspektivische oder bildseitig telezentrische Objektive sind identisch. Im Gegensatz hierzu unterscheiden sich die Modelle für perspektivische und bildseitig telezentrische Tiltobjektive erheblich, wie unten beschrieben.
Die Kombination einer Kamera mit Flächensensor mit einem Objektiv, das auf der Objektseite eine telezentrische Projektion (also eine Parallelprojektion) durchführt, und das radiale und tangentiale Verzeichnung aufweisen kann. Das Objektiv kann ein Tiltobjektiv sein. Die Modelle für normale (d.h. nicht verschwenkbare) beidseitig oder objektseitig telezentrische Objektive sind identisch. Im Gegensatz hierzu unterscheiden sich die Modelle für beidseitig und objektseitig telezentrische Tiltobjektive erheblich, wie unten beschrieben.
Die Kombination einer Kamera mit Zeilensensor mit einem zentralperspektivisch abbildenden Objektiv, das radiale Verzeichnung aufweisen kann. Tiltobjektive werden derzeit nicht für Zeilenkameras unterstützt.
Falls als Kameramodell das einer Lochkamera mit Flächensensor verwendet wird, wird die Projektion von in die Bildebene mit der folgenden Gleichung beschrieben:
Falls eine telezentrische Kamera mit Flächensensor verwendet wird, wird die Projektion mit der folgenden Gleichung beschrieben:
Für beide Kameraarten mit Flächensensor kann die Verzeichnung entweder mit dem Divisionsmodell oder mit dem Polynommodell modelliert werden.
Das Divisionsmodell verwendet einen Parameter (), um die radiale Verzeichnung zu modellieren.
Die folgenden Gleichungen werden verwendet, um mit Hilfe des Divisionsmodells die in der Bildebene gegebenen verzeichneten Koordinaten in Koordinaten ohne Verzeichnungen zu transformieren:
Diese Gleichungen lassen sich analytisch invertieren. Dies führt zu den folgenden Gleichungen, die dazu verwendet werden, mit Hilfe des Divisionsmodells an Koordinaten ohne Verzeichnungen die Verzeichnung anzubringen:
Das Polynommodell verwendet drei Parameter (), um die radiale Verzeichnung zu modellieren und zwei Parameter (), um die tangentiale Verzeichnung zu modellieren. Die folgenden Gleichungen werden verwendet, um mit Hilfe des Polynommodells die in der Bildebene gegebenen verzeichneten Koordinaten in Koordinaten ohne Verzeichnungen zu transformieren:
Diese Gleichungen sind nicht analytisch invertierbar. Daher müssen die verzeichneten Koordinaten numerisch aus den Koordinaten ohne Verzeichnungen bestimmt werden.
Falls es sich beim Objektiv um ein Tiltobjektiv handelt, wird die Verkippung des Objektivs relativ zur Bildebene durch zwei Parameter beschrieben: den Rotationswinkel , der die Richtung der Tiltachse beschreibt, und den Tiltwinkel , um den die Bildebene im Vergleich zur optische Achse verkippt ist.
Eine Rotation entspricht einer relativ zum Kameragehäuse vertikal nach unten verkippten optischen Achse, einer horizontal nach links verkippten optischen Achse, einer vertikal nach oben verkippten optischen Achse und einer horizontal nach rechts verkippten optischen Achse.
Für zentralperspektivisch abbildende Tiltobjektive und objektseitig telezentrische Tiltobjektive (die eine perspektivische Projektion auf der Bildseite des Objektivs durchführen), wird die Projektion des Punktes in den Punkt , der in der verkippten Bildebene liegt durch eine projektive 2D-Transformation, d.h. durch eine homogene 3×3-Matrix , beschrieben (siehe projective_trans_point_2d):
Für bildseitig telezentrische Tiltobjektive und beidseitig telezentrische Tiltobjektive (die eine Parallelprojektion auf der Bildseite des Objektivs durchführen) wird die Projektion auf die verkippte Bildebene durch eine lineare 2D-Transformation, d.h. eine 2×2-Matrix, beschrieben:
Schließlich wird die Transformation vom Koordinatensystem der Bildebene ins Pixelkoordinatensystem folgendermaßen beschrieben:
Für Kameras mit Zeilensensor muss auch die Relativbewegung zwischen Kamera und Objekt modelliert werden. In HALCON werden hierzu die folgenden Annahmen getroffen:
Die Kamera bewegt sich mit konstanter Geschwindigkeit entlang einer Geraden.
Die Orientierung der Kamera ist konstant.
Die Relativbewegung ist für alle Bilder gleich.
Diese Bewegung wird durch den Bewegungsvektor beschrieben. Dieser Vektor muss in der Einheit [Meter/Bildzeile] im Kamerakoordinatensystem gegeben sein. Er beschreibt die Bewegung der Kamera in Bezug auf ein unbewegtes Objekt. Dies ist äquivalent zu der Annahme einer unbewegten Kamera und einem Objekt, das sich entlang -V bewegt.
Das Kamerakoordinatensystem ist für Kameras mit Zeilensensor folgendermaßen definiert. Der Ursprung liegt im Projektionszentrum. Die z-Achse ist mit der optischen Achse identisch und ist so orientiert, dass alle Punkte, die von der Kamera aus sichtbar sind, positive z-Koordinaten haben. Die y-Achse ist senkrecht zur Sensorzeile und zur z-Achse. Sie ist so orientiert, dass der Bewegungsvektor eine positive y-Komponente hat. Die x-Achse ist senkrecht zur y- und z-Achse. Sie ist so orientiert, dass x-, y- und z-Achse ein rechtshändiges Koordinatensystem bilden.
Da sich die Kamera während der Bildaufnahme über das Objekt bewegt, bewegt sich auch das Kamerakoordinatensystem relativ zum Objekt. Das bedeutet, dass jede Bildzeile von einer anderen Position aus aufgenommen wird, dass es also prinzipiell für jede Bildzeile eine eigene Pose gibt. Zur Vereinfachung beziehen sich in HALCON alle Transformationen zwischen Weltkoordinaten und Kamerakoordinaten auf die Pose der ersten Bildzeile. Die Bewegung V wird bei der Projektion des Punktes in das Bild berücksichtigt. Infolgedessen wird vom Operator find_calib_object auch nur die Pose der ersten Bildzeile bestimmt (und von calibrate_cameras in den Kalibrierergebnissen gespeichert).
Für Lochkameras mit Zeilensensor ist die Abbildung des Punktes , der im Kamerakoordinatensystem der ersten Bildzeile gegeben ist, auf ein (Sub-)Pixel (r,c) im Bild folgendermaßen definiert:
Mit
Dies beinhaltet bereits die Kompensation der radialen Verzeichnung. Für Lochkameras mit Zeilensensor ist nur das Divisionsmodell verfügbar.
Zum Schluss wird der Punkt ins Pixelkoordinatensystem transformiert:
Für Lochkameras gilt: Falls die Kalibrierplatten in allen Bildern parallel zueinander sind (insbesondere, falls sie alle in derselben Ebene liegen), ist es unmöglich, den Focus gemeinsam mit allen sechs externen Parameters zu bestimmen. So ist es z.B. unmöglich, in diesem Fall Focus und den Abstand der Kalibrierplatte zur Kamera zu bestimmen. Um alle Kameraparameter eindeutig bestimmen zu können, muss die Kalibrierplatte in unterschiedlichen Orientierungen in den Bildern aufgenommen werden. Insbesondere sollte die Kalibrierplatte um die x- und y-Achsen des Kamerakoordinatensystems verkippt werden, d.h. sie sollte relativ zur Bildebene verkippt werden.
Bei telezentrischen Objektiven hat der Abstand der Kalibrierplatte zur Kamera keine Auswirkung auf das Bild der Kalibrierplatte und kann nicht bestimmt werden. Daher wird die z-Komponente der Ergebnis-Pose in den Kalibrierergebnissen auf 1 gesetzt.
Für Tiltobjektive kann die Verkippung umso präziser bestimmt werden kann, je größer die Verzeichnungen des Objektivs sind. Für Objektive mit geringer Verzeichnung kann die Verkippung nicht robust bestimmt werden. Daher können die optimierten Verkippungsparameter möglicherweise signifikant von den nominellen Verkippungsparametern des Aufbaus abweichen. In so einem Fall prüfen Sie bitte Error. Falls Error klein ist, beschreibt der optimierte Parametersatz die Abbildungsgeometrie innerhalb des kalibrierten Volumens konsistent und kann für genaue Messungen verwendet werden.
Für perspektivische Tiltobjektive und objektseitig telezentrische Tiltobjektive kann der Abstand der Bildebene nur eindeutig bestimmt werden, falls der Tilt nicht 0 ist. Je kleiner der Tilt ist, desto ungenauer kann der Abstand der Bildebene bestimmt werden. Daher kann der optimierte Abstand der Bildebene möglicherweise signifikant vom nominellen Abstand der Bildebene des Aufbaus abweichen. In so einem Fall prüfen Sie bitte Error. Falls Error klein ist, beschreibt der optimierte Parametersatz die Abbildungsgeometrie innerhalb des kalibrierten Volumens konsistent und kann für genaue Messungen verwendet werden.
Für perspektivische Tiltobjektive und objektseitig telezentrische Tiltobjektive, die um die horizontale oder vertikale Achse verschwenkt sind, d.h. für die der Rotationswinkel 0, 90, 180 oder 270 Grad beträgt, können der Tilt-Winkel , , die Brennweite (für perspektivische Tiltobjektive) bzw. der Vergrößerungsmaßstab (für objektseitig telezentrische Tiltobjektive) und der Abstand der verkippten Bildebene vom Zentrum der perspektivischen Projektion nicht eindeutig bestimmt werden. In diesem Fall sollte durch folgenden Aufruf von der Optimierung ausgeschlossen werden:
set_calib_data (CalibDataID, 'camera', 'general', \
'excluded_settings', 'sx').
Weiterhin ist zu beachten, dass es für Tiltobjektive nur möglich ist, und gleichzeitig zu bestimmen. Dies beruht auf einer Implementationsentscheidung, die dazu führt, dass die Optimierung numerisch stabiler wird. Folglich können und von der Optimierung nur gemeinsam und mit folgendem Aufruf ausgeschlossen werden:
set_calib_data (CalibDataID, 'camera', 'general', \
'excluded_settings', 'tilt').
Lochkameras mit Tiltobjektiven mit großer Brennweite haben näherungsweise ein telezentrisches Abbildungverhalten. Auch in diesem Fall sind, wie im vorigen Absatz beschrieben, und die Verkippungsparameter und korreliert. Sie können gleichzeitig nur unpräzise bestimmt werden. In diesem Fall ist es ratsam, durch folgenden Aufruf von der Optimierung auszuschließen
set_calib_data (CalibDataID, 'camera', 'general', \
'excluded_settings', 'sx').
Bei telezentrischen Objektiven gibt es immer zwei Lagen einer Kalibrierplatte, deren Bilder identisch sind. Daher ist es unmöglich, zu entscheiden, welche der beiden Lagen tatsächlich vorhanden ist. Diese Mehrdeutigkeit wirkt sich auch auf die Schwenkparameter und von telezentrischen Tiltobjektiven aus. Folglich kann die Kamerakalibrierung, abhängig von den Startparametern für und alternative Werte statt der nominellen zurückliefern. In so einem Fall prüfen Sie bitte Error. Falls Error klein ist, beschreibt der optimierte Parametersatz die Abbildungsgeometrie innerhalb des kalibrierten Volumens konsistent und kann für genaue Messungen verwendet werden.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Der Wert dieses Parameters darf nicht über mehrere Threads verwendet werden.Handle des Kalibrierdatenmodells.
Wurzel des mittleren quadratischen Rückprojektionsfehlers der Optimierung.
create_calib_data, set_calib_data_cam_param, set_calib_data_calib_object, set_calib_data_observ_points, find_calib_object, set_calib_data, remove_calib_data_observ
Carsten Steger: „A Comprehensive and Versatile Camera Model for Cameras with Tilt Lenses“; International Journal of Computer Vision, vol. 123, no. 2, pp. 121-159, 2017.
Calibration
| Operatoren |