Name
binocular_calibrationT_binocular_calibrationBinocularCalibrationBinocularCalibration — Bestimmung aller Kameraparameter eines binokularen Stereoaufbaus.
binocular_calibration( : : NX, NY, NZ, NRow1, NCol1, NRow2, NCol2, StartCamParam1, StartCamParam2, NStartPose1, NStartPose2, EstimateParams : CamParam1, CamParam2, NFinalPose1, NFinalPose2, RelPose, Errors)
Herror T_binocular_calibration(const Htuple NX, const Htuple NY, const Htuple NZ, const Htuple NRow1, const Htuple NCol1, const Htuple NRow2, const Htuple NCol2, const Htuple StartCamParam1, const Htuple StartCamParam2, const Htuple NStartPose1, const Htuple NStartPose2, const Htuple EstimateParams, Htuple* CamParam1, Htuple* CamParam2, Htuple* NFinalPose1, Htuple* NFinalPose2, Htuple* RelPose, Htuple* Errors)
void BinocularCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow1, const HTuple& NCol1, const HTuple& NRow2, const HTuple& NCol2, const HTuple& StartCamParam1, const HTuple& StartCamParam2, const HTuple& NStartPose1, const HTuple& NStartPose2, const HTuple& EstimateParams, HTuple* CamParam1, HTuple* CamParam2, HTuple* NFinalPose1, HTuple* NFinalPose2, HTuple* RelPose, HTuple* Errors)
HCamPar HCamPar::BinocularCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow1, const HTuple& NCol1, const HTuple& NRow2, const HTuple& NCol2, const HCamPar& StartCamParam2, const HPoseArray& NStartPose1, const HPoseArray& NStartPose2, const HTuple& EstimateParams, HCamPar* CamParam2, HPoseArray* NFinalPose1, HPoseArray* NFinalPose2, HPose* RelPose, HTuple* Errors) const
HCamPar HCamPar::BinocularCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow1, const HTuple& NCol1, const HTuple& NRow2, const HTuple& NCol2, const HCamPar& StartCamParam2, const HPose& NStartPose1, const HPose& NStartPose2, const HTuple& EstimateParams, HCamPar* CamParam2, HPose* NFinalPose1, HPose* NFinalPose2, HPose* RelPose, double* Errors) const
static HCamPar HPose::BinocularCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow1, const HTuple& NCol1, const HTuple& NRow2, const HTuple& NCol2, const HCamPar& StartCamParam1, const HCamPar& StartCamParam2, const HPoseArray& NStartPose1, const HPoseArray& NStartPose2, const HTuple& EstimateParams, HCamPar* CamParam2, HPoseArray* NFinalPose1, HPoseArray* NFinalPose2, HPose* RelPose, HTuple* Errors)
HCamPar HPose::BinocularCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow1, const HTuple& NCol1, const HTuple& NRow2, const HTuple& NCol2, const HCamPar& StartCamParam1, const HCamPar& StartCamParam2, const HPose& NStartPose2, const HTuple& EstimateParams, HCamPar* CamParam2, HPose* NFinalPose1, HPose* NFinalPose2, HPose* RelPose, double* Errors) const
static void HOperatorSet.BinocularCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow1, HTuple NCol1, HTuple NRow2, HTuple NCol2, HTuple startCamParam1, HTuple startCamParam2, HTuple NStartPose1, HTuple NStartPose2, HTuple estimateParams, out HTuple camParam1, out HTuple camParam2, out HTuple NFinalPose1, out HTuple NFinalPose2, out HTuple relPose, out HTuple errors)
HCamPar HCamPar.BinocularCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow1, HTuple NCol1, HTuple NRow2, HTuple NCol2, HCamPar startCamParam2, HPose[] NStartPose1, HPose[] NStartPose2, HTuple estimateParams, out HCamPar camParam2, out HPose[] NFinalPose1, out HPose[] NFinalPose2, out HPose relPose, out HTuple errors)
HCamPar HCamPar.BinocularCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow1, HTuple NCol1, HTuple NRow2, HTuple NCol2, HCamPar startCamParam2, HPose NStartPose1, HPose NStartPose2, HTuple estimateParams, out HCamPar camParam2, out HPose NFinalPose1, out HPose NFinalPose2, out HPose relPose, out double errors)
static HCamPar HPose.BinocularCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow1, HTuple NCol1, HTuple NRow2, HTuple NCol2, HCamPar startCamParam1, HCamPar startCamParam2, HPose[] NStartPose1, HPose[] NStartPose2, HTuple estimateParams, out HCamPar camParam2, out HPose[] NFinalPose1, out HPose[] NFinalPose2, out HPose relPose, out HTuple errors)
HCamPar HPose.BinocularCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow1, HTuple NCol1, HTuple NRow2, HTuple NCol2, HCamPar startCamParam1, HCamPar startCamParam2, HPose NStartPose2, HTuple estimateParams, out HCamPar camParam2, out HPose NFinalPose1, out HPose NFinalPose2, out HPose relPose, out double errors)
Im Allgemeinen bedeutet binokulare Kalibrierung die exakte
Bestimmung der Parameter, welche die 3D Rekonstruktion eines 3D
Punktes von den korrespondierenden Abbildungen dieses Punktes in
einem binokularen Stereo System modellieren. Diese Rekonstruktion
wird durch die internen Parameter CamParam1CamParam1CamParam1CamParam1camParam1 von Kamera 1
und CamParam2CamParam2CamParam2CamParam2camParam2 von Kamera 2 bestimmt, welche das zugrunde
liegende Kameramodell beschreiben, und von den externen
Parametern RelPoseRelPoseRelPoseRelPoserelPose, welche die relative Lage des
Kamerasystems 2 im Kamerasystem 1 beschreiben.
Die bekannten 3D Modellpunkte (mit den Koordinaten NXNXNXNXNX,
NYNYNYNYNY, NZNZNZNZNZ) werden in die Bildebene der beiden Kameras
(Kamera 1 und Kamera 2) projiziert. Die Summe der quadrierten
Abstände zwischen diesen Projektionen und den korrespondierenden
Bildpunkten (mit den Koordinaten NRow1NRow1NRow1NRow1NRow1, NCol1NCol1NCol1NCol1NCol1 für
Kamera 1 und NRow2NRow2NRow2NRow2NRow2, NCol2NCol2NCol2NCol2NCol2 für Kamera 2) wird
daraufhin minimiert. Es muss darauf geachtet werden, dass alle
Modellpunkte in beiden Bildern sichtbar sein müssen. Das zugrunde
liegende Kameramodell wird in der Beschreibung des
calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras Operators erläutert. Das Kameramodell
wird durch 9 bis 16 Parameter (für jede Kamera separat) beschrieben
(siehe calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras). Die initialen Werte dieser
internen Parameter werden in StartCamParam1StartCamParam1StartCamParam1StartCamParam1startCamParam1 für Kamera 1
und StartCamParam2StartCamParam2StartCamParam2StartCamParam2startCamParam2 für Kamera 2 übergeben. Als
Näherungswert kann man diese den Datenblättern der Kameras
entnehmen. Zusätzlich werden die initialen Näherungswerte
NStartPose1NStartPose1NStartPose1NStartPose1NStartPose1 und NStartPose2NStartPose2NStartPose2NStartPose2NStartPose2 für die einzelnen
Lagen des 3D Kalibriermodells bezüglich des jeweiligen
Kamerakoordinatensystems (CCS) von Kamera 1 und Kamera 2 benötigt.
Diese Lagen kann man durch den Operator find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose
erhalten. Da der Kalibrieralgorithmus gleichzeitig Korrespondenzen
zwischen gemessenen Bild- und bekannten Modellpunkten aus mehreren
Bildpaaren behandeln kann, müssen die Lagen (NStartPose1NStartPose1NStartPose1NStartPose1NStartPose1,
NStartPose2NStartPose2NStartPose2NStartPose2NStartPose2) und die gemessenen Punkte (NRow1NRow1NRow1NRow1NRow1,
NCol1NCol1NCol1NCol1NCol1, NRow2NRow2NRow2NRow2NRow2, NCol2NCol2NCol2NCol2NCol2) in einer zu den
Bildern korrespondierenden Reihenfolge übergeben werden.
Der Eingabeparameter EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams legt die zu
berechnenden Kameraparameter fest. Üblicherweise wird dieser
Parameter auf 'all'"all""all""all""all" gesetzt, d.h. alle externen
(Translationen und Rotationen) und alle internen Kameraparameter
werden bestimmt.
Falls z.B. die internen Parameter schon bestimmt worden
sind (z.B. durch einen früheren Aufrufen von
binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration), ist es oftmals interessant,
lediglich die 3D-Lage der Kamerasysteme zueinander zu bestimmen
(RelPoseRelPoseRelPoseRelPoserelPose). In diesem Fall kann in EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams
der Wert 'pose_rel'"pose_rel""pose_rel""pose_rel""pose_rel" übergeben werden.
Auch die internen Kameraparameter lassen sich mit den Werten
'cam_param1'"cam_param1""cam_param1""cam_param1""cam_param1" bzw. 'cam_param2'"cam_param2""cam_param2""cam_param2""cam_param2" zusammenfassen.
Andernfalls enthält EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams ein Tuple von
Stringwerten, welche die zu schätzenden Kameraparameter festlegen.
Wenn das Polynommodell für die Modellierung der Verzeichnungen
verwendet wird, ist zu beachten, dass nur die Werte 'k1_i'"k1_i""k1_i""k1_i""k1_i",
'k2_i'"k2_i""k2_i""k2_i""k2_i" und 'k3_i'"k3_i""k3_i""k3_i""k3_i" einzeln
in EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams gesetzt werden können.
'p1'"p1""p1""p1""p1" und 'p2'"p2""p2""p2""p2" kann nur in der Gruppe 'poly_tan_2_i'"poly_tan_2_i""poly_tan_2_i""poly_tan_2_i""poly_tan_2_i"
gesetzt werden (wobei 'i'"i""i""i""i" für den Index der Kamera steht).
'poly_i'"poly_i""poly_i""poly_i""poly_i" bezeichnet die Gruppe 'k1_i'"k1_i""k1_i""k1_i""k1_i",
'k2_i'"k2_i""k2_i""k2_i""k2_i", 'k3_i'"k3_i""k3_i""k3_i""k3_i" und 'poly_tan_2_i'"poly_tan_2_i""poly_tan_2_i""poly_tan_2_i""poly_tan_2_i".
In der folgenden Liste sind alle möglichen Parameter für
EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams zu finden:
|
Mögliche Parameter für EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams |
Ermittelte Parameter |
|
'all' (default) |
Alle internen Kameraparameter,
sowie die relative Pose der Kameras und die Posen der Kalibrierobjekte. |
|
'pose' |
Relative Pose zwischen beiden Kameras, sowie die Posen
der Kalibrierobjekte. |
|
'pose_rel' |
Relative Pose zwischen beiden Kameras. |
|
'alpha_rel', 'beta_rel', 'gamma_rel', 'transx_rel', 'transy_rel',
'transz_rel' |
Rotationswinkel und Translation der relativen Pose zwischen beiden
Kameras.. |
|
'pose_caltabs' |
Posen der Kalibrierobjekte. |
|
'alpha_caltabs', 'beta_caltabs', 'gamma_caltabs', 'transx_caltabs',
'transy_caltabs', 'transz_caltabs' |
Rotationswinkel und Translation der Posen
der Kalibrierobjekte. |
|
'cam_param1', 'cam_param2' |
Alle internen Kameraparameter von Kamera 1
bzw. Kamera 2. |
|
'focus1', 'magnification1', 'kappa1', 'poly_1', 'k1_1', 'k2_1', 'k3_1',
'poly_tan_2_1', 'image_plane_dist1', 'tilt1', 'cx1', 'cy1', 'sx1',
'sy1',
'focus2', 'magnification2', 'kappa2', 'poly_2', 'k1_2', 'k2_2', 'k3_2',
'poly_tan_2_2', 'image_plane_dist2', 'tilt2', 'cx2', 'cy2', 'sx2',
'sy2' |
Einzelne interne Kameraparameter von Kamera 1
bzw. Kamera 2.
|
Es ist auch möglich, Parameter, die nicht geschätzt werden sollen,
über ein vorgesetztes '~' Zeichen im String
auszuschließen. Die Werte
['pose_rel','~transx_rel']["pose_rel","~transx_rel"]["pose_rel","~transx_rel"]["pose_rel","~transx_rel"]["pose_rel","~transx_rel"] beispielsweise haben denselben Effekt wie
['alpha_rel','beta_rel','gamma_rel','transy_rel','transz_rel']["alpha_rel","beta_rel","gamma_rel","transy_rel","transz_rel"]["alpha_rel","beta_rel","gamma_rel","transy_rel","transz_rel"]["alpha_rel","beta_rel","gamma_rel","transy_rel","transz_rel"]["alpha_rel","beta_rel","gamma_rel","transy_rel","transz_rel"].
['all','~focus1']["all","~focus1"]["all","~focus1"]["all","~focus1"]["all","~focus1"]
dagegen schätzt alle internen und externen Parameter bis auf die
Brennweite von Kamera1. Das '~' Präfix kann mit
Ausnahme von 'all' jedem Parameterwert vorangestellt werden.
Die geschätzeten Kameraparameter werden in CamParam1CamParam1CamParam1CamParam1camParam1 für
Kamera 1 und CamParam2CamParam2CamParam2CamParam2camParam2 für Kamera 2 zurückgegeben. Die
externen Parameter werden in RelPoseRelPoseRelPoseRelPoserelPose zurückgegeben und
legen die 3D Transformation von Punkten von CCS 2 nach CCS 1 fest.
Gemäß der Festlegung von Lagen in der Beschreibung des Operators
create_posecreate_poseCreatePoseCreatePoseCreatePose wird ein Parameter an der letzten Position des
obigen Tupels angehängt um den Typ der Lagebeschreibung festzulegen.
Analog zu camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibration wird die 3D Transformation des
Kalibriermodells zum jeweiligen CCS in NFinalPose1NFinalPose1NFinalPose1NFinalPose1NFinalPose1 und
NFinalPose2NFinalPose2NFinalPose2NFinalPose2NFinalPose2 zurückgegeben. Diese Transformationen hängen
mit RelPoseRelPoseRelPoseRelPoserelPose gemäß der folgenden Gleichung zusammen (unter
Vernachlässigung der Effekte durch die Ausgleichsrechung der
Mehr-Bild-Kalibrierung):
HomMat3D_NFinalPose2 = INV(HomMat3D_RelPose) * HomMat3D_NFinalPose1 ,
wobei HomMat3D_* die homogene Transformationsmatrix der
entsprechenden Lage beschreibt und INV() eine homogene Matrix
invertiert.
Die errechneten mittleren Fehler für jede Kamera, welche in
ErrorsErrorsErrorsErrorserrors zurückgegeben werden, vermitteln einen Eindruck von
der Genauigkeit der Kalibrierung. Er beschreibt einen mittleren
euklidischen Abstand der mit den ermittelten Parametern ins Bild
projezierten Mittelpunkte der Modellmarken von ihren Abbildungen.
Bei der Verwendung von Kameras mit telezentrischen Objektiven müssen
zusätzliche Voraussetzungen für den Kalibrieraufbau gelten. Diese
können in der Dokumentation von calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras
nachgelesen werden.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
NXNXNXNXNX (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Geordnetes Tupel mit allen X-Koordinaten
der Kalibriermarken (in Meter).
NYNYNYNYNY (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Geordnetes Tupel mit allen Y-Koordinaten
der Kalibriermarken (in Meter).
Parameteranzahl: NY == NX
NZNZNZNZNZ (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Geordnetes Tupel mit allen Z-Koordinaten
der Kalibriermarken (in Meter).
Parameteranzahl: NZ == NX
Geordnetes Tupel mit allen Zeilen-Koordinaten
der extrahierten Kalibriermarken von Kamera 1
(in Pixel).
Geordnetes Tupel mit allen Spalten-Koordinaten
der extrahierten Kalibriermarken von Kamera 1
(in Pixel).
Parameteranzahl: NCol1 == NRow1
Geordnetes Tupel mit allen Zeilen-Koordinaten
der extrahierten Kalibriermarken von Kamera 2
(in Pixel).
Parameteranzahl: NRow2 == NRow1
Geordnetes Tupel mit allen Spalten-Koordinaten
der extrahierten Kalibriermarken von Kamera 2
(in Pixel).
Parameteranzahl: NCol2 == NRow1
Startwerte für die internen Parameter der Kamera 1.
Startwerte für die internen Parameter der Kamera 2.
Geordnetes Tupel mit allen Startwerten der
externen Parameter von Kamera 1.
Parameteranzahl: NStartPose1 == 7 * NRow1 / NX
Geordnetes Tupel mit allen Startwerten der
externen Parameter von Kamera 2.
Parameteranzahl: NStartPose2 == 7 * NRow1 / NX
Zu schätzenden Kameraparameter.
Defaultwert:
'all'
"all"
"all"
"all"
"all"
Werteliste: 'all'"all""all""all""all", 'alpha_caltabs'"alpha_caltabs""alpha_caltabs""alpha_caltabs""alpha_caltabs", 'alpha_rel'"alpha_rel""alpha_rel""alpha_rel""alpha_rel", 'beta_caltabs'"beta_caltabs""beta_caltabs""beta_caltabs""beta_caltabs", 'beta_rel'"beta_rel""beta_rel""beta_rel""beta_rel", 'cam_param1'"cam_param1""cam_param1""cam_param1""cam_param1", 'cam_param2'"cam_param2""cam_param2""cam_param2""cam_param2", 'cx1'"cx1""cx1""cx1""cx1", 'cx2'"cx2""cx2""cx2""cx2", 'cy1'"cy1""cy1""cy1""cy1", 'cy2'"cy2""cy2""cy2""cy2", 'focus1'"focus1""focus1""focus1""focus1", 'focus2'"focus2""focus2""focus2""focus2", 'gamma_caltabs'"gamma_caltabs""gamma_caltabs""gamma_caltabs""gamma_caltabs", 'gamma_rel'"gamma_rel""gamma_rel""gamma_rel""gamma_rel", 'image_plane_dist1'"image_plane_dist1""image_plane_dist1""image_plane_dist1""image_plane_dist1", 'image_plane_dist2'"image_plane_dist2""image_plane_dist2""image_plane_dist2""image_plane_dist2", 'k1_1'"k1_1""k1_1""k1_1""k1_1", 'k1_2'"k1_2""k1_2""k1_2""k1_2", 'k2_1'"k2_1""k2_1""k2_1""k2_1", 'k2_2'"k2_2""k2_2""k2_2""k2_2", 'k3_1'"k3_1""k3_1""k3_1""k3_1", 'k3_2'"k3_2""k3_2""k3_2""k3_2", 'kappa1'"kappa1""kappa1""kappa1""kappa1", 'kappa2'"kappa2""kappa2""kappa2""kappa2", 'magnification1'"magnification1""magnification1""magnification1""magnification1", 'magnification2'"magnification2""magnification2""magnification2""magnification2", 'poly_1'"poly_1""poly_1""poly_1""poly_1", 'poly_2'"poly_2""poly_2""poly_2""poly_2", 'poly_tan_2_1'"poly_tan_2_1""poly_tan_2_1""poly_tan_2_1""poly_tan_2_1", 'poly_tan_2_2'"poly_tan_2_2""poly_tan_2_2""poly_tan_2_2""poly_tan_2_2", 'pose'"pose""pose""pose""pose", 'pose_caltabs'"pose_caltabs""pose_caltabs""pose_caltabs""pose_caltabs", 'pose_rel'"pose_rel""pose_rel""pose_rel""pose_rel", 'sx1'"sx1""sx1""sx1""sx1", 'sx2'"sx2""sx2""sx2""sx2", 'sy1'"sy1""sy1""sy1""sy1", 'sy2'"sy2""sy2""sy2""sy2", 'tilt1'"tilt1""tilt1""tilt1""tilt1", 'tilt2'"tilt2""tilt2""tilt2""tilt2", 'transx_caltabs'"transx_caltabs""transx_caltabs""transx_caltabs""transx_caltabs", 'transx_rel'"transx_rel""transx_rel""transx_rel""transx_rel", 'transy_caltabs'"transy_caltabs""transy_caltabs""transy_caltabs""transy_caltabs", 'transy_rel'"transy_rel""transy_rel""transy_rel""transy_rel", 'transz_caltabs'"transz_caltabs""transz_caltabs""transz_caltabs""transz_caltabs", 'transz_rel'"transz_rel""transz_rel""transz_rel""transz_rel"
Interne Parameter der Kamera 1.
Interne Parameter der Kamera 2.
Geordnetes Tupel mit allen externen Parametern
von Kamera 1.
Parameteranzahl: NFinalPose1 == 7 * NRow1 / NX
Geordnetes Tupel mit allen externen Parametern
von Kamera 2.
Parameteranzahl: NFinalPose2 == 7 * NRow1 / NX
Lage von Kamera 2 bezüglich Kamera 1.
Durchschnittlicher Fehler in Pixel.
* Open image source.
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_l.seq', 'default', 0, -1, AcqHandle1)
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_r.seq', 'default', 1, -1, AcqHandle2)
* Initialize the start parameters.
caltab_points ('caltab_30mm.descr', X, Y, Z)
StartCamParam1 := ['area_scan_division', 0.0125, 0, 7.4e-6, 7.4e-6, \
Width/2.0, Height/2.0, Width, Height]
StartCamParam2 := StartCamParam1
Rows1 := []
Cols1 := []
StartPoses1 := []
Rows2 := []
Cols2 := []
StartPoses2 := []
* Find calibration marks and startposes.
for i := 0 to 11 by 1
grab_image_async (Image1, AcqHandle1, -1)
grab_image_async (Image2, AcqHandle2, -1)
find_caltab (Image1, CalPlate1, 'caltab_30mm.descr', 3, 120, 5)
find_caltab (Image2, CalPlate2, 'caltab_30mm.descr', 3, 120, 5)
find_marks_and_pose (Image1, CalPlate1, 'caltab_30mm.descr', \
StartCamParam1, 128, 10, 20, 0.7, 5, 100, \
RCoord1, CCoord1, StartPose1)
Rows1 := [Rows1,RCoord1]
Cols1 := [Cols1,CCoord1]
StartPoses1 := [StartPoses1,StartPose1]
find_marks_and_pose (Image2, CalPlate2, 'caltab_30mm.descr', \
StartCamParam2, 128, 10, 20, 0.7, 5, 100, \
RCoord2, CCoord2, StartPose2)
Rows2 := [Rows2,RCoord2]
Cols2 := [Cols2,CCoord2]
StartPoses2 := [StartPoses2,StartPose2]
endfor
* Calibrate the stereo rig.
binocular_calibration (X, Y, Z, Rows1, Cols1, Rows2, Cols2, StartCamParam1, \
StartCamParam2, StartPoses1, StartPoses2, 'all', \
CamParam1, CamParam2, NFinalPose1, NFinalPose2, \
RelPose, Errors)
* Archive the results.
write_cam_par (CamParam1, 'cam_left-125.dat')
write_cam_par (CamParam2, 'cam_right-125.dat')
write_pose (RelPose, 'rel_pose.dat')
* Rectify the stereo images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
RelPose, 1, 'geometric', 'bilinear', \
CamParamRect1, CamParamRect2, \
CamPoseRect1, CamPoseRect2, \
RelPoseRect)
map_image (Image1, Map1, ImageMapped1)
map_image (Image2, Map2, ImageMapped2)
* Open image source.
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_l.seq', 'default', 0, -1, AcqHandle1)
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_r.seq', 'default', 1, -1, AcqHandle2)
* Initialize the start parameters.
caltab_points ('caltab_30mm.descr', X, Y, Z)
StartCamParam1 := ['area_scan_division', 0.0125, 0, 7.4e-6, 7.4e-6, \
Width/2.0, Height/2.0, Width, Height]
StartCamParam2 := StartCamParam1
Rows1 := []
Cols1 := []
StartPoses1 := []
Rows2 := []
Cols2 := []
StartPoses2 := []
* Find calibration marks and startposes.
for i := 0 to 11 by 1
grab_image_async (Image1, AcqHandle1, -1)
grab_image_async (Image2, AcqHandle2, -1)
find_caltab (Image1, CalPlate1, 'caltab_30mm.descr', 3, 120, 5)
find_caltab (Image2, CalPlate2, 'caltab_30mm.descr', 3, 120, 5)
find_marks_and_pose (Image1, CalPlate1, 'caltab_30mm.descr', \
StartCamParam1, 128, 10, 20, 0.7, 5, 100, \
RCoord1, CCoord1, StartPose1)
Rows1 := [Rows1,RCoord1]
Cols1 := [Cols1,CCoord1]
StartPoses1 := [StartPoses1,StartPose1]
find_marks_and_pose (Image2, CalPlate2, 'caltab_30mm.descr', \
StartCamParam2, 128, 10, 20, 0.7, 5, 100, \
RCoord2, CCoord2, StartPose2)
Rows2 := [Rows2,RCoord2]
Cols2 := [Cols2,CCoord2]
StartPoses2 := [StartPoses2,StartPose2]
endfor
* Calibrate the stereo rig.
binocular_calibration (X, Y, Z, Rows1, Cols1, Rows2, Cols2, StartCamParam1, \
StartCamParam2, StartPoses1, StartPoses2, 'all', \
CamParam1, CamParam2, NFinalPose1, NFinalPose2, \
RelPose, Errors)
* Archive the results.
write_cam_par (CamParam1, 'cam_left-125.dat')
write_cam_par (CamParam2, 'cam_right-125.dat')
write_pose (RelPose, 'rel_pose.dat')
* Rectify the stereo images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
RelPose, 1, 'geometric', 'bilinear', \
CamParamRect1, CamParamRect2, \
CamPoseRect1, CamPoseRect2, \
RelPoseRect)
map_image (Image1, Map1, ImageMapped1)
map_image (Image2, Map2, ImageMapped2)
* Open image source.
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_l.seq', 'default', 0, -1, AcqHandle1)
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_r.seq', 'default', 1, -1, AcqHandle2)
* Initialize the start parameters.
caltab_points ('caltab_30mm.descr', X, Y, Z)
StartCamParam1 := ['area_scan_division', 0.0125, 0, 7.4e-6, 7.4e-6, \
Width/2.0, Height/2.0, Width, Height]
StartCamParam2 := StartCamParam1
Rows1 := []
Cols1 := []
StartPoses1 := []
Rows2 := []
Cols2 := []
StartPoses2 := []
* Find calibration marks and startposes.
for i := 0 to 11 by 1
grab_image_async (Image1, AcqHandle1, -1)
grab_image_async (Image2, AcqHandle2, -1)
find_caltab (Image1, CalPlate1, 'caltab_30mm.descr', 3, 120, 5)
find_caltab (Image2, CalPlate2, 'caltab_30mm.descr', 3, 120, 5)
find_marks_and_pose (Image1, CalPlate1, 'caltab_30mm.descr', \
StartCamParam1, 128, 10, 20, 0.7, 5, 100, \
RCoord1, CCoord1, StartPose1)
Rows1 := [Rows1,RCoord1]
Cols1 := [Cols1,CCoord1]
StartPoses1 := [StartPoses1,StartPose1]
find_marks_and_pose (Image2, CalPlate2, 'caltab_30mm.descr', \
StartCamParam2, 128, 10, 20, 0.7, 5, 100, \
RCoord2, CCoord2, StartPose2)
Rows2 := [Rows2,RCoord2]
Cols2 := [Cols2,CCoord2]
StartPoses2 := [StartPoses2,StartPose2]
endfor
* Calibrate the stereo rig.
binocular_calibration (X, Y, Z, Rows1, Cols1, Rows2, Cols2, StartCamParam1, \
StartCamParam2, StartPoses1, StartPoses2, 'all', \
CamParam1, CamParam2, NFinalPose1, NFinalPose2, \
RelPose, Errors)
* Archive the results.
write_cam_par (CamParam1, 'cam_left-125.dat')
write_cam_par (CamParam2, 'cam_right-125.dat')
write_pose (RelPose, 'rel_pose.dat')
* Rectify the stereo images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
RelPose, 1, 'geometric', 'bilinear', \
CamParamRect1, CamParamRect2, \
CamPoseRect1, CamPoseRect2, \
RelPoseRect)
map_image (Image1, Map1, ImageMapped1)
map_image (Image2, Map2, ImageMapped2)
* Open image source.
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_l.seq', 'default', 0, -1, AcqHandle1)
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_r.seq', 'default', 1, -1, AcqHandle2)
* Initialize the start parameters.
caltab_points ('caltab_30mm.descr', X, Y, Z)
StartCamParam1 := ['area_scan_division', 0.0125, 0, 7.4e-6, 7.4e-6, \
Width/2.0, Height/2.0, Width, Height]
StartCamParam2 := StartCamParam1
Rows1 := []
Cols1 := []
StartPoses1 := []
Rows2 := []
Cols2 := []
StartPoses2 := []
* Find calibration marks and startposes.
for i := 0 to 11 by 1
grab_image_async (Image1, AcqHandle1, -1)
grab_image_async (Image2, AcqHandle2, -1)
find_caltab (Image1, CalPlate1, 'caltab_30mm.descr', 3, 120, 5)
find_caltab (Image2, CalPlate2, 'caltab_30mm.descr', 3, 120, 5)
find_marks_and_pose (Image1, CalPlate1, 'caltab_30mm.descr', \
StartCamParam1, 128, 10, 20, 0.7, 5, 100, \
RCoord1, CCoord1, StartPose1)
Rows1 := [Rows1,RCoord1]
Cols1 := [Cols1,CCoord1]
StartPoses1 := [StartPoses1,StartPose1]
find_marks_and_pose (Image2, CalPlate2, 'caltab_30mm.descr', \
StartCamParam2, 128, 10, 20, 0.7, 5, 100, \
RCoord2, CCoord2, StartPose2)
Rows2 := [Rows2,RCoord2]
Cols2 := [Cols2,CCoord2]
StartPoses2 := [StartPoses2,StartPose2]
endfor
* Calibrate the stereo rig.
binocular_calibration (X, Y, Z, Rows1, Cols1, Rows2, Cols2, StartCamParam1, \
StartCamParam2, StartPoses1, StartPoses2, 'all', \
CamParam1, CamParam2, NFinalPose1, NFinalPose2, \
RelPose, Errors)
* Archive the results.
write_cam_par (CamParam1, 'cam_left-125.dat')
write_cam_par (CamParam2, 'cam_right-125.dat')
write_pose (RelPose, 'rel_pose.dat')
* Rectify the stereo images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
RelPose, 1, 'geometric', 'bilinear', \
CamParamRect1, CamParamRect2, \
CamPoseRect1, CamPoseRect2, \
RelPoseRect)
map_image (Image1, Map1, ImageMapped1)
map_image (Image2, Map2, ImageMapped2)
* Open image source.
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_l.seq', 'default', 0, -1, AcqHandle1)
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, \
'default', 'images_r.seq', 'default', 1, -1, AcqHandle2)
* Initialize the start parameters.
caltab_points ('caltab_30mm.descr', X, Y, Z)
StartCamParam1 := ['area_scan_division', 0.0125, 0, 7.4e-6, 7.4e-6, \
Width/2.0, Height/2.0, Width, Height]
StartCamParam2 := StartCamParam1
Rows1 := []
Cols1 := []
StartPoses1 := []
Rows2 := []
Cols2 := []
StartPoses2 := []
* Find calibration marks and startposes.
for i := 0 to 11 by 1
grab_image_async (Image1, AcqHandle1, -1)
grab_image_async (Image2, AcqHandle2, -1)
find_caltab (Image1, CalPlate1, 'caltab_30mm.descr', 3, 120, 5)
find_caltab (Image2, CalPlate2, 'caltab_30mm.descr', 3, 120, 5)
find_marks_and_pose (Image1, CalPlate1, 'caltab_30mm.descr', \
StartCamParam1, 128, 10, 20, 0.7, 5, 100, \
RCoord1, CCoord1, StartPose1)
Rows1 := [Rows1,RCoord1]
Cols1 := [Cols1,CCoord1]
StartPoses1 := [StartPoses1,StartPose1]
find_marks_and_pose (Image2, CalPlate2, 'caltab_30mm.descr', \
StartCamParam2, 128, 10, 20, 0.7, 5, 100, \
RCoord2, CCoord2, StartPose2)
Rows2 := [Rows2,RCoord2]
Cols2 := [Cols2,CCoord2]
StartPoses2 := [StartPoses2,StartPose2]
endfor
* Calibrate the stereo rig.
binocular_calibration (X, Y, Z, Rows1, Cols1, Rows2, Cols2, StartCamParam1, \
StartCamParam2, StartPoses1, StartPoses2, 'all', \
CamParam1, CamParam2, NFinalPose1, NFinalPose2, \
RelPose, Errors)
* Archive the results.
write_cam_par (CamParam1, 'cam_left-125.dat')
write_cam_par (CamParam2, 'cam_right-125.dat')
write_pose (RelPose, 'rel_pose.dat')
* Rectify the stereo images.
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, \
RelPose, 1, 'geometric', 'bilinear', \
CamParamRect1, CamParamRect2, \
CamPoseRect1, CamPoseRect2, \
RelPoseRect)
map_image (Image1, Map1, ImageMapped1)
map_image (Image2, Map2, ImageMapped2)
Sind die Parameterwerte korrekt und konnten die gesuchten Parameter
durch das Bündelausgleichsverfahren bestimmt werden, dann liefert
binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose,
caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPoints,
read_cam_parread_cam_parReadCamParReadCamParReadCamPar
write_posewrite_poseWritePoseWritePoseWritePose,
write_cam_parwrite_cam_parWriteCamParWriteCamParWriteCamPar,
pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3dPoseToHomMat3d,
disp_caltabdisp_caltabDispCaltabDispCaltabDispCaltab,
gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMap
find_caltabfind_caltabFindCaltabFindCaltabFindCaltab,
sim_caltabsim_caltabSimCaltabSimCaltabSimCaltab,
read_cam_parread_cam_parReadCamParReadCamParReadCamPar,
create_posecreate_poseCreatePoseCreatePoseCreatePose,
convert_pose_typeconvert_pose_typeConvertPoseTypeConvertPoseTypeConvertPoseType,
read_poseread_poseReadPoseReadPoseReadPose,
hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPoseHomMat3dToPose,
create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltab,
binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity,
binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistance
3D Metrology