Name
binocular_calibrationT_binocular_calibrationBinocularCalibrationBinocularCalibration — Determine all camera parameters of a binocular stereo system.
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)
In general, binocular calibration means the exact determination of
the parameters that model the 3D reconstruction of a 3D point from
the corresponding images of this point in a binocular stereo system.
This reconstruction is specified by the internal parameters
CamParam1CamParam1CamParam1CamParam1camParam1 of camera 1 and CamParam2CamParam2CamParam2CamParam2camParam2 of camera 2
describing the underlying camera model, and the external
parameters RelPoseRelPoseRelPoseRelPoserelPose describing the relative pose of camera
system 2 in relation to camera system 1.
Thus, known 3D model points (with coordinates NXNXNXNXNX,
NYNYNYNYNY, NZNZNZNZNZ) are projected in the image planes of both
cameras (camera 1 and camera 2) and the sum of the squared distances
between these projections and the corresponding measured image
points (with coordinates NRow1NRow1NRow1NRow1NRow1, NCol1NCol1NCol1NCol1NCol1 for camera 1
and NRow2NRow2NRow2NRow2NRow2, NCol2NCol2NCol2NCol2NCol2 for camera 2) is minimized. It
should be noted that all these model points must be visible in both
images. The used camera model is described in
calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras. The camera model is represented (for
each camera separately) by a tuple of 9 to 16 parameters that
correspond to area scan cameras (see calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras).
The projection uses the initial values StartCamParam1StartCamParam1StartCamParam1StartCamParam1startCamParam1 and
StartCamParam2StartCamParam2StartCamParam2StartCamParam2startCamParam2 of the internal parameters of camera 1 and
camera 2, which can be obtained from the camera data sheets. In
addition, the initial guesses NStartPose1NStartPose1NStartPose1NStartPose1NStartPose1 and
NStartPose2NStartPose2NStartPose2NStartPose2NStartPose2 of the poses of the 3D calibration model in
relation to the camera coordinate systems (CCS) of camera 1 and
camera 2 are needed as well. These poses can be determined by the
find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose operator. Since this calibration
algorithm simultaneously handles correspondences between measured
image and known model points from different image pairs, poses
(NStartPose1NStartPose1NStartPose1NStartPose1NStartPose1,NStartPose2NStartPose2NStartPose2NStartPose2NStartPose2), and measured points
(NRow1NRow1NRow1NRow1NRow1,NCol1NCol1NCol1NCol1NCol1,NRow2NRow2NRow2NRow2NRow2, NCol2NCol2NCol2NCol2NCol2) must
be passed concatenated in a corresponding order.
The input parameter EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams is used to select the
parameters to be estimated. Usually this parameter is set to
'all'"all""all""all""all", i.e., all external camera parameters (translation
and rotation) and all internal camera parameters are determined.
Otherwise, EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams contains a tuple of strings
indicating the combination of parameters to estimate.
For instance, if the internal camera parameters already have been determined
(e.g., by previous calls to binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration), it is
often desired to only determine relative the pose of the two cameras
to each other (RelPoseRelPoseRelPoseRelPoserelPose). In this case,
EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams can be set to 'pose_rel'"pose_rel""pose_rel""pose_rel""pose_rel".
The internal parameters can be subsumed
by the parameter values 'cam_param1'"cam_param1""cam_param1""cam_param1""cam_param1" and
'cam_param2'"cam_param2""cam_param2""cam_param2""cam_param2" as well. Note that if the polynomial model is
used to model the lens distortions, the values 'k1_i'"k1_i""k1_i""k1_i""k1_i",
'k2_i'"k2_i""k2_i""k2_i""k2_i" and 'k3_i'"k3_i""k3_i""k3_i""k3_i" can be specified individually,
whereas 'p1'"p1""p1""p1""p1" and 'p2'"p2""p2""p2""p2" can only be specified in the
group 'poly_tan_2_i'"poly_tan_2_i""poly_tan_2_i""poly_tan_2_i""poly_tan_2_i" (with 'i'"i""i""i""i" indicating the index of
the camera). 'poly_i'"poly_i""poly_i""poly_i""poly_i" specifies the group '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" and 'poly_tan_2_i'"poly_tan_2_i""poly_tan_2_i""poly_tan_2_i""poly_tan_2_i".
The following list contains all possible strings that can be passed to
the tuple:
Allowed strings for EstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams |
Determined parameters |
'all' (default) |
All internal camera parameters,
as well as the relative pose of both cameras and the poses of the
calibration objects. |
'pose' |
Relative pose between the two cameras and poses of the
calibration objects. |
'pose_rel' |
Relative pose between the two cameras. |
'alpha_rel', 'beta_rel', 'gamma_rel', 'transx_rel', 'transy_rel',
'transz_rel' |
Rotation angles and translation parameters of the relative pose
between the two cameras. |
'pose_caltabs' |
Poses of the calibration objects. |
'alpha_caltabs', 'beta_caltabs', 'gamma_caltabs', 'transx_caltabs',
'transy_caltabs', 'transz_caltabs' |
Rotation angles and translation parameters of the relative poses
of the calibration objects. |
'cam_param1', 'cam_param2' |
All internal camera parameters of camera 1
and camera 2, respectively. |
'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' |
Individual internal camera parameters of camera 1
and camera 2, respectively.
|
In addition, parameters can be excluded from estimation by using the
prefix ~. For example, the values
['pose_rel', '~transx_rel']["pose_rel", "~transx_rel"]["pose_rel", "~transx_rel"]["pose_rel", "~transx_rel"]["pose_rel", "~transx_rel"] have the same effect as
['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"].
On the other hand,
['all','~focus1']["all","~focus1"]["all","~focus1"]["all","~focus1"]["all","~focus1"]
determines all internal and external parameters except the focus of
camera 1, for instance. The prefix ~ can be used
with all parameter values except 'all'.
The underlying camera model is explained in the description of the
calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras operator. The calibrated internal camera
parameters are returned in CamParam1CamParam1CamParam1CamParam1camParam1 for camera 1 and in
CamParam2CamParam2CamParam2CamParam2camParam2 for camera 2. The external parameters are
returned in RelPoseRelPoseRelPoseRelPoserelPose and specify the 3D transformation of
points of CCS 2 into CCS 1. Note that according to the description
of poses at create_posecreate_poseCreatePoseCreatePoseCreatePose one parameter is appended to the
pose tuple at the last position to define the representation type of
this pose.
Analogously to camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibration, the 3D transformation
poses of the calibration model to the respective CCS are returned in
NFinalPose1NFinalPose1NFinalPose1NFinalPose1NFinalPose1 and NFinalPose2NFinalPose2NFinalPose2NFinalPose2NFinalPose2. These
transformations are related to RelPoseRelPoseRelPoseRelPoserelPose according to the
following equation (neglecting differences due to the balancing
effects of the multi image calibration):
HomMat3D_NFinalPose2 = INV(HomMat3D_RelPose) * HomMat3D_NFinalPose1 ,
where HomMat3D_* denotes a homogeneous transformation matrix of the
respective poses and INV() inverts a homogeneous matrix.
The computed average errors returned in ErrorsErrorsErrorsErrorserrors give an
impression of the accuracy of the calibration. Using the determined
camera parameters, they denote the average euclidean distance
between the projection of the mark centers to their extracted image
coordinates.
For cameras with telecentric lenses, additional conditions must be
fulfilled for the setup. They can be found in the documentation of
calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras.
Stereo setups that contain cameras with and without hypercentric
lenses at the same time are not supported.
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Processed without parallelization.
NXNXNXNXNX (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Ordered Tuple with all X-coordinates
of the calibration marks (in meters).
NYNYNYNYNY (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Ordered Tuple with all Y-coordinates
of the calibration marks (in meters).
Number of elements: NY == NX
NZNZNZNZNZ (input_control) number-array → HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Ordered Tuple with all Z-coordinates
of the calibration marks (in meters).
Number of elements: NZ == NX
Ordered Tuple with all row-coordinates
of the extracted calibration marks of camera 1
(in pixels).
Ordered Tuple with all column-coordinates
of the extracted calibration marks of camera 1
(in pixels).
Number of elements: NCol1 == NRow1
Ordered Tuple with all row-coordinates
of the extracted calibration marks of camera 2
(in pixels).
Number of elements: NRow2 == NRow1
Ordered Tuple with all column-coordinates
of the extracted calibration marks of camera 2
(in pixels).
Number of elements: NCol2 == NRow1
Initial values for the internal parameters of camera 1.
Initial values for the internal parameters of camera 2.
Ordered tuple with all initial values for the
poses of the calibration model in relation to
camera 1.
Number of elements: NStartPose1 == 7 * NRow1 / NX
Ordered tuple with all initial values for the
poses of the calibration model in relation to
camera 2.
Number of elements: NStartPose2 == 7 * NRow1 / NX
Camera parameters to be estimated.
Default value:
'all'
"all"
"all"
"all"
"all"
List of values: '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"
Internal parameters of camera 1.
Internal parameters of camera 2.
Ordered tuple with all poses of the calibration model
in relation to camera 1.
Number of elements: NFinalPose1 == 7 * NRow1 / NX
Ordered tuple with all poses of the calibration model
in relation to camera 2.
Number of elements: NFinalPose2 == 7 * NRow1 / NX
Pose of camera 2 in relation to camera 1.
Average error distances in pixels.
* 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)
binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration returns 2 (H_MSG_TRUE) if all parameter values
are correct and the desired parameters have been determined by the
minimization algorithm. If necessary, an exception is raised.
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