KlassenKlassenKlassenKlassen | | | | Operatoren

write_cam_parT_write_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar (Operator)

Name

write_cam_parT_write_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar — Speichern der internen Kameraparameter in eine Textdatei.

Signatur

write_cam_par( : : CameraParam, CamParFile : )

Herror T_write_cam_par(const Htuple CameraParam, const Htuple CamParFile)

Herror write_cam_par(const HTuple& CameraParam, const HTuple& CamParFile)

void WriteCamPar(const HTuple& CameraParam, const HTuple& CamParFile)

static void HMisc::WriteCamPar(const HTuple& CameraParam, const HString& CamParFile)

static void HMisc::WriteCamPar(const HTuple& CameraParam, const char* CamParFile)

void HOperatorSetX.WriteCamPar(
[in] VARIANT CameraParam, [in] VARIANT CamParFile)

void HMiscX.WriteCamPar(
[in] VARIANT CameraParam, [in] BSTR CamParFile)

static void HOperatorSet.WriteCamPar(HTuple cameraParam, HTuple camParFile)

static void HMisc.WriteCamPar(HTuple cameraParam, string camParFile)

Beschreibung

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.

Parallelisierung

Parameter

CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Interne Kameraparameter.

Parameteranzahl: CameraParam == 8 || CameraParam == 11 || CameraParam == 12

CamParFileCamParFileCamParFileCamParFileCamParFilecamParFile (input_control)  filename.write HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

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

Beispiel (HDevelop)

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

Beispiel (HDevelop)

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

Beispiel (HDevelop)

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

Beispiel (C++ (HALCON 5.0-10.0))

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");

Beispiel (HDevelop)

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

Beispiel (HDevelop)

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

Ergebnis

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.

Vorgänger

camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration

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, 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

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren