Name
write_cam_parT_write_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar — Speichern der internen Kameraparameter in eine Textdatei.
write_cam_parwrite_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar dient zum Abspeichern der internen Kameraparameter
CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam in eine Textdatei mit dem Namen CamParFileCamParFileCamParFileCamParFileCamParFilecamParFile.
Die Dateiendung für die Kameraparameter ist in HALCON 'dat'.
Die internen Kameraparameter beschreiben den Abbildungsvorgang der
verwendeten Kombination von Kamera, Objektiv und Framegrabber und werden
durch die Kamerakalibrierung bestimmt, welche mit calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras
oder camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration ausgeführt wird. Die Beschreibung dieser
Operatoren beinhaltet weiterhin ausführlichere Informationen zu den verfügbaren
Kameramodellen.
CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam ist ein Tupel, das die internen Kameraparameter in der
folgenden Reihenfolge enthält:
Für Kameras mit Flächensensor (Divisionsmodell der Objektivverzeichnung):
[Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
Für Kameras mit Flächensensor (Polynomialmodell der Objektivverzeichnung):
[Focus, Poly1, Poly2, Poly3, Poly4, Poly5, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
Für Kameras mit Zeilensensor:
[Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight,
Vx, Vy, Vz]
Das Format der Textdatei CamParFileCamParFileCamParFileCamParFileCamParFilecamParFile ist eine (von HALCON
unabhängige) generische Parameterbeschreibung, die beliebige
Gruppen von Parametern zu hierarchisch organisierten Parametergruppen
(Struktur ParGroup) zusammenfasst. Die Beschreibung eines Parameters
innerhalb einer ParGroup enthält in 3 Zeilen folgende Einträge:
Name : Kurzname : aktueller Wert ;
Typ : Untere Grenze (optional) : Obere Grenze (optional) ;
Beschreibung (optional) ;
In Abhängigkeit von der Anzahl der Elemente in CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam wird
mit dem Operator write_cam_parwrite_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar die Parametergruppe
Camera:Parameter bzw. LinescanCamera:Parameter in die Datei
CamParFileCamParFileCamParFileCamParFileCamParFilecamParFile geschrieben (siehe read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar
für ein Beispiel).
Die Parametergruppe Camera:Parameter enthält die 8 (Divisionsmodell)
oder 12 (Polynomialmodell) internen Kameraparameter für Kameras mit
Flächensensor. Die Parametergruppe LinescanCamera:Parameter enthält
die 11 internen Kameraparameter für Kameras mit Zeilensensor.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Interne Kameraparameter.
Parameteranzahl: CameraParam == 8 || CameraParam == 11 || CameraParam == 12
Dateiname der Kameraparameterdatei.
Defaultwert:
'campar.dat'
"campar.dat"
"campar.dat"
"campar.dat"
"campar.dat"
"campar.dat"
Werteliste: 'campar.dat'"campar.dat""campar.dat""campar.dat""campar.dat""campar.dat", 'campar.final'"campar.final""campar.final""campar.final""campar.final""campar.final", 'campar.initial'"campar.initial""campar.initial""campar.initial""campar.initial""campar.initial"
Dateiendung: .dat
* read calibration images
read_image(Image1, 'calib-01')
read_image(Image2, 'calib-02')
read_image(Image3, 'calib-03')
* find calibration pattern
find_caltab(Image1, Caltab1, 'caltab.descr', 3, 112, 5)
find_caltab(Image2, Caltab2, 'caltab.descr', 3, 112, 5)
find_caltab(Image3, Caltab3, 'caltab.descr', 3, 112, 5)
* find calibration marks and start poses
StartCamPar := [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
StartPose3)
* read 3D positions of calibration marks
caltab_points('caltab.descr', NX, NY, NZ)
* camera calibration
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
[CCoord1, CCoord2, CCoord3], StartCamPar, \
[StartPose1, StartPose2, StartPose3], 'all', \
CameraParam, NFinalPose, Errors)
* write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')
* read calibration images
read_image(Image1, 'calib-01')
read_image(Image2, 'calib-02')
read_image(Image3, 'calib-03')
* find calibration pattern
find_caltab(Image1, Caltab1, 'caltab.descr', 3, 112, 5)
find_caltab(Image2, Caltab2, 'caltab.descr', 3, 112, 5)
find_caltab(Image3, Caltab3, 'caltab.descr', 3, 112, 5)
* find calibration marks and start poses
StartCamPar := [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
StartPose3)
* read 3D positions of calibration marks
caltab_points('caltab.descr', NX, NY, NZ)
* camera calibration
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
[CCoord1, CCoord2, CCoord3], StartCamPar, \
[StartPose1, StartPose2, StartPose3], 'all', \
CameraParam, NFinalPose, Errors)
* write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')
* read calibration images
read_image(Image1, 'calib-01')
read_image(Image2, 'calib-02')
read_image(Image3, 'calib-03')
* find calibration pattern
find_caltab(Image1, Caltab1, 'caltab.descr', 3, 112, 5)
find_caltab(Image2, Caltab2, 'caltab.descr', 3, 112, 5)
find_caltab(Image3, Caltab3, 'caltab.descr', 3, 112, 5)
* find calibration marks and start poses
StartCamPar := [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
StartPose3)
* read 3D positions of calibration marks
caltab_points('caltab.descr', NX, NY, NZ)
* camera calibration
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
[CCoord1, CCoord2, CCoord3], StartCamPar, \
[StartPose1, StartPose2, StartPose3], 'all', \
CameraParam, NFinalPose, Errors)
* write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')
HTuple StartCamPar, NX, NY, NZ;
HTuple RCoord1, CCoord1, StartPose1;
HTuple RCoord2, CCoord2, StartPose2;
HTuple RCoord3, CCoord3, StartPose3;
HTuple StartPoses, RCoords, CCoords;
HTuple CameraParam, NFinalPose, Errors;
// read calibration images
HImage Image1("calib-01");
HImage Image2("calib-02");
HImage Image3("calib-03");
// find calibration pattern
HRegion Caltab1 = Image1.FindCaltab("caltab.descr", 3, 112, 5);
HRegion Caltab2 = Image2.FindCaltab("caltab.descr", 3, 112, 5);
HRegion Caltab3 = Image3.FindCaltab("caltab.descr", 3, 112, 5);
// find calibration marks and start poses
StartCamPar[7] = 576; // ImageHeight
StartCamPar[6] = 768; // ImageWidth
StartCamPar[5] = 288; // Cy
StartCamPar[4] = 384; // Cx
StartCamPar[3] = 0.000011; // Sy
StartCamPar[2] = 0.000011; // Sx
StartCamPar[1] = 0.0; // Kappa
StartCamPar[0] = 0.008; // Focus
RCoord1 = Image1.FindMarksAndPose(Caltab1, "caltab.descr",StartCamPar,
128,10, &CCoord1, &StartPose1);
RCoord2 = Image2.FindMarksAndPose(Caltab2, "caltab.descr", StartCamPar,
128,10, &CCoord2, &StartPose2);
RCoord3 = Image3.FindMarksAndPose(Caltab3, "caltab.descr", StartCamPar,
128,10, &CCoord3, &StartPose3);
// read 3D positions of calibration marks
caltab_points("caltab.descr", &NX, &NY, &NZ);
// camera calibration
StartPoses = (StartPose1.Append(StartPose2)).Append(StartPose3);
RCoords = (RCoord1.Append(RCoord2)).Append(RCoord3);
CCoords = (CCoord1.Append(CCoord2)).Append(CCoord3);
camera_calibration(NX, NY, NZ, RCoords, CCoords, StartCamPar, StartPoses,
11, &CameraParam, &NFinalPose, &Errors);
// write internal camera parameters to file
write_cam_par(CameraParam, "campar.dat");
* read calibration images
read_image(Image1, 'calib-01')
read_image(Image2, 'calib-02')
read_image(Image3, 'calib-03')
* find calibration pattern
find_caltab(Image1, Caltab1, 'caltab.descr', 3, 112, 5)
find_caltab(Image2, Caltab2, 'caltab.descr', 3, 112, 5)
find_caltab(Image3, Caltab3, 'caltab.descr', 3, 112, 5)
* find calibration marks and start poses
StartCamPar := [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
StartPose3)
* read 3D positions of calibration marks
caltab_points('caltab.descr', NX, NY, NZ)
* camera calibration
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
[CCoord1, CCoord2, CCoord3], StartCamPar, \
[StartPose1, StartPose2, StartPose3], 'all', \
CameraParam, NFinalPose, Errors)
* write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')
* read calibration images
read_image(Image1, 'calib-01')
read_image(Image2, 'calib-02')
read_image(Image3, 'calib-03')
* find calibration pattern
find_caltab(Image1, Caltab1, 'caltab.descr', 3, 112, 5)
find_caltab(Image2, Caltab2, 'caltab.descr', 3, 112, 5)
find_caltab(Image3, Caltab3, 'caltab.descr', 3, 112, 5)
* find calibration marks and start poses
StartCamPar := [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
StartPose3)
* read 3D positions of calibration marks
caltab_points('caltab.descr', NX, NY, NZ)
* camera calibration
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
[CCoord1, CCoord2, CCoord3], StartCamPar, \
[StartPose1, StartPose2, StartPose3], 'all', \
CameraParam, NFinalPose, Errors)
* write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')
Sind die Parameterwerte korrekt und konnte die Datei erfolgreich
geschrieben werden, dann liefert write_cam_parwrite_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration
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,
read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar,
write_posewrite_poseWritePosewrite_poseWritePoseWritePose,
read_poseread_poseReadPoseread_poseReadPoseReadPose,
project_3d_pointproject_3d_pointProject3dPointproject_3d_pointProject3dPointProject3dPoint,
get_line_of_sightget_line_of_sightGetLineOfSightget_line_of_sightGetLineOfSightGetLineOfSight
Foundation