Name
find_calib_objectT_find_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject — Finden der HALCON-Kalibrierplatte im Bild, Extrahieren der Kalibriermarken
sowie Speichern der extrahierten Daten im Kalibrierdatenmodell.
Herror find_calib_object(Hobject Image, const HTuple& CalibDataID, const HTuple& CameraIdx, const HTuple& CalibObjIdx, const HTuple& CalibObjPoseIdx, const HTuple& GenParamName, const HTuple& GenParamValue)
void HCalibData::FindCalibObject(const HImage& Image, const HTuple& CameraIdx, const HTuple& CalibObjIdx, const HTuple& CalibObjPoseIdx, const HTuple& GenParamName, const HTuple& GenParamValue) const
void FindCalibObject(const HObject& Image, const HTuple& CalibDataID, const HTuple& CameraIdx, const HTuple& CalibObjIdx, const HTuple& CalibObjPoseIdx, const HTuple& GenParamName, const HTuple& GenParamValue)
void HCalibData::FindCalibObject(const HImage& Image, Hlong CameraIdx, Hlong CalibObjIdx, Hlong CalibObjPoseIdx, const HTuple& GenParamName, const HTuple& GenParamValue) const
void HOperatorSetX.FindCalibObject(
[in] IHUntypedObjectX* Image, [in] VARIANT CalibDataID, [in] VARIANT CameraIdx, [in] VARIANT CalibObjIdx, [in] VARIANT CalibObjPoseIdx, [in] VARIANT GenParamName, [in] VARIANT GenParamValue)
void HCalibDataX.FindCalibObject(
[in] IHImageX* Image, [in] Hlong CameraIdx, [in] Hlong CalibObjIdx, [in] Hlong CalibObjPoseIdx, [in] VARIANT GenParamName, [in] VARIANT GenParamValue)
static void HOperatorSet.FindCalibObject(HObject image, HTuple calibDataID, HTuple cameraIdx, HTuple calibObjIdx, HTuple calibObjPoseIdx, HTuple genParamName, HTuple genParamValue)
void HCalibData.FindCalibObject(HImage image, int cameraIdx, int calibObjIdx, int calibObjPoseIdx, HTuple genParamName, HTuple genParamValue)
find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject sucht im Bild ImageImageImageImageImageimage nach einer
HALCON-Kalibrierplatte, welche der Beschreibung des Kalibrierobjekts
CalibObjIdxCalibObjIdxCalibObjIdxCalibObjIdxCalibObjIdxcalibObjIdx im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID entspricht.
Wird die Kalibrierplatte gefunden, extrahiert find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject die
Mittelpunkte und die Konturen der Kalibriermarken und schätzt die 3D-Pose der
Kalibrierplatte relativ zur beobachtenden Kamera CameraIdxCameraIdxCameraIdxCameraIdxCameraIdxcameraIdx.
Diese Daten werden im Kalibrierdatenmodell für die Ansicht
CalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxcalibObjPoseIdx des Kalibrierkörpers gespeichert.
Um ein erfolgreiches Auffinden zu ermöglichen, muss bei Verwendung einer
Kalibrierplatte mit rechteckiger Markenanordnung (siehe gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab)
die ganze Platte im Bild sichtbar sein, während es bei Kalibrierplatten mit
hexagonaler Markenanordnung (siehe create_caltabcreate_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab) ausreicht, wenn
mindestens eines der Suchmuster vollständig sichtbar ist.
Vorbereitung der Eingabedaten
Bevor der Operator find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject 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_datacreate_calib_dataCreateCalibDatacreate_calib_dataCreateCalibDataCreateCalibData, 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_paramset_calib_data_cam_paramSetCalibDataCamParamset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParam. 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_objectset_calib_data_calib_objectSetCalibDataCalibObjectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObject.
Dabei ist zu beachten, dass für einen erfolgreichen Aufruf von
find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject eine gültige Beschreibungsdatei der
Kalibrierplatte benötigt wird. Diese Beschreibungsdatei muss zuvor über
set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObject gesetzt werden.
Die Verwendung eines benutzerdefinierten Kalibrierkörpers kann
dementsprechend nur über den Operator set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints
erfolgen.
Sammeln von Beobachtungen
find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject sammelt Beobachtungen und speichert diese im
Kalibrierdatenmodell (siehe set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints 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_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints zugefügt werden können und abhängig von
der verwendeten Kalibrierplatte sind. Während für Kalibrierplatten mit
rechteckiger Markenanordnung (siehe gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab) der Rand der
Kalibrierplatte den Beobachtungen hinzugefügt wird, wird bei
Kalibrierplatten mit hexagonalem Muster (siehe create_caltabcreate_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab) eines
der Suchmuster gespeichert. Zusätzlich werden unabhängig von der verwendeten
Kalibrierplatte die Konturen der einzelnen Marken dem Kalibrierdatenmodell
zugeführt.
Setzen zusätzlicher Parameter
Bei Kalibrierplatten mit hexagonaler Markenanordnung kann mit
GenParamNameGenParamNameGenParamNameGenParamNameGenParamNamegenParamName und GenParamValueGenParamValueGenParamValueGenParamValueGenParamValuegenParamValue folgender, zusätzlicher
Parameter gesetzt werden:
- 'sigma'"sigma""sigma""sigma""sigma""sigma":
-
Glättungsfaktor für die Extraktion der Markenkonturen. Je größer der
Wert für 'sigma'"sigma""sigma""sigma""sigma""sigma" ist, umso größer ist die Filterbreite
und damit das Einzugsgebiet des Filters
(siehe auch edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix 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_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject der Operatorfolge find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab,
find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose und set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints. Für
diese Kalibrierplatten können mit GenParamNameGenParamNameGenParamNameGenParamNameGenParamNamegenParamName und
GenParamValueGenParamValueGenParamValueGenParamValueGenParamValuegenParamValue die folgenden Parameter gesetzt werden:
- 'alpha'"alpha""alpha""alpha""alpha""alpha":
-
Glättungsfaktor für die Extraktion der Markenkonturen. Je größer der
Wert für 'alpha'"alpha""alpha""alpha""alpha""alpha" ist, umso kleiner ist die Filterbreite
und damit das Einzugsgebiet des Filters
(siehe auch edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix für den Einfluss der Filterbreite bei Lanser2-Filterung).
Wertevorschläge: 0.5, 0.7,
0.9 (default),
1.0, 1.2, 1.5
- 'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance":
-
Toleranzfaktor für den Abstand zwischen einzelnen Marken. Falls die
Marken dichter aneinander erscheinen als erwartet, kann
'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance""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'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance" > 1.0 setzen und so auch die
Gruppierung über größere Distanzen ermöglichen. (siehe auch
find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab)
Wertevorschläge: 0.75, 0.9,
1.0 (default),
1.1, 1.2, 1.5
- 'max_diam_marks'"max_diam_marks""max_diam_marks""max_diam_marks""max_diam_marks""max_diam_marks":
-
Maximal erwarteter Durchmesser der Marken (intern benötigt von
find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose). Standardmäßig wird dieser Wert durch einen
vorhergehenden internen Aufruf von find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab geschätzt. Wenn
allerdings die Schätzung fehlerhaft ist, der
interne Aufruf von find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab scheitert oder
übersprungen wird (siehe 'skip_find_caltab'"skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab"), kann eine separate
Anpassung dieses Parameterwerts notwendig sein.
Wertevorschläge: 50.0, 100.0, 150.0,
200.0, 300.0
- 'skip_find_caltab'"skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab":
-
Überspringen des internen Aufrufs von find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab.
Wenn 'skip_find_caltab'"skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab"='true'"true""true""true""true""true", wird nur die
Bildregion des Bildes ImageImageImageImageImageimage zum Begrenzen der Markensuche in
find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose berücksichtigt. Über diesen Mechanismus
kann ein benutzerdefiniertes Suchen der
Kalibrierkörperregion nach Bedarf implementiert werden. Der Suchbereich
ist dann mit dem Operator reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain vor dem Aufruf von
find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject einzuschränken.
Werteliste: 'false'"false""false""false""false""false" (default),
'true'"true""true""true""true""true"
Wir empfehlen, bei Nutzung einer HALCON-Kalibrierplatte als Kalibrierkörper
möglichst immer den Operator find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject zu verwenden, da
dieser im Gegensatz zu set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints auch die
Konturen der Kalibriermarken im Kalibrierdatenmodell speichert und dadurch
eine genauere Kalibrierung mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras
ermöglicht.
Nach einem erfolgreichen Aufruf von find_calib_objectfind_calib_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject können die
extrahierten Punkte und Konturen mit dem Operator
get_calib_data_observ_pointsget_calib_data_observ_pointsGetCalibDataObservPointsget_calib_data_observ_pointsGetCalibDataObservPointsGetCalibDataObservPoints bzw.
get_calib_data_observ_contoursget_calib_data_observ_contoursGetCalibDataObservContoursget_calib_data_observ_contoursGetCalibDataObservContoursGetCalibDataObservContours abgefragt werden.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf interner Datenebene.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Der Wert dieses Parameters darf nicht über mehrere Threads verwendet werden.
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'"alpha""alpha""alpha""alpha""alpha", 'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance", 'max_diam_marks'"max_diam_marks""max_diam_marks""max_diam_marks""max_diam_marks""max_diam_marks", 'sigma'"sigma""sigma""sigma""sigma""sigma", 'skip_find_caltab'"skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab""skip_find_caltab"
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 0.5, 0.9, 1.0, 1.2, 1.5, 2.0, 'true'"true""true""true""true""true", 'false'"false""false""false""false""false"
read_imageread_imageReadImageread_imageReadImageReadImage,
find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose,
set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParam,
set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObject
set_calib_dataset_calib_dataSetCalibDataset_calib_dataSetCalibDataSetCalibData,
calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras
find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab,
find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose,
set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPoints
Calibration