find_calib_objectT_find_calib_objectFindCalibObjectFindCalibObjectfind_calib_object (Operator)

Name

find_calib_objectT_find_calib_objectFindCalibObjectFindCalibObjectfind_calib_object — Finden der HALCON-Kalibrierplatte im Bild, Extrahieren der Kalibriermarken sowie Speichern der extrahierten Daten im Kalibrierdatenmodell.

Signatur

find_calib_object(Image : : CalibDataID, CameraIdx, CalibObjIdx, CalibObjPoseIdx, GenParamName, GenParamValue : )

Herror T_find_calib_object(const Hobject Image, const Htuple CalibDataID, const Htuple CameraIdx, const Htuple CalibObjIdx, const Htuple CalibObjPoseIdx, const Htuple GenParamName, const Htuple GenParamValue)

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

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)

def find_calib_object(image: HObject, calib_data_id: HHandle, camera_idx: int, calib_obj_idx: int, calib_obj_pose_idx: int, gen_param_name: Sequence[str], gen_param_value: Sequence[Union[str, float, int]]) -> None

Beschreibung

find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object sucht im Bild ImageImageImageImageimageimage nach einer HALCON-Kalibrierplatte, welche der Beschreibung des Kalibrierobjekts CalibObjIdxCalibObjIdxCalibObjIdxCalibObjIdxcalibObjIdxcalib_obj_idx im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataIDcalib_data_id entspricht. Wird die Kalibrierplatte gefunden, extrahiert find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object die Mittelpunkte und die Konturen der Kalibriermarken und schätzt die 3D-Pose der Kalibrierplatte relativ zur beobachtenden Kamera CameraIdxCameraIdxCameraIdxCameraIdxcameraIdxcamera_idx. Diese Daten werden im Kalibrierdatenmodell für die Ansicht CalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxcalibObjPoseIdxcalib_obj_pose_idx des Kalibrierkörpers gespeichert. Um ein erfolgreiches Auffinden zu ermöglichen, muss mindestens ein Suchmuster vollständig im Bild sichtbar sein. Bei Kalibrierplatten mit hexagonaler Markenanordnung ist dies ein Hexagon von Marken, das vier oder sechs Marken mit einem Loch enthält, während es bei Kalibrierplatten mit rechteckiger Markenanordnung der Rahmen mit Dreieck in einer Ecke ist.

Vorbereitung der Eingabedaten

Bevor der Operator find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object aufgerufen werden kann, muss zunächst ein Kalibrierdatenmodell definiert werden. Dabei müssen die folgenden Schritte durchgeführt werden:

  1. Erstellen des Kalibrierdatenmodells mit dem Operator create_calib_datacreate_calib_dataCreateCalibDataCreateCalibDataCreateCalibDatacreate_calib_data, wobei die Anzahl der Kameras und die Anzahl der Kalibrierkörper im Modell festgelegt werden.

  2. Definieren des Kameratyps und der internen Kameraparameter für alle Kameras mit dem Operator set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamSetCalibDataCamParamset_calib_data_cam_param. Dabei ist zu beachten, dass nur Kameras vom gleichen Typ in einem Aufbau kalibriert werden können.

  3. Definieren der Kalibrierkörperbeschreibung für alle Kalibrierkörper mit dem Operator set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object. Dabei ist zu beachten, dass für einen erfolgreichen Aufruf von find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object eine gültige Beschreibungsdatei der Kalibrierplatte benötigt wird. Diese Beschreibungsdatei muss zuvor über set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object gesetzt werden. Die Verwendung eines benutzerdefinierten Kalibrierkörpers kann dementsprechend nur über den Operator set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points erfolgen.

Sammeln von Beobachtungen

find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object sammelt Beobachtungen und speichert diese im Kalibrierdatenmodell (siehe set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_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_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_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_caltabgen_caltabGenCaltabGenCaltabGenCaltabgen_caltab) der Rand der Kalibrierplatte den Beobachtungen hinzugefügt wird, wird bei Kalibrierplatten mit hexagonalem Muster (siehe create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltabcreate_caltab) 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 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 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_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_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_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object der Operatorfolge find_caltabfind_caltabFindCaltabFindCaltabFindCaltabfind_caltab, find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose und set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points. Für diese Kalibrierplatten können mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 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_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_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

'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_caltabFindCaltabFindCaltabFindCaltabfind_caltab)

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_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose). Standardmäßig wird dieser Wert durch einen vorhergehenden internen Aufruf von find_caltabfind_caltabFindCaltabFindCaltabFindCaltabfind_caltab geschätzt. Wenn allerdings die Schätzung fehlerhaft ist, der interne Aufruf von find_caltabfind_caltabFindCaltabFindCaltabFindCaltabfind_caltab 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_caltabFindCaltabFindCaltabFindCaltabfind_caltab. 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_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_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_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain vor dem Aufruf von find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object 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_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object zu verwenden, da dieser im Gegensatz zu set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points auch die Konturen der Kalibriermarken im Kalibrierdatenmodell speichert und dadurch eine genauere Kalibrierung mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_cameras ermöglicht.

Nach einem erfolgreichen Aufruf von find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object können die extrahierten Punkte und Konturen mit dem Operator get_calib_data_observ_pointsget_calib_data_observ_pointsGetCalibDataObservPointsGetCalibDataObservPointsGetCalibDataObservPointsget_calib_data_observ_points bzw. get_calib_data_observ_contoursget_calib_data_observ_contoursGetCalibDataObservContoursGetCalibDataObservContoursGetCalibDataObservContoursget_calib_data_observ_contours abgefragt werden.

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild.

CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataIDcalib_data_id (input_control, Zustand wird modifiziert)  calib_data HCalibData, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Kalibrierdatenmodells.

CameraIdxCameraIdxCameraIdxCameraIdxcameraIdxcamera_idx (input_control)  number HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index der beobachtenden Kamera.

Defaultwert: 0

Wertevorschläge: 0, 1, 2

CalibObjIdxCalibObjIdxCalibObjIdxCalibObjIdxcalibObjIdxcalib_obj_idx (input_control)  number HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index des beobachteten Kalibrierkörpers.

Defaultwert: 0

Wertevorschläge: 0, 1, 2

CalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxCalibObjPoseIdxcalibObjPoseIdxcalib_obj_pose_idx (input_control)  number HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index der beobachteten Pose.

Defaultwert: 0

Wertevorschläge: 0, 1, 2

Restriktion: CalibObjPoseIdx >= 0

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  attribute.name-array HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

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"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  attribute.value-array HTupleSequence[Union[str, float, int]]HTupleHtuple (string / real / integer) (string / double / int / long) (HString / double / Hlong) (char* / double / Hlong)

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"

Vorgänger

read_imageread_imageReadImageReadImageReadImageread_image, find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose, set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamSetCalibDataCamParamset_calib_data_cam_param, set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object

Nachfolger

set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibDataset_calib_data, calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_cameras

Alternativen

find_caltabfind_caltabFindCaltabFindCaltabFindCaltabfind_caltab, find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose, set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points

Modul

Calibration