caltab_pointsT_caltab_pointsCaltabPointsCaltabPointscaltab_points (Operator)
Name
caltab_pointsT_caltab_pointsCaltabPointsCaltabPointscaltab_points — Lesen der Markenmittelpunkte aus einer Kalibrierkörperbeschreibungsdatei.
Signatur
Herror T_caltab_points(const Htuple CalPlateDescr, Htuple* X, Htuple* Y, Htuple* Z)
void CaltabPoints(const HTuple& CalPlateDescr, HTuple* X, HTuple* Y, HTuple* Z)
static void HMisc::CaltabPoints(const HString& CalPlateDescr, HTuple* X, HTuple* Y, HTuple* Z)
static void HMisc::CaltabPoints(const char* CalPlateDescr, HTuple* X, HTuple* Y, HTuple* Z)
static void HMisc::CaltabPoints(const wchar_t* CalPlateDescr, HTuple* X, HTuple* Y, HTuple* Z)
(Nur Windows)
def caltab_points(cal_plate_descr: str) -> Tuple[Sequence[float], Sequence[float], Sequence[float]]
Beschreibung
caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPointscaltab_points liest die Markenmittelpunkte aus der
Kalibrierkörperbeschreibungsdatei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr (siehe
gen_caltabgen_caltabGenCaltabGenCaltabGenCaltabgen_caltab für Kalibrierplatten mit rechteckiger Markenanordnung und
create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltabcreate_caltab für Kalibrierplatten mit hexagonaler Markenanordnung)
und liefert ihre Koordinaten in XXXXxx, YYYYyy
und ZZZZzz zurück. Die Markenmittelpunkte liegen als 3D-Koordinaten im
Kalibrierkörperkoordinatensystem vor und stellen damit das 3D-Modell des
Kalibrierkörpers dar. Das Kalibrierkörperkoordinatensystem ist für
Kalibrierplatten mit rechteckiger Markenanordnung im Mittelpunkt der
Kalibrierkörperoberfläche platziert. Für Kalibrierplatten mit hexagonaler
Markenanordnung befindet sich der Ursprung in der Mitte der zentralen
Marke des ersten Suchmusters.
Die z-Achse zeigt in den Kalibrierkörper hinein, die x-Achse nach rechts
und die y-Achse nach unten.
Die von caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPointscaltab_points ausgegebenen Markenmittelpunkte dienen
typischerweise als Eingabe-Parameter für den Operator
camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibrationcamera_calibration. Dieser Operator projiziert die Modellpunkte in
das Bild, minimiert die Distanz zwischen den projizierten Modellpunkten und
den im Bild beobachteten 2D-Koordinaten (vgl. find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPosefind_marks_and_pose)
und ermittelt so die genauen Werte für die gesuchten internen und externen
Kameraparameter.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr (input_control) filename.read → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Dateiname der Kalibrierkörperbeschreibungsdatei.
Defaultwert:
'calplate_320mm.cpd'
"calplate_320mm.cpd"
"calplate_320mm.cpd"
"calplate_320mm.cpd"
"calplate_320mm.cpd"
"calplate_320mm.cpd"
Werteliste: 'calplate_10mm.cpd'"calplate_10mm.cpd""calplate_10mm.cpd""calplate_10mm.cpd""calplate_10mm.cpd""calplate_10mm.cpd", 'calplate_1200mm.cpd'"calplate_1200mm.cpd""calplate_1200mm.cpd""calplate_1200mm.cpd""calplate_1200mm.cpd""calplate_1200mm.cpd", 'calplate_160mm.cpd'"calplate_160mm.cpd""calplate_160mm.cpd""calplate_160mm.cpd""calplate_160mm.cpd""calplate_160mm.cpd", 'calplate_20mm.cpd'"calplate_20mm.cpd""calplate_20mm.cpd""calplate_20mm.cpd""calplate_20mm.cpd""calplate_20mm.cpd", 'calplate_20mm_dark_on_light.cpd'"calplate_20mm_dark_on_light.cpd""calplate_20mm_dark_on_light.cpd""calplate_20mm_dark_on_light.cpd""calplate_20mm_dark_on_light.cpd""calplate_20mm_dark_on_light.cpd", 'calplate_320mm.cpd'"calplate_320mm.cpd""calplate_320mm.cpd""calplate_320mm.cpd""calplate_320mm.cpd""calplate_320mm.cpd", 'calplate_40mm.cpd'"calplate_40mm.cpd""calplate_40mm.cpd""calplate_40mm.cpd""calplate_40mm.cpd""calplate_40mm.cpd", 'calplate_40mm_dark_on_light.cpd'"calplate_40mm_dark_on_light.cpd""calplate_40mm_dark_on_light.cpd""calplate_40mm_dark_on_light.cpd""calplate_40mm_dark_on_light.cpd""calplate_40mm_dark_on_light.cpd", 'calplate_5mm.cpd'"calplate_5mm.cpd""calplate_5mm.cpd""calplate_5mm.cpd""calplate_5mm.cpd""calplate_5mm.cpd", 'calplate_640mm.cpd'"calplate_640mm.cpd""calplate_640mm.cpd""calplate_640mm.cpd""calplate_640mm.cpd""calplate_640mm.cpd", 'calplate_80mm.cpd'"calplate_80mm.cpd""calplate_80mm.cpd""calplate_80mm.cpd""calplate_80mm.cpd""calplate_80mm.cpd", 'calplate_80mm_dark_on_light.cpd'"calplate_80mm_dark_on_light.cpd""calplate_80mm_dark_on_light.cpd""calplate_80mm_dark_on_light.cpd""calplate_80mm_dark_on_light.cpd""calplate_80mm_dark_on_light.cpd", 'caltab_100mm.descr'"caltab_100mm.descr""caltab_100mm.descr""caltab_100mm.descr""caltab_100mm.descr""caltab_100mm.descr", 'caltab_10mm.descr'"caltab_10mm.descr""caltab_10mm.descr""caltab_10mm.descr""caltab_10mm.descr""caltab_10mm.descr", 'caltab_200mm.descr'"caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr", 'caltab_2500um.descr'"caltab_2500um.descr""caltab_2500um.descr""caltab_2500um.descr""caltab_2500um.descr""caltab_2500um.descr", 'caltab_30mm.descr'"caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr", 'caltab_650um.descr'"caltab_650um.descr""caltab_650um.descr""caltab_650um.descr""caltab_650um.descr""caltab_650um.descr", 'caltab_6mm.descr'"caltab_6mm.descr""caltab_6mm.descr""caltab_6mm.descr""caltab_6mm.descr""caltab_6mm.descr", 'caltab_800mm.descr'"caltab_800mm.descr""caltab_800mm.descr""caltab_800mm.descr""caltab_800mm.descr""caltab_800mm.descr", 'caltab_big.descr'"caltab_big.descr""caltab_big.descr""caltab_big.descr""caltab_big.descr""caltab_big.descr", 'caltab_small.descr'"caltab_small.descr""caltab_small.descr""caltab_small.descr""caltab_small.descr""caltab_small.descr"
Dateiendung: .cpd, .descr
XXXXxx (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
X-Koordinaten der Markenmittelpunkte im
Koordinatensystem des Kalibrierkörpers.
YYYYyy (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Y-Koordinaten der Markenmittelpunkte im
Koordinatensystem des Kalibrierkörpers.
ZZZZzz (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Z-Koordinaten der Markenmittelpunkte im
Koordinatensystem des Kalibrierkörpers.
Beispiel (HDevelop)
* Read calibration image.
read_image(Image, 'calib/calib-3d-coord-03')
CalTabDescr := 'caltab_100mm.descr'
* Find calibration pattern.
find_caltab(Image, CalPlate1, CalTabDescr, 3, 112, 5)
* Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
384, 288, 768, 576]
find_marks_and_pose(Image,CalPlate1,CalTabDescr, StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
* Read 3D positions of calibration marks.
caltab_points(CalTabDescr, NX, NY, NZ)
* Calibrate camera.
camera_calibration(NX, NY, NZ, RCoord1, CCoord1, StartCamPar, \
StartPose1, 'all', CameraParam, FinalPose, Errors)
* Visualize calibration result.
dev_display(Image)
disp_caltab(WindowHandle, CalTabDescr, CameraParam, FinalPose, 1.0)
Beispiel (HDevelop)
* Read calibration image.
read_image(Image, 'calib/calib-3d-coord-03')
CalTabDescr := 'caltab_100mm.descr'
* Find calibration pattern.
find_caltab(Image, CalPlate1, CalTabDescr, 3, 112, 5)
* Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
384, 288, 768, 576]
find_marks_and_pose(Image,CalPlate1,CalTabDescr, StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
* Read 3D positions of calibration marks.
caltab_points(CalTabDescr, NX, NY, NZ)
* Calibrate camera.
camera_calibration(NX, NY, NZ, RCoord1, CCoord1, StartCamPar, \
StartPose1, 'all', CameraParam, FinalPose, Errors)
* Visualize calibration result.
dev_display(Image)
disp_caltab(WindowHandle, CalTabDescr, CameraParam, FinalPose, 1.0)
Beispiel (C++)
HTuple StartCamPar, NX, NY, NZ;
HTuple RCoord, CCoord, StartPose;
HTuple StartPose, CameraParam, FinalPose, Errors;
// Read calibration image.
HImage Image("calib/calib-3d-coord-03");
// Find calibration pattern.
HRegion CalPlate1 = Image.FindCaltab("caltab_100mm.descr", 3, 112, 5);
// Find calibration marks and start pose.
StartCamPar[8] = 576; // ImageHeight
StartCamPar[7] = 768; // ImageWidth
StartCamPar[6] = 288; // Cy
StartCamPar[5] = 384; // Cx
StartCamPar[4] = 0.000011; // Sy
StartCamPar[3] = 0.000011; // Sx
StartCamPar[2] = 0.0; // Kappa
StartCamPar[1] = 0.008; // Focus
StartCamPar[0] = "area_scan_division"; // CameraType
RCoord = Image.FindMarksAndPose(CalPlate, "caltab_100mm.descr", StartCamPar,
128, 10, &CCoord, &StartPose);
// Read 3D positions of calibration marks.
caltab_points("caltab_100mm.descr", &NX, &NY, &NZ);
// Calibrate camera.
camera_calibration(NX, NY, NZ, RCoord, CCoord, StartCamPar, StartPose,
11, &CameraParam, &FinalPose, &Errors);
// Visualize calibration result.
disp_image(Image, WindowHandle);
disp_caltab(WindowHandle, "caltab_100mm.descr, CameraParam, FinalPose, 1.0);
Beispiel (HDevelop)
* Read calibration image.
read_image(Image, 'calib/calib-3d-coord-03')
CalTabDescr := 'caltab_100mm.descr'
* Find calibration pattern.
find_caltab(Image, CalPlate1, CalTabDescr, 3, 112, 5)
* Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
384, 288, 768, 576]
find_marks_and_pose(Image,CalPlate1,CalTabDescr, StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
* Read 3D positions of calibration marks.
caltab_points(CalTabDescr, NX, NY, NZ)
* Calibrate camera.
camera_calibration(NX, NY, NZ, RCoord1, CCoord1, StartCamPar, \
StartPose1, 'all', CameraParam, FinalPose, Errors)
* Visualize calibration result.
dev_display(Image)
disp_caltab(WindowHandle, CalTabDescr, CameraParam, FinalPose, 1.0)
Beispiel (HDevelop)
* Read calibration image.
read_image(Image, 'calib/calib-3d-coord-03')
CalTabDescr := 'caltab_100mm.descr'
* Find calibration pattern.
find_caltab(Image, CalPlate1, CalTabDescr, 3, 112, 5)
* Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
384, 288, 768, 576]
find_marks_and_pose(Image,CalPlate1,CalTabDescr, StartCamPar, \
128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
StartPose1)
* Read 3D positions of calibration marks.
caltab_points(CalTabDescr, NX, NY, NZ)
* Calibrate camera.
camera_calibration(NX, NY, NZ, RCoord1, CCoord1, StartCamPar, \
StartPose1, 'all', CameraParam, FinalPose, Errors)
* Visualize calibration result.
dev_display(Image)
disp_caltab(WindowHandle, CalTabDescr, CameraParam, FinalPose, 1.0)
Ergebnis
Sind die Parameterwerte korrekt und konnte die Datei
CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescrcal_plate_descr erfolgreich gelesen werden, dann liefert
caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPointscaltab_points den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
Nachfolger
camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibrationcamera_calibration
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,
project_3d_pointproject_3d_pointProject3dPointProject3dPointProject3dPointproject_3d_point,
get_line_of_sightget_line_of_sightGetLineOfSightGetLineOfSightGetLineOfSightget_line_of_sight,
gen_caltabgen_caltabGenCaltabGenCaltabGenCaltabgen_caltab
Modul
Foundation