| Operatoren |
find_calib_object — Finden der HALCON-Kalibrierplatte im Bild, Extrahieren der Kalibriermarken sowie Speichern der extrahierten Daten im Kalibrierdatenmodell.
find_calib_object(Image : : CalibDataID, CameraIdx, CalibObjIdx, CalibObjPoseIdx, GenParamName, GenParamValue : )
find_calib_object sucht im Bild Image nach einer HALCON-Kalibrierplatte, welche der Beschreibung des Kalibrierobjekts CalibObjIdx im Kalibrierdatenmodell CalibDataID entspricht. Wird die Kalibrierplatte gefunden, extrahiert find_calib_object die Mittelpunkte und die Konturen der Kalibriermarken und schätzt die 3D-Pose der Kalibrierplatte relativ zur beobachtenden Kamera CameraIdx. Diese Daten werden im Kalibrierdatenmodell für die Ansicht CalibObjPoseIdx des Kalibrierkörpers gespeichert. Um ein erfolgreiches Auffinden zu ermöglichen, muss bei Verwendung einer Kalibrierplatte mit rechteckiger Markenanordnung (siehe gen_caltab) die ganze Platte im Bild sichtbar sein, während es bei Kalibrierplatten mit hexagonaler Markenanordnung (siehe create_caltab) ausreicht, wenn mindestens eines der Suchmuster vollständig sichtbar ist.
Bevor der Operator find_calib_object aufgerufen werden kann, muss zunächst ein Kalibrierdatenmodell definiert werden. Dabei müssen die folgenden Schritte durchgeführt 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. Dabei ist zu beachten, 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. Dabei ist zu beachten, dass für einen erfolgreichen Aufruf von find_calib_object eine gültige Beschreibungsdatei der Kalibrierplatte benötigt wird. Diese Beschreibungsdatei muss zuvor über set_calib_data_calib_object gesetzt werden. Die Verwendung eines benutzerdefinierten Kalibrierkörpers kann dementsprechend nur über den Operator set_calib_data_observ_points erfolgen.
find_calib_object sammelt Beobachtungen und speichert diese im Kalibrierdatenmodell (siehe set_calib_data_observ_points für eine Beschreibung der Kalibrierdatenbeobachtungen). Darüber hinaus speichert er zusätzliche Informationen für die Beobachtungen, welche dem Modell nicht mit set_calib_data_observ_points zugefügt werden können und abhängig von der verwendeten Kalibrierplatte sind. Während für Kalibrierplatten mit rechteckiger Markenanordnung (siehe gen_caltab) der Rand der Kalibrierplatte den Beobachtungen hinzugefügt wird, wird bei Kalibrierplatten mit hexagonalem Muster (siehe create_caltab) eines der Suchmuster gespeichert. Zusätzlich werden unabhängig von der verwendeten Kalibrierplatte die Konturen der einzelnen Marken dem Kalibrierdatenmodell zugeführt.
Bei Kalibrierplatten mit hexagonaler Markenanordnung kann mit GenParamName und GenParamValue folgender, zusätzlicher Parameter gesetzt werden:
Glättungsfaktor für die Extraktion der Markenkonturen. Je größer der Wert für 'sigma' ist, umso größer ist die Filterbreite und damit das Einzugsgebiet des Filters (siehe auch edges_sub_pix für den Einfluss der Filterbreite bei Canny-Filterung).
Wertevorschläge: 0.5, 0.7, 0.9, 1.0 (default), 1.2, 1.5
Für Kalibrierplatten mit rechteckiger Markenanordnung entspricht find_calib_object der Operatorfolge find_caltab, find_marks_and_pose und set_calib_data_observ_points. Für diese Kalibrierplatten können mit GenParamName und GenParamValue die folgenden Parameter gesetzt werden:
Glättungsfaktor für die Extraktion der Markenkonturen. Je größer der Wert für 'alpha' ist, umso kleiner ist die Filterbreite und damit das Einzugsgebiet des Filters (siehe auch edges_sub_pix für den Einfluss der Filterbreite bei Lanser2-Filterung).
Wertevorschläge: 0.5, 0.7, 0.9 (default), 1.0, 1.2, 1.5
Toleranzfaktor für den Abstand zwischen einzelnen Marken. Falls die Marken dichter aneinander erscheinen als erwartet, kann 'gap_tolerance' < 1.0 gesetzt werden, um zu vermeiden, dass Störungsmuster außerhalb der Kalibrierplatte mit der Kalibrierplatte assoziiert werden. Dies ist z.B. dann sinnvoll, wenn der Hintergrund Muster aufweist, die den Kalibriermarken ähneln. Wenn die Abstände zwischen einzelnen Marken sehr stark variieren, z.B., wenn die Platte stark perspektivisch verzerrt im Bild erscheint, kann man 'gap_tolerance' > 1.0 setzen und so auch die Gruppierung über größere Distanzen ermöglichen. (siehe auch find_caltab)
Wertevorschläge: 0.75, 0.9, 1.0 (default), 1.1, 1.2, 1.5
Maximal erwarteter Durchmesser der Marken (intern benötigt von find_marks_and_pose). Standardmäßig wird dieser Wert durch einen vorhergehenden internen Aufruf von find_caltab geschätzt. Wenn allerdings die Schätzung fehlerhaft ist, der interne Aufruf von find_caltab scheitert oder übersprungen wird (siehe 'skip_find_caltab'), kann eine separate Anpassung dieses Parameterwerts notwendig sein.
Wertevorschläge: 50.0, 100.0, 150.0, 200.0, 300.0
Überspringen des internen Aufrufs von find_caltab. Wenn 'skip_find_caltab'='true', wird nur die Bildregion des Bildes Image zum Begrenzen der Markensuche in find_marks_and_pose berücksichtigt. Über diesen Mechanismus kann ein benutzerdefiniertes Suchen der Kalibrierkörperregion nach Bedarf implementiert werden. Der Suchbereich ist dann mit dem Operator reduce_domain vor dem Aufruf von find_calib_object einzuschränken.
Werteliste: 'false' (default), 'true'
Wir empfehlen, bei Nutzung einer HALCON-Kalibrierplatte als Kalibrierkörper möglichst immer den Operator find_calib_object zu verwenden, da dieser im Gegensatz zu set_calib_data_observ_points auch die Konturen der Kalibriermarken im Kalibrierdatenmodell speichert und dadurch eine genauere Kalibrierung mit dem Operator calibrate_cameras ermöglicht.
Nach einem erfolgreichen Aufruf von find_calib_object können die extrahierten Punkte und Konturen mit dem Operator get_calib_data_observ_points bzw. get_calib_data_observ_contours abgefragt werden.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Der Wert dieses Parameters darf nicht über mehrere Threads verwendet werden.Eingabebild.
Handle des Kalibrierdatenmodells.
Index der beobachtenden Kamera.
Defaultwert: 0
Wertevorschläge: 0, 1, 2
Index des beobachteten Kalibrierkörpers.
Defaultwert: 0
Wertevorschläge: 0, 1, 2
Index der beobachteten Pose.
Defaultwert: 0
Wertevorschläge: 0, 1, 2
Restriktion: CalibObjPoseIdx >= 0
Namen der generischen Parameter.
Defaultwert: []
Werteliste: 'alpha', 'gap_tolerance', 'max_diam_marks', 'sigma', 'skip_find_caltab'
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 0.5, 0.9, 1.0, 1.2, 1.5, 2.0, 'true', 'false'
read_image, find_marks_and_pose, set_calib_data_cam_param, set_calib_data_calib_object
set_calib_data, calibrate_cameras
find_caltab, find_marks_and_pose, set_calib_data_observ_points
Calibration
| Operatoren |