create_caltabcreate_caltabCreateCaltabCreateCaltabcreate_caltab (Operator)

Name

create_caltabcreate_caltabCreateCaltabCreateCaltabcreate_caltab — Erzeugen der Kalibrierkörperbeschreibungsdatei und der passenden PostScript-Datei für eine Kalibrierplatte mit hexagonaler Markenanordnung.

Signatur

create_caltab( : : NumRows, MarksPerRow, Diameter, FinderRow, FinderColumn, Polarity, CalPlateDescr, CalPlatePSFile : )

Herror create_caltab(const Hlong NumRows, const Hlong MarksPerRow, double Diameter, const Hlong FinderRow, const Hlong FinderColumn, const char* Polarity, const char* CalPlateDescr, const char* CalPlatePSFile)

Herror T_create_caltab(const Htuple NumRows, const Htuple MarksPerRow, const Htuple Diameter, const Htuple FinderRow, const Htuple FinderColumn, const Htuple Polarity, const Htuple CalPlateDescr, const Htuple CalPlatePSFile)

void CreateCaltab(const HTuple& NumRows, const HTuple& MarksPerRow, const HTuple& Diameter, const HTuple& FinderRow, const HTuple& FinderColumn, const HTuple& Polarity, const HTuple& CalPlateDescr, const HTuple& CalPlatePSFile)

static void HMisc::CreateCaltab(Hlong NumRows, Hlong MarksPerRow, double Diameter, const HTuple& FinderRow, const HTuple& FinderColumn, const HString& Polarity, const HString& CalPlateDescr, const HString& CalPlatePSFile)

static void HMisc::CreateCaltab(Hlong NumRows, Hlong MarksPerRow, double Diameter, Hlong FinderRow, Hlong FinderColumn, const HString& Polarity, const HString& CalPlateDescr, const HString& CalPlatePSFile)

static void HMisc::CreateCaltab(Hlong NumRows, Hlong MarksPerRow, double Diameter, Hlong FinderRow, Hlong FinderColumn, const char* Polarity, const char* CalPlateDescr, const char* CalPlatePSFile)

static void HMisc::CreateCaltab(Hlong NumRows, Hlong MarksPerRow, double Diameter, Hlong FinderRow, Hlong FinderColumn, const wchar_t* Polarity, const wchar_t* CalPlateDescr, const wchar_t* CalPlatePSFile)   (Nur Windows)

static void HOperatorSet.CreateCaltab(HTuple numRows, HTuple marksPerRow, HTuple diameter, HTuple finderRow, HTuple finderColumn, HTuple polarity, HTuple calPlateDescr, HTuple calPlatePSFile)

static void HMisc.CreateCaltab(int numRows, int marksPerRow, double diameter, HTuple finderRow, HTuple finderColumn, string polarity, string calPlateDescr, string calPlatePSFile)

static void HMisc.CreateCaltab(int numRows, int marksPerRow, double diameter, int finderRow, int finderColumn, string polarity, string calPlateDescr, string calPlatePSFile)

def create_caltab(num_rows: int, marks_per_row: int, diameter: float, finder_row: MaybeSequence[int], finder_column: MaybeSequence[int], polarity: str, cal_plate_descr: str, cal_plate_psfile: str) -> None

Beschreibung

create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltabcreate_caltab erzeugt die Kalibrierkörperbeschreibungsdatei eines Standardkalibrierkörpers für HALCON mit hexagonaler Markenanordnung. Dieser Kalibrierkörper besteht aus NumRowsNumRowsNumRowsNumRowsnumRowsnum_rows mal MarksPerRowMarksPerRowMarksPerRowMarksPerRowmarksPerRowmarks_per_row kreisförmigen Marken. Diese Marken sind in einem hexagonalen Muster angeordnet, so dass jede Marke (ausgenommen die am Rand liegenden) sechs Nachbarn mit gleichem Abstand hat.

image/svg+xml
Ein Standard-HALCON-Kalibrierkörper mit hexagonaler Markenanordnung und sein Koordinatensystem.

Der Durchmesser der Marken wird durch den Parameter DiameterDiameterDiameterDiameterdiameterdiameter in Metern festgelegt. Der Abstand zwischen den Zentren der horizontal benachbarten Marken ist . Der Abstand zwischen benachbarten Zeilen von Kalibriermarken ist . Die Breite und die Höhe der generierten Kalibrierplatte lassen sich mit den folgenden Formeln ermitteln:

Das Muster des Kalibrierkörpers enthält ein bis fünf Suchmuster. Ein Suchmuster besteht aus einem speziellen Hexagon von Marken (also einer Marke und deren sechs Nachbarmarken), das vier oder sechs Marken mit einem Loch enthält. Jedes dieser bis zu fünf Suchmuster ist eindeutig und kann dazu verwendet werden die Orientierung des Kalibrierkörpers und die Lage des Suchmusters auf dem Kalibrierkörper zu bestimmen. Mindestens eines der Suchmuster muss vollständig sichtbar sein, damit der Kalibrierkörper von find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObjectfind_calib_object gefunden werden kann. Die Position der zentralen Marken der Suchmuster werden in FinderRowFinderRowFinderRowFinderRowfinderRowfinder_row und FinderColumnFinderColumnFinderColumnFinderColumnfinderColumnfinder_column angegeben. Die Länge dieser Tupel bestimmt somit die Anzahl der Suchmuster auf dem Kalibrierkörper. Zwei Suchmuster dürfen sich nicht überlappen. Es wird empfohlen, einen gewissen Abstand zwischen den Suchmustern einzuhalten damit die Marken mit Loch eindeutig einem Suchmuster zugeordnet werden können. Als Faustregel gilt: Wenn zu wenig Marken vorhanden sind, um die Suchmuster an möglichst eindeutigen Stellen zu platzieren, sollte die Anzahl der Suchmuster reduziert werden, damit sie gleichmäßiger verteilt werden können. Ein solches Beispiel ist weiter unten abgebildet, wobei zu beachten ist, dass das Finden der Suchmuster auch vom verwendeten Kamerasetup abhängt.

Der Ursprung des Koordinatensystems des Kalibrierkörpers befindet sich in der Mitte der zentralen Marke des ersten Suchmusters.

image/svg+xml
Die Suchmuster einer Kalibrierplatte sollten nicht zu nahe zueinander platziert werden (links). Falls nicht genügend Marken auf der Kalibrierplatte sind, um die Suchmuster genügend weit voneinander zu platzieren, sollte die Anzahl an Suchmustern entsprechend reduziert werden (rechts).

Abhängig von PolarityPolarityPolarityPolaritypolaritypolarity sind die Marken entweder hell auf dunklem Hintergrund ('light_on_dark'"light_on_dark""light_on_dark""light_on_dark""light_on_dark""light_on_dark") oder dunkel auf hellem Hintergrund ('dark_on_light'"dark_on_light""dark_on_light""dark_on_light""dark_on_light""dark_on_light").

Die Datei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr enthält die Kalibrierkörperbeschreibung, die bei allen HALCON-Operationen die diesen Kalibrierkörber verwenden, angegeben werden muss (zum Beispiel in set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object oder sim_caltabsim_caltabSimCaltabSimCaltabSimCaltabsim_caltab). Die Dateiendung für eine Beschreibungsdatei eines Kalibrierkörpers mit hexagonaler Markenanordnung ist 'cpd'.

Eine Kalibrierkörperbeschreibung enthält Informationen über:

Eine Datei, die mit create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltabcreate_caltab erzeugt wurde, sieht z.B. folgendermaßen aus (Kommentare sind durch ein '#' am Anfang der Zeile markiert):

# Plate Description Version 3 # HALCON Version 20.11 -- Wed Dec 16 11:02:00 2020 # Description of the standard calibration plate # used for the camera calibration in HALCON # (generated by create_caltab) # # # 27 rows x 31 columns # Width, height of calibration plate [meter]: 0.170323, 0.129118 # Distance between mark centers [meter]: 0.0051613 # Number of marks in y-dimension (rows) r 27 # Number of marks in x-dimension (columns) c 31 # offset of coordinate system in z-dimension [meter] (optional): z 0 # rim of the calibration plate (min x, max y, max x, min y) [meter]: o -0.083871125 0.0645592449151841 0.086451775 -0.0645592449151841 # polarity of the marks (light or dark): p light # number of finder pattern marks: f 5 # position of the finder patterns (central mark): x y [index] 15 13 6 6 24 6 6 20 24 20 # calibration marks: x y radius [meter] # calibration marks at y = -0.0581076 m -0.07483885 -0.0581076199151841 0.001290325 -0.06967755 -0.0581076199151841 0.001290325 -0.06451625 -0.0581076199151841 0.001290325 -0.05935495 -0.0581076199151841 0.001290325 -0.05419365 -0.0581076199151841 0.001290325 -0.04903235 -0.0581076199151841 0.001290325 -0.04387105 -0.0581076199151841 0.001290325 -0.03870975 -0.0581076199151841 0.001290325 -0.03354845 -0.0581076199151841 0.001290325 -0.02838715 -0.0581076199151841 0.001290325 -0.02322585 -0.0581076199151841 0.001290325 -0.01806455 -0.0581076199151841 0.001290325 -0.01290325 -0.0581076199151841 0.001290325 -0.00774195 -0.0581076199151841 0.001290325 -0.00258065 -0.0581076199151841 0.001290325 0.00258065 -0.0581076199151841 0.001290325 0.00774195 -0.0581076199151841 0.001290325 0.01290325 -0.0581076199151841 0.001290325 0.01806455 -0.0581076199151841 0.001290325 0.02322585 -0.0581076199151841 0.001290325 0.02838715 -0.0581076199151841 0.001290325 0.03354845 -0.0581076199151841 0.001290325 0.03870975 -0.0581076199151841 0.001290325 0.04387105 -0.0581076199151841 0.001290325 0.04903235 -0.0581076199151841 0.001290325 0.05419365 -0.0581076199151841 0.001290325 0.05935495 -0.0581076199151841 0.001290325 0.06451625 -0.0581076199151841 0.001290325 0.06967755 -0.0581076199151841 0.001290325 0.07483885 -0.0581076199151841 0.001290325 0.08000015 -0.0581076199151841 0.001290325 # calibration marks at y = -0.0536378 m -0.0774195 -0.0536378029986315 0.001290325 -0.0722582 -0.0536378029986315 0.001290325 -0.0670969 -0.0536378029986315 0.001290325 -0.0619356 -0.0536378029986315 0.001290325 -0.0567743 -0.0536378029986315 0.001290325 -0.051613 -0.0536378029986315 0.001290325 -0.0464517 -0.0536378029986315 0.001290325 -0.0412904 -0.0536378029986315 0.001290325 -0.0361291 -0.0536378029986315 0.001290325 -0.0309678 -0.0536378029986315 0.001290325 -0.0258065 -0.0536378029986315 0.001290325 -0.0206452 -0.0536378029986315 0.001290325 -0.0154839 -0.0536378029986315 0.001290325 -0.0103226 -0.0536378029986315 0.001290325 -0.0051613 -0.0536378029986315 0.001290325 0 -0.0536378029986315 0.001290325 0.0051613 -0.0536378029986315 0.001290325 0.0103226 -0.0536378029986315 0.001290325 0.0154839 -0.0536378029986315 0.001290325 0.0206452 -0.0536378029986315 0.001290325 0.0258065 -0.0536378029986315 0.001290325 0.0309678 -0.0536378029986315 0.001290325 0.0361291 -0.0536378029986315 0.001290325 0.0412904 -0.0536378029986315 0.001290325 0.0464517 -0.0536378029986315 0.001290325 0.051613 -0.0536378029986315 0.001290325 0.0567743 -0.0536378029986315 0.001290325 0.0619356 -0.0536378029986315 0.001290325 0.0670969 -0.0536378029986315 0.001290325 0.0722582 -0.0536378029986315 0.001290325 0.0774195 -0.0536378029986315 0.001290325 # calibration marks at y = -0.049168 m ... # calibration marks at y = -0.0446982 m ... # calibration marks at y = -0.0402284 m ... # calibration marks at y = -0.0357585 m ... # calibration marks at y = -0.0312887 m ... # calibration marks at y = -0.0268189 m ... # calibration marks at y = -0.0223491 m ... # calibration marks at y = -0.0178793 m ... # calibration marks at y = -0.0134095 m ... # calibration marks at y = -0.00893963 m ... # calibration marks at y = -0.00446982 m ... # calibration marks at y = 0 m ... # calibration marks at y = 0.00446982 m ... # calibration marks at y = 0.00893963 m ... # calibration marks at y = 0.0134095 m ... # calibration marks at y = 0.0178793 m ... # calibration marks at y = 0.0223491 m ... # calibration marks at y = 0.0268189 m ... # calibration marks at y = 0.0312887 m ... # calibration marks at y = 0.0357585 m ... # calibration marks at y = 0.0402284 m ... # calibration marks at y = 0.0446982 m ... # calibration marks at y = 0.049168 m ... # calibration marks at y = 0.0536378 m ... # calibration marks at y = 0.0581076 m ...

Es ist zu beachten, dass hier für eine bessere Übersichtlichkeit nur die Koordinaten und Radien der Marken aus den ersten beiden Zeilen vollständig aufgeführt sind. Die entsprechenden Koordinaten und Radien der Marken in den anderen Zeilen wurden daher ausgelassen.

Die Datei CalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFilecalPlatePSFilecal_plate_psfile enthält die korrespondierende PostScript-Beschreibung des Kalibrierkörpers, die zum Ausdrucken des Kalibrierkörpers verwendet werden kann.

Achtung

Je nach Genauigkeit des verwendeten Ausgabegeräts (z.B. Laserdrucker) stimmt der ausgedruckte Kalibrierkörper nicht genau mit der Kalibrierkörperbeschreibungsdatei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr überein. Es müssen daher ggf. die Koordinaten der Kalibrierkörpermarken in der Kalibrierkörperbeschreibungsdatei an die realen Maße angepasst werden!

Für erworbene Kalibrierplatten wird empfohlen die jeweils mitgelieferte Kalibrierkörperbeschreibungsdatei zu verwenden.

Ausführungsinformationen

Parameter

NumRowsNumRowsNumRowsNumRowsnumRowsnum_rows (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Number of rows.

Defaultwert: 27

Empfohlene Schrittweite: 1

Restriktion: NumRows > 2

MarksPerRowMarksPerRowMarksPerRowMarksPerRowmarksPerRowmarks_per_row (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Number of marks per line.

Defaultwert: 31

Empfohlene Schrittweite: 1

Restriktion: MarksPerRow > 2

DiameterDiameterDiameterDiameterdiameterdiameter (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Durchmesser der Marken.

Defaultwert: 0.00258065

Wertevorschläge: 0.00258065, 0.1, 0.0125, 0.00375, 0.00125

FinderRowFinderRowFinderRowFinderRowfinderRowfinder_row (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeilenindizes der Suchmuster.

Defaultwert: [13,6,6,20,20]

FinderColumnFinderColumnFinderColumnFinderColumnfinderColumnfinder_column (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spaltenindizes der Suchmuster.

Defaultwert: [15,6,24,6,24]

PolarityPolarityPolarityPolaritypolaritypolarity (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Polarität der Marken

Defaultwert: 'light_on_dark' "light_on_dark" "light_on_dark" "light_on_dark" "light_on_dark" "light_on_dark"

Wertevorschläge: 'light_on_dark'"light_on_dark""light_on_dark""light_on_dark""light_on_dark""light_on_dark", 'dark_on_light'"dark_on_light""dark_on_light""dark_on_light""dark_on_light""dark_on_light"

CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr (input_control)  filename.write HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Dateiname der Kalibrierplattenbeschreibung.

Defaultwert: 'calplate.cpd' "calplate.cpd" "calplate.cpd" "calplate.cpd" "calplate.cpd" "calplate.cpd"

Werteliste: 'calplate.cpd'"calplate.cpd""calplate.cpd""calplate.cpd""calplate.cpd""calplate.cpd"

Dateiendung: .cpd

CalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFilecalPlatePSFilecal_plate_psfile (input_control)  filename.write HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Dateiname der PostScript Datei.

Defaultwert: 'calplate.ps' "calplate.ps" "calplate.ps" "calplate.ps" "calplate.ps" "calplate.ps"

Dateiendung: .ps

Beispiel (HDevelop)

* Parameters to create the descriptor for the 160mm wide calibration
* plate.
create_caltab (27, 31, 0.00258065, [13, 6, 6, 20, 20], [15, 6, 24, 6, 24], \
              'light_on_dark', 'calplate.cpd', 'caltab.ps')

Ergebnis

Sind die Parameterwerte korrekt und konnten beide Dateien erfolgreich geschrieben werden, dann liefert create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltabcreate_caltab den Wert TRUE. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

read_cam_parread_cam_parReadCamParReadCamParReadCamParread_cam_par, caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPointscaltab_points

Alternativen

gen_caltabgen_caltabGenCaltabGenCaltabGenCaltabgen_caltab

Siehe auch

find_caltabfind_caltabFindCaltabFindCaltabFindCaltabfind_caltab, find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose, camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibrationcamera_calibration, disp_caltabdisp_caltabDispCaltabDispCaltabDispCaltabdisp_caltab, sim_caltabsim_caltabSimCaltabSimCaltabSimCaltabsim_caltab

Modul

Foundation