Mehrbild

Liste der Operatoren ↓

Dieses Kapitel beschreibt den Kalibriervorgang für verschiedene Mehrbild-Kameraaufbauten.

Um eine höchstmögliche Messgenauigkeit zu erreichen muss ein Kamerasystem entsprechend kalibriert werden. Im Gegensatz zu einem Kameraaufbau mit einer Kamera gelten für einen Mehrbild-Kameraaufbau einige zusätzliche Anforderungen. Die folgenden Abschnitte enthalten Informationen über die Kalibrierung von Mehrbild-Kameraaufbauten. Für generelle Informationen zur Kalibrierung von Kameras siehe die Kapitelreferenz Kalibrierung.

Vorbereitung der Eingabekalibrierdaten

Vor dem Aufruf des Operators calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras sollten die benötigten Daten im Kalibrierdatenmodell gesammelt werden (wie in Kalibrierung beschrieben). Für Mehrbild-Kameraaufbauten sollten diese zusätzlichen Aspekte berücksichtigt werden:

Die tatsächliche Kalibrierung durchführen

Je nach Kameratypen, welche im Aufbau kalibriert werden, führt calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras die Kalibrierung auf unterschiedliche Weisen durch. Während sich unterschiedliche Kameraaufbauten zum Teil in ihren Anforderungen an die Bildaufnahme unterscheiden, sind die grundsätzlichen Schritte des Kalibriervorgangs für Aufbauten mit projektiven und/oder telezentrischen Kameras gleich:

  1. Kette von Beobachtungen bilden: Im ersten Schritt versucht der Operator calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras eine durchgehende Kette von Beobachtungsposen zu bilden, welche alle Kameras und Kalibrierobjektposen miteinander verbindet. Je nach Kameraaufbau unterscheiden sich die Bedingungen für eine gültige Kette von Posen. Die entsprechenden Anforderungen an die speziellen Aufbauten werden in den entsprechenden Abschnitten unterhalb dieses Paragraphs erläutert.

    Falls 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.

  2. Erste Optimierung: In diesem Schritt optimiert calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras alle Kamera- und Kalibrierkörperposeparameter, die nicht explizit von der Optimierung ausgeschlossen wurden.

  3. Zweite Optimierung: Hierbei korrigiert der Algorithmus anhand des soweit kalibrierten Kameraaufbaus jene Beobachtungen, die Konturdaten enthalten (siehe find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject), und kalibriert den Aufbau zur Berücksichtigung der Korrekturen erneut. Sollten keine Konturbeobachtungsdaten im Modell vorhanden sein, wird dieser Schritt übersprungen.

  4. Berechnung der Qualität der Parameterschätzung: Im letzten Schritt berechnet calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras die Standardabweichungen und die Kovarianzen der kalibrierten Kameraparameter.

Die folgenden Abschnitte enthalten weitere Details zur Kalibrierung verschiedener Kameraaufbauten. Außerdem werden Informationen zur Kalibrierung von Zeilenkameras aufgeführt.

Projektive Flächenkameras

Für einen Aufbau mit projektiven Flächenkameras wird die Kalibrierung in den oben erläuterten vier Schritten durchgeführt. Im ersten Schritt versucht der Algorithmus dabei eine Kette von Beobachtungsposen zu bilden, welche alle Kameras und Kalibrierobjektposen verbindet (siehe Abbildung).

image/svg+xml image/svg+xml
(1) (2)
(1) Alle Kameras können über eine Kette von Beobachtungen miteinander verbunden werden. (2) Die linke Kamera ist von der Beobachtungskette ausgeschlossen, da die linke Kalibrierplatte von keiner anderen Kamera gesehen wird.

Mögliche projektive Flächenkameras sind:

Telezentrische Flächenkameras

Für einen Aufbau mit telezentrischen Flächenkameras werden dieselben vier Schritte durchlaufen wie oben aufgelistet. Für den ersten Schritt (Aufbau einer Kette von Beobachtungen, die alle Kameras und Kalibrierobjektposen verbindet) gelten hier 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.

Mögliche telezentrische Flächenkameras sind:

Projektive and telezentrische Flächenkameras

Für einen gemischten Aufbau mit projektiven und telezentrischen Flächenkameras durchläuft der Algorithmus dieselben Schritte wie oben aufgelistet. 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.

image/svg+xml (P) (T) (P) image/svg+xml (P) (T) (P)
(1) (2)
Gemischter Aufbau mit projektiven (P) und telezentrischen (T) Flächenkameras. (1) Alle projektiven Kameras sind über eine Kette von Beobachtungen, welche nur projektive Kameras beinhaltet, verbunden. (2) Die zweite Kalibrierplatte von links ist von der rechten projektiven Kamera nicht sichtbar, weshalb die Lage der projektiven Kameras zueinander nicht eindeutig bestimmt werden kann.
Zeilenkameras

Für Zeilenkameras ('line_scan'"line_scan""line_scan""line_scan""line_scan" und 'line_scan_telecentric'"line_scan_telecentric""line_scan_telecentric""line_scan_telecentric""line_scan_telecentric") existieren folgende Beschränkung: Es kann nur eine Kamera pro Aufbau kalibriert werden und nur ein Kalibrierobjekt pro Aufbau verwendet werden.

Schließlich muss beachtet werden, dass bei Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab) keine Beobachtungen akzeptiert werden, in denen nicht alle Kalibrierkörpermarken extrahiert wurden. Bei Kalibrierplatten mit hexagonaler Markenanordnung (siehe create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltab) gilt diese Einschränkung nicht. Weitere Informationen zu Kalibrierplatten und der Aufnahme von Kalibrierbildern finden sich im Abschnitt „Zusätzliche Information über die Kalibrierung“ des Kapitels Kalibrierung.

Ergebnisse der Kalibrierung überprüfen

Bei der gleichzeitigen Kalibrierung mehrerer Kameras ist der Wert des Fehlers schwieriger zu beurteilen als bei einer einzelnen Kamera. 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.

Kalibrierergebnisse abfragen

Alle Ergebnisse der Kalibrierung, d.h. die internen Kameraparameter, die Kameraposen (externe Parameter), die Kalibrierkörperposen usw., können mit get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData abgefragt werden.

Es ist zu beachten, dass bei telezentrischen Kameras die Lage nur bis auf ihre Verschiebung entlang der z-Achse des Koordinatensystems der jeweiligen Kamera bekannt ist. Daher 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 gegebenem 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.


Liste der Operatoren

calibrate_camerasCalibrateCamerasCalibrateCamerascalibrate_cameras
Bestimmen aller Kameraparameter durch simultane Ausgleichsrechnung.
clear_calib_dataClearCalibDataClearCalibDataclear_calib_data
Freigeben des Speichers eines Kalibrierdatenmodells.
clear_camera_setup_modelClearCameraSetupModelClearCameraSetupModelclear_camera_setup_model
Freigeben des Speichers eines Kameraaufbaumodells.
create_calib_dataCreateCalibDataCreateCalibDatacreate_calib_data
Anlegen eines generischen HALCON-Kalibrierdatenmodells.
create_camera_setup_modelCreateCameraSetupModelCreateCameraSetupModelcreate_camera_setup_model
Anlegen eines HALCON-Kameraaufbaumodells.
deserialize_calib_dataDeserializeCalibDataDeserializeCalibDatadeserialize_calib_data
Deserialisieren eines serialisierten Kalibrierdatenmodells.
deserialize_camera_setup_modelDeserializeCameraSetupModelDeserializeCameraSetupModeldeserialize_camera_setup_model
Deserialisieren eines serialisierten Kameraaufbaumodells.
get_calib_dataGetCalibDataGetCalibDataget_calib_data
Abfragen der Kalibrierdaten, -einstellungen und -ergebnisse eines Kalibrierdatenmodells.
get_calib_data_observ_contoursGetCalibDataObservContoursGetCalibDataObservContoursget_calib_data_observ_contours
Abfragen konturbasierter Beobachtungsdaten aus dem Kalibrierdatenmodell.
get_calib_data_observ_pointsGetCalibDataObservPointsGetCalibDataObservPointsget_calib_data_observ_points
Abfragen punktbasierter Beobachtungsdaten aus dem Kalibrierdatenmodell.
get_camera_setup_paramGetCameraSetupParamGetCameraSetupParamget_camera_setup_param
Abfragen generischer Kameraaufbaumodellparameter.
query_calib_data_observ_indicesQueryCalibDataObservIndicesQueryCalibDataObservIndicesquery_calib_data_observ_indices
Abfragen von Information zur Beziehung zwischen Kameras, Kalibrierkörpern und Kalibrierkörperposen.
read_calib_dataReadCalibDataReadCalibDataread_calib_data
Einlesen eines Kalibrierdatenmodells aus einer Datei.
read_camera_setup_modelReadCameraSetupModelReadCameraSetupModelread_camera_setup_model
Einlesen eines Kameraaufbaumodells aus einer Datei.
remove_calib_dataRemoveCalibDataRemoveCalibDataremove_calib_data
Entfernen eines Datensatzes aus dem Kalibrierdatenmodell.
remove_calib_data_observRemoveCalibDataObservRemoveCalibDataObservremove_calib_data_observ
Entfernen einer Beobachtung aus dem Kalibrierdatenmodell
serialize_calib_dataSerializeCalibDataSerializeCalibDataserialize_calib_data
Serialisieren eines Kalibrierdatenmodells.
serialize_camera_setup_modelSerializeCameraSetupModelSerializeCameraSetupModelserialize_camera_setup_model
Serialisieren eines Kameraaufbaumodells.
set_calib_dataSetCalibDataSetCalibDataset_calib_data
Setzen von Parametern für das Kalibrierdatenmodell.
set_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object
Definieren des Kalibrierkörpers im Kalibrierdatenmodell.
set_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamset_calib_data_cam_param
Definieren des Typs und der Startwerte für die internen Parameter der Kamera.
set_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points
Punktbasierte Beobachtungsdaten im Kalibrierdatenmodell speichern.
set_camera_setup_cam_paramSetCameraSetupCamParamSetCameraSetupCamParamset_camera_setup_cam_param
Definieren des Typs, der internen Parameter und der Pose einer Kamera im Kameraaufbaumodell.
set_camera_setup_paramSetCameraSetupParamSetCameraSetupParamset_camera_setup_param
Setzen von generischen Parametern im Kameraaufbaumodell.
write_calib_dataWriteCalibDataWriteCalibDatawrite_calib_data
Schreiben des Kalibrierdatenmodells in eine Datei.
write_camera_setup_modelWriteCameraSetupModelWriteCameraSetupModelwrite_camera_setup_model
Schreiben eines Kameraaufbaumodells in eine Datei.