KlassenKlassenKlassenKlassen | | | | Operatoren

create_caltabcreate_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab (Operator)

Name

create_caltabcreate_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab — 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)

Herror 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)

void HOperatorSetX.CreateCaltab(
[in] VARIANT NumRows, [in] VARIANT MarksPerRow, [in] VARIANT Diameter, [in] VARIANT FinderRow, [in] VARIANT FinderColumn, [in] VARIANT Polarity, [in] VARIANT CalPlateDescr, [in] VARIANT CalPlatePSFile)

void HMiscX.CreateCaltab(
[in] Hlong NumRows, [in] Hlong MarksPerRow, [in] double Diameter, [in] VARIANT FinderRow, [in] VARIANT FinderColumn, [in] BSTR Polarity, [in] BSTR CalPlateDescr, [in] BSTR CalPlatePSFile)

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)

Beschreibung

create_caltabcreate_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab erzeugt die Kalibrierkörperbeschreibungsdatei eines Standardkalibrierkörpers für HALCON mit hexagonaler Markenanordnung. Dieser Kalibrierkörper besteht aus NumRowsNumRowsNumRowsNumRowsNumRowsnumRows mal MarksPerRowMarksPerRowMarksPerRowMarksPerRowMarksPerRowmarksPerRow 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_objectFindCalibObjectfind_calib_objectFindCalibObjectFindCalibObject gefunden werden kann. Die Position der zentralen Marken der Suchmuster werden in FinderRowFinderRowFinderRowFinderRowFinderRowfinderRow und FinderColumnFinderColumnFinderColumnFinderColumnFinderColumnfinderColumn 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. 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.

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

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 CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr 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_objectSetCalibDataCalibObjectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObject oder sim_caltabsim_caltabSimCaltabsim_caltabSimCaltabSimCaltab). 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_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab erzeugt wurde, sieht z.B. folgendermaßen aus (Kommentare sind durch ein '#' am Anfang der Zeile markiert):

# Plate Description Version 3
# HALCON Version 12.0 --  Tue Aug 12 15:40:14 2014
# 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.167742, 0.125846
# 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 CalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFilecalPlatePSFile 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 CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr überein. Es müssen daher ggf. die Koordinaten der Kalibrierkörpermarken in der Kalibrierkörperbeschreibungsdatei an die realen Maße angepasst werden!

Parallelisierung

Parameter

NumRowsNumRowsNumRowsNumRowsNumRowsnumRows (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Number of rows.

Defaultwert: 27

Empfohlene Schrittweite: 1

Restriktion: NumRows > 2

MarksPerRowMarksPerRowMarksPerRowMarksPerRowMarksPerRowmarksPerRow (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Number of marks per line.

Defaultwert: 31

Empfohlene Schrittweite: 1

Restriktion: MarksPerRow > 2

DiameterDiameterDiameterDiameterDiameterdiameter (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Durchmesser der Marken.

Defaultwert: 0.00258065

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

FinderRowFinderRowFinderRowFinderRowFinderRowfinderRow (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Zeilenindizes der Suchmuster.

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

FinderColumnFinderColumnFinderColumnFinderColumnFinderColumnfinderColumn (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Spaltenindizes der Suchmuster.

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

PolarityPolarityPolarityPolarityPolaritypolarity (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (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"

CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr (input_control)  filename.write HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (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

CalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFileCalPlatePSFilecalPlatePSFile (input_control)  filename.write HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (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_caltabCreateCaltabcreate_caltabCreateCaltabCreateCaltab den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar, caltab_pointscaltab_pointsCaltabPointscaltab_pointsCaltabPointsCaltabPoints

Alternativen

gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab

Siehe auch

find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab, find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration, disp_caltabdisp_caltabDispCaltabdisp_caltabDispCaltabDispCaltab, sim_caltabsim_caltabSimCaltabsim_caltabSimCaltabSimCaltab

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren