ClassesClassesClassesClasses | | | | Operators

camera_calibrationT_camera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration (Operator)

Name

camera_calibrationT_camera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration — Determine all camera parameters by a simultaneous minimization process.

Signature

camera_calibration( : : NX, NY, NZ, NRow, NCol, StartCamParam, NStartPose, EstimateParams : CameraParam, NFinalPose, Errors)

Herror T_camera_calibration(const Htuple NX, const Htuple NY, const Htuple NZ, const Htuple NRow, const Htuple NCol, const Htuple StartCamParam, const Htuple NStartPose, const Htuple EstimateParams, Htuple* CameraParam, Htuple* NFinalPose, Htuple* Errors)

Herror camera_calibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow, const HTuple& NCol, const HTuple& StartCamParam, const HTuple& NStartPose, const HTuple& EstimateParams, HTuple* CameraParam, HTuple* NFinalPose, HTuple* Errors)

void CameraCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow, const HTuple& NCol, const HTuple& StartCamParam, const HTuple& NStartPose, const HTuple& EstimateParams, HTuple* CameraParam, HTuple* NFinalPose, HTuple* Errors)

static HTuple HPose::CameraCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow, const HTuple& NCol, const HTuple& StartCamParam, const HPoseArray& NStartPose, const HTuple& EstimateParams, HPoseArray* NFinalPose, HTuple* Errors)

HTuple HPose::CameraCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow, const HTuple& NCol, const HTuple& StartCamParam, const HString& EstimateParams, HPose* NFinalPose, double* Errors) const

HTuple HPose::CameraCalibration(const HTuple& NX, const HTuple& NY, const HTuple& NZ, const HTuple& NRow, const HTuple& NCol, const HTuple& StartCamParam, const char* EstimateParams, HPose* NFinalPose, double* Errors) const

void HOperatorSetX.CameraCalibration(
[in] VARIANT NX, [in] VARIANT NY, [in] VARIANT NZ, [in] VARIANT NRow, [in] VARIANT NCol, [in] VARIANT StartCamParam, [in] VARIANT NStartPose, [in] VARIANT EstimateParams, [out] VARIANT* CameraParam, [out] VARIANT* NFinalPose, [out] VARIANT* Errors)

VARIANT HPoseX.CameraCalibration(
[in] VARIANT NX, [in] VARIANT NY, [in] VARIANT NZ, [in] VARIANT NRow, [in] VARIANT NCol, [in] VARIANT StartCamParam, [in] VARIANT NStartPose, [in] VARIANT EstimateParams, [out] VARIANT* NFinalPose, [out] VARIANT* Errors)

static void HOperatorSet.CameraCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow, HTuple NCol, HTuple startCamParam, HTuple NStartPose, HTuple estimateParams, out HTuple cameraParam, out HTuple NFinalPose, out HTuple errors)

static HTuple HPose.CameraCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow, HTuple NCol, HTuple startCamParam, HPose[] NStartPose, HTuple estimateParams, out HPose[] NFinalPose, out HTuple errors)

HTuple HPose.CameraCalibration(HTuple NX, HTuple NY, HTuple NZ, HTuple NRow, HTuple NCol, HTuple startCamParam, string estimateParams, out HPose NFinalPose, out double errors)

Description

camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration performs the calibration of a camera. For this, known 3D model points (with coordinates NXNXNXNXNXNX, NYNYNYNYNYNY, NZNZNZNZNZNZ) are projected in the image and the sum of the squared distance between these projections and the corresponding image points (with coordinates NRowNRowNRowNRowNRowNRow, NColNColNColNColNColNCol) is minimized.

If the minimization converges, the exact internal (CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam) and external (NFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPose) camera parameters are determined by this minimization algorithm. The parameters StartCamParamStartCamParamStartCamParamStartCamParamStartCamParamstartCamParam and NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose are used as initial values for the minimization process. Since this algorithm simultaneously handles correspondences between image and model points from different images, it is also called multi-image calibration.

In general, camera calibration means the exact determination of the parameters that model the (optical) projection of any 3D world point P(w) into a (sub-)pixel [r,c] in the image. This is important, if the original 3D pose of an object has to be computed using an image (e.g., measuring of industrial parts).

Used 3D camera model

The projection consists of multiple steps: First, the point p(w) is transformed from world into camera coordinates (points as homogeneous vectors, compare affine_trans_point_3daffine_trans_point_3dAffineTransPoint3daffine_trans_point_3dAffineTransPoint3dAffineTransPoint3d):

  /      \     / x \     /        \   /      \
  | p(c) |  =  | y |  =  |  R   t | * | p(w) |
  |      |     | z |     |        |   |      |
  \  1   /     \ 1 /     \ 0 0  1 /   \  1   /

Then, the point is projected into the image plane, i.e., onto the sensor chip.

For the modeling of this projection process that is determined by the used combination of camera, lens, and frame grabber, HALCON provides the following three 3D camera models:

Area scan pinhole camera: The combination of an area scan camera with a lens that effects a perspective projection and that may show radial and decentering distortions.

Area scan telecentric camera: The combination of an area scan camera with a telecentric lens that effects a parallel projection and that may show radial and decentering distortions.

Line scan pinhole camera: The combination of a line scan camera with a lens that effects a perspective projection and that may show radial distortions.

For area scan cameras, the projection of the point p(c) that is given in camera coordinates into a (sub-)pixel [r,c] in the image consists of the following steps: First, the point is projected into the image plane, i.e., onto the sensor chip. If the underlying camera model is an area scan pinhole camera, i.e., if the focal length passed in CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam is greater than 0, the projection is described by the following equations:

           / x \
    p(c) = | y |
           \ z /

    u = Focus * x / z
    v = Focus * y / z

In contrast, if the focal length is passed as 0 in CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam, the camera model of an area scan telecentric camera is used, i.e., it is assumed that the optics of the lens of the camera performs a parallel projection. In this case, the corresponding equations are:

           / x \
    p(c) = | y |
           \ z /

    u = x
    v = y

For both types of area scan cameras, the lens distortions can be modeled either by the division model or by the polynomial model. The division model uses one parameter (Kappa) to model the radial distortions.

The following equations transform the distorted image plane coordinates into undistorted image plane coordinates if the division model is used:

   u = u' / (1+Kappa*(u'^2+v'^2)
   v = v' / (1+Kappa*(u'^2+v'^2)

These equations can be inverted analytically, which leads to the following equations that transform undistorted coordinates into distorted coordinates if the division model is used:

   u' = (2*u) / (1+sqrt(1-4*Kappa*(u^2+v^2)))
   v' = (2*v) / (1+sqrt(1-4*Kappa*(u^2+v^2)))

The polynomial model uses three parameters (K1, K2, K3) to model the radial distortions, and two parameters (P1, P2) to model the decentering distortions. The following equations transform the distorted image plane coordinates into undistorted image plane coordinates if the polynomial model is used:

   u = u' + u'*(K1*r^2 + K2*r^4 + K3*r^6) +
            2*P1*u'*v' + P2*(r^2 + 2*u'^2)

   v = v' + v'*(K1*r^2 + K2*r^4 + K3*r^6) +
            P1*(r^2 + 2*v'^2) + 2*P2*u'*v'

   with: r = sqrt(u'^2+v'^2)

These equations cannot be inverted analytically. Therefore, distorted image plane coordinates must be calculated from undistorted image plane coordinates numerically.

Which of the two distortion models is used, is defined by the number of values passed in the parameter StartCamParamStartCamParamStartCamParamStartCamParamStartCamParamstartCamParam: If StartCamParamStartCamParamStartCamParamStartCamParamStartCamParamstartCamParam contains 8 values, the division model is used. If StartCamParamStartCamParamStartCamParamStartCamParamStartCamParamstartCamParam contains 12 values, the polynomial model is used.

Finally, the point is transformed from the image plane coordinate system into the image coordinate system, i.e., the pixel coordinate system:

    c = u' / Sx + Cx
    r = v' / Sy + Cy

For line scan cameras, also the relative motion between the camera and the object must be modeled. In HALCON, the following assumptions for this motion are made:

  1. the camera moves with constant velocity along a straight line

  2. the orientation of the camera is constant

  3. the motion is equal for all images

The motion is described by the motion vector V = (Vx,Vy,Vz)' that must be given in [meter/scanline] in the camera coordinate system. The motion vector describes the motion of the camera, assuming a fixed object. In fact, this is equivalent to the assumption of a fixed camera with the object traveling along -V.

The camera coordinate system of line scan cameras is defined as follows: The origin of the coordinate system is the center of projection. The z-axis is identical to the optical axis and directed so that the visible points have positive z coordinates. The y-axis is perpendicular to the sensor line and to the z-axis. It is directed so that the motion vector has a positive y-component. The x-axis is perpendicular to the y- and z-axis, so that the x-, y-, and z-axis form a right-handed coordinate system.

As the camera moves over the object during the image acquisition, also the camera coordinate system moves relatively to the object, i.e., each image line has been imaged from a different position. This means, there would be an individual pose for each image line. To make things easier, in HALCON, all transformations from world coordinates into camera coordinates and vice versa are based on the pose of the first image line only. The motion V is taken into account during the projection of the point p(c) into the image. Consequently, only the pose of the first image line is returned by the operators find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose and camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration.

For line scan pinhole cameras, the projection of the point p(c) that is given in the camera coordinate system into a (sub-)pixel [r,c] in the image is defined as follows:

Assuming

           / x \
    p(c) = | y |,
           \ z /

the following set of equations must be solved for m, u', and t:

    m * D * u' = x - t * Vx
   -m * D * pv = y - t * Vy
    m * Focus  = z - t * Vz

with

                   1
    D  = -----------------------
         1 + Kappa*(u'*u' + pv*pv)

    pv = Sy*Cy

This already includes the compensation for radial distortions. Note that for line scan cameras, only the division model for radial distortions can be used.

Finally, the point is transformed into the image coordinate system, i.e., the pixel coordinate system:

    c = u' / Sx + Cx
    r = t

Camera parameters

The total of 14 or 18 camera parameters for area scan cameras (depending on the selected distortion model) and 17 camera parameters for line scan cameras, respectively, can be divided into the internal and external camera parameters:

Internal camera parameters:

These parameters describe the characteristics of the used camera, especially the dimension of the sensor itself and the projection properties of the used combination of lens, camera, and frame grabber.

For area scan cameras, the above described camera model contains the following parameters (8 parameters if the distortions are modeled by the division model and 12 parameters if the polynomial model is used):

Focus:

Focal length of the lens. 0 for telecentric lenses.

Either:

Kappa (K):

Distortion coefficient to model the radial lens distortions (omitted if the polynomial model is used).

Or:

K1, K2, K3, P1,P2:

Distortion coefficients of the polynomial model to model the radial and decentering lens distortions (omitted if the division model is used).

Sx:

Scale factor. For pinhole cameras, it corresponds to the horizontal distance between two neighboring cells on the sensor. For telecentric cameras, it represents the horizontal size of a pixel in world coordinates. Attention: This value increases, if the image is subsampled!

Sy:

Scale factor. For pinhole cameras, it corresponds to the vertical distance between two neighboring cells on the sensor. For telecentric cameras, it represents the vertical size of a pixel in world coordinates. Since in most cases the image signal is sampled line-synchronously, this value is determined by the dimension of the sensor and needn't be estimated for pinhole cameras by the calibration process. Attention: This value increases, if the image is subsampled!

Cx:

Column coordinate of the image center point (center of the radial distortion).

Cy:

Row coordinate of the image center point (center of the radial distortion).

ImageWidth:

Width of the sampled image. Attention: This value decreases, if the image is subsampled!

ImageHeight:

Height of the sampled image. Attention: This value decreases, if the image is subsampled!

For line scan cameras, the above described camera model contains the following 11 parameters:

Focus:

Focal length of the lens.

Kappa:

Distortion coefficient of the division model to model the radial lens distortions.

Sx:

Scale factor, corresponds to the horizontal distance between two neighboring cells on the sensor. Attention: This value increases if the image is subsampled!

Sy:

Scale factor. During the calibration, it appears only in the form pv = Sy*Cy. pv describes the distance of the image center point from the sensor line in [meters]. Attention: This value increases if the image is subsampled!

Cx:

Column coordinate of the image center point (center of the radial distortion).

Cy:

Distance of the image center point (center of the radial distortion) from the sensor line in [scanlines].

ImageWidth:

Width of the sampled image. Attention: This value decreases if the image is subsampled!

ImageHeight:

Height of the sampled image. Attention: This value decreases if the image is subsampled!

Vx:

X-component of the motion vector.

Vy:

Y-component of the motion vector.

Vz:

Z-component of the motion vector.

Note that the term focal length is not quite correct and would be appropriate only for an infinite object distance. To simplify matters, always the term focal length is used even if the image distance is meant.

Note that for all operators that use camera parameters as input the parameter values are checked as to whether they fullfill the following restrictions:

      Sx          >  0
      Sy          >= 0
      Focus       >= 0
      ImageWidth  >  0
      ImageHeight >  0
      

For some operators the restrictions differ slightly. In particular, for operators that do not support telecentric cameras the following restriction applies:

      Focus > 0  
      

For operators that do not support line scan cameras the following restrictions apply:

     Sy             >  0
     Vx^2+Vy^2+Vz^2 != 0
     

External camera parameters:

These 6 parameters describe the 3D pose, i.e., the position and orientation, of the world coordinate system relative to the camera coordinate system. For line scan cameras, the pose of the world coordinate system refers to the camera coordinate system of the first image line. Three parameters describe the translation, three the rotation. See create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose for more information about 3D poses. Note that camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration operates with all types of 3D poses for NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose.

When using the standard calibration plate, the world coordinate system is defined by the coordinate system of the calibration plate which is located in the middle of the surface of the calibration plate, its z-axis pointing into the calibration plate, its x-axis to the right, and it y-axis downwards.

Additional information about the calibration process

The use of camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration leads to some questions, which are dealed with in the following sections:

How to generate an appropriate calibration plate?

The simplest method to determine the internal parameters of a camera is the use of the standard calibration plate as generated by the operator gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab. You can obtain high-precision calibration plates in various sizes and materials from your local distributor. In case of small distances between object and lens it may be sufficient to print the calibration object by a laser printer and to mount it on a cardboard. Otherwise -- especially by using a wide-angle lens -- it is possible to print the PostScript file on a large ink-jet printer and to mount it on a aluminum plate. It is very important that the mark coordinates in the calibration plate description file correspond to the real ones on the calibration plate with high accuracy. Thus, the calibration plate description file has to be modified in accordance with the measurement of the calibration plate!

How to take a set of suitable images?

If you use the standard calibration plate, you can proceed in the following way: With the combination of lens (fixed distance!), camera, and frame grabber to be calibrated a set of images of the calibration plate has to be taken, see open_framegrabberopen_framegrabberOpenFramegrabberopen_framegrabberOpenFramegrabberOpenFramegrabber and grab_imagegrab_imageGrabImagegrab_imageGrabImageGrabImage. The following items have to be considered:

How to extract the calibration marks in the images?

If a standard calibration plate is used, you can use the operators find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab and find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose to determine the coordinates of the calibration marks in each image and to compute a rough estimate for the external camera parameters. The concatenation of these values can directly be used as initial values for the external camera parameters (NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose) in camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration.

Obviously, images in which the segmentation of the calibration plate (find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab) has failed or the calibration marks haven't been determined successfully by find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose should not be used.

Which distortion model should be used?

For area scan cameras, two distortion models can be used: The division model and the polynomial model. The division model uses one parameter to model the radial distortions while the polynomial model uses five parameters to model radial and decentering distortions (see above).

The advantages of the division model are that the distortions can be applied faster, especially the inverse distortions, i.e., if world coordinates are projected into the image plane. Furthermore, if only few calibration images are used or if the field of view is not covered sufficiently, the division model typically yields more stable results than the polynomial model. The main advantage of the polynomial model is that it can model the distortions more accurately because it uses higher order terms to model the radial distortions and because it also models the decentering distortions. Note that the polynomial model cannot be inverted analytically. Therefore, the inverse distortions must be calculated iteratively, which is slower than the calculation of the inverse distortions with the (analytically invertible) division model.

Typically, the division model should be used for the calibration. If the accuracy of the calibration is not high enough, the polynomial model can be used. But note that the calibration sequence used for the polynomial model must provide a complete coverage of the area in which measurements will later be performed. The distortions may be modeled inaccurately outside of the area that was covered by the calibration plate. This holds for the image border as well as for areas inside the field of view that were not covered by the calibration plate.

How to find suitable initial values for the internal camera parameters?

The operators find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose (determination of initial values for the external camera parameters) and camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration require initial values for the internal camera parameters. These parameters can be provided by a appropriate text file (see read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar) which can be generated by write_cam_parwrite_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar or can be edited manually.

For area scan cameras, the following should be considered for the initial values of the single parameters:

Focus:

The initial value is the nominal focal length of the used lens, e.g., 0.008,m.

Either:

Kappa:

Use 0.0 as initial value (omitted if the polynomial model is used).

Or:

K1, K2, K3, P1, P2:

Use the initial value 0.0 for each of the five coefficients (omitted if the division model is used).

Sx:

The initial value for the horizontal distance between two neighboring cells depends on the dimension of the used chip of the camera (see technical specifications of the camera). Generally, common chips are either 1/3”-Chips (e.g., SONY XC-73, SONY XC-777), 1/2”-Chips (e.g., SONY XC-999, Panasonic WV-CD50), or 2/3”-Chips (e.g., SONY DXC-151, SONY XC-77). Notice: The value of S_{x} increases if the image is subsampled! Appropriate initial values are:

                   Full image (768*576)   Subsampling (384*288)
    1/3"-Chip      0.0000055 m            0.0000110 m
    1/2"-Chip      0.0000086 m            0.0000172 m
    2/3"-Chip      0.0000110 m            0.0000220 m
    

The value for Sx is calibrated, since the video signal of a camera normally isn't sampled pixel-synchronously.

Sy:

Since most off-the-shelf cameras have quadratic pixels, the same values for Sy are valid as for Sx. In contrast to Sx the value for Sy will not be calibrated for pinhole cameras, because the video signal of a camera normally is sampled line-synchronously. Thus, the initial value is equal to the final value. Appropriate initial values are:

                   Full image (768*576)   Subsampling (384*288)
    1/3"-Chip      0.0000055 m            0.0000110 m
    1/2"-Chip      0.0000086 m            0.0000172 m
    2/3"-Chip      0.0000110 m            0.0000220 m
    

Cx and Cy:

Initial values for the coordinates of the image center is the half image width and half image height. Notice: The values of Cx and Cy decrease if the image is subsampled! Appropriate initial values are:

                   Full image (768*576)   Subsampling (384*288)
    Cx             384.0                  192.0
    Cy             288.0                  144.0
    

ImageWidth and ImageHeight:

These two parameters are determined by the used frame grabber and therefore are not calibrated. Appropriate initial values are, for example:

                   Full image (768*576)   Subsampling (384*288)
    ImageWidth     768                    384
    ImageHeight    576                    288
    

For line scan cameras, the following should be considered for the initial values of the single parameters:

Focus:

The initial value is the nominal focal length of the used lens, e.g., 0.008 m.

Kappa:

Use 0.0 as initial value.

Sx:

The initial value for the horizontal distance between two neighboring cells can be taken from the technical specifications of the camera. Typical initial values are 7e-6 m, 10e-6 m, and 14e-6 m. Notice: The value of Sx increase, if the image is subsampled!

Sy:

The initial value for the size of a cell in the direction perpendicular to the sensor line can also be taken from the technical specifications of the camera. Typical initial values are 7e-6 m, 10e-6 m, and 14e-6 m. Notice: The value of Sx increase, if the image is subsampled! In contrast to Sx, the value for Sy will NOT be calibrated for line scan cameras, because it appears only in the form pv = Sy * Cy. Therefore, it cannot be determined separately.

Cx:

The initial value for the x-coordinate of the image center is the half image width. Notice: The values of Cx decreases if the image is subsampled! Appropriate initial values are:

            Image width:  1024  2048  4096  8192
            Cx:            512  1024  2048  4096
          

Cy:

The initial value for the y-coordinate of the image center can normally be set to 0.

ImageWidth and ImageHeight:

These two parameters are determined by the used frame grabber and therefore are not calibrated.

Vx, Vy, Vz:

The initial values for the x-, y-, and z-component of the motion vector depend on the image acquisition setup. Assuming a camera that looks perpendicularly onto a conveyor belt, and that is rotated around its optical axis such that the sensor line is perpendicular to the conveyor belt, i.e., the y-axis of the camera coordinate system is parallel to the conveyor belt, the initial values Vx = Vz = 0. The initial value for Vy can then be determined, e.g., from a line scan image of an object with known size (e.g., calibration plate, ruler):

Vy = LM / LR with:LM = Length of the object in object coordinates [meter] LR = Length of the object in image coordinates [rows]

If, compared to the above setup, the camera is rotated 30 degrees around its optical axis, i.e., around the z-axis of the camera coordinate system, the above determined initial values must be changed as follows:

             Vx_rot_z = sin(30) * Vy
             Vy_rot_z = cos(30) * Vy
             Vz_rot_z = Vz = 0
           

If, compared to the first setup, the camera is rotated -20 degrees around the x-axis of the camera coordinate system, the following initial values result:

             Vx_rot_x = Vx = 0
             Vy_rot_x = cos(20) * Vy
             Vz_rot_x = sin(20) * Vy
           

The quality of the initial values for Vx, Vy, and Vz are crucial for the success of the whole calibration. If they are not precise enough, the calibration may fail.

Which camera parameters have to be estimated?

The input parameter EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams is used to select which camera parameters to estimate. Usually this parameter is set to 'all'"all""all""all""all""all", i.e., all 6 external camera parameters (translation and rotation) and all internal camera parameters are determined. If the internal camera parameters already have been determined (e.g., by a previous call to camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration) it is often desired to only determine the pose of the world coordinate system in camera coordinates (i.e., the external camera parameters). In this case, EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams can be set to 'pose'"pose""pose""pose""pose""pose". This has the same effect as EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams = ['alpha','beta','gamma','transx','transy','transz']["alpha","beta","gamma","transx","transy","transz"]["alpha","beta","gamma","transx","transy","transz"]["alpha","beta","gamma","transx","transy","transz"]["alpha","beta","gamma","transx","transy","transz"]["alpha","beta","gamma","transx","transy","transz"]. Otherwise, EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams contains a tuple of strings indicating the combination of parameters to estimate. In addition, parameters can be excluded from estimation by using the prefix ~. For example, the values ['pose','~transx']["pose","~transx"]["pose","~transx"]["pose","~transx"]["pose","~transx"]["pose","~transx"] have the same effect as ['alpha','beta','gamma','transy','transz']["alpha","beta","gamma","transy","transz"]["alpha","beta","gamma","transy","transz"]["alpha","beta","gamma","transy","transz"]["alpha","beta","gamma","transy","transz"]["alpha","beta","gamma","transy","transz"]. Whereas ['all','~focus']["all","~focus"]["all","~focus"]["all","~focus"]["all","~focus"]["all","~focus"] determines all internal and external parameters except the focus, for instance. The prefix ~ can be used with all parameter values except 'all'.

What is the order within the individual parameters?

The length of the tuple NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose corresponds to the number of calibration images, e.g., using 15 images leads to a length of the tuple NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose equal to 15*7=105 (15 times the 7 external camera parameters). The first 7 values correspond to the pose of the calibration plate in the first image, the next 7 values to the pose in the second image, etc.

This fixed number of calibration images has to be considered within the tuples with the coordinates of the 3D model marks and the extracted 2D marks. If 15 images are used, the length of the tuples NRowNRowNRowNRowNRowNRow and NColNColNColNColNColNCol is 15 times the length of the tuples with the coordinates of the 3D model marks (NXNXNXNXNXNX, NYNYNYNYNYNY, and NZNZNZNZNZNZ). If every image consists 49 marks, the length of the tuples NRowNRowNRowNRowNRowNRow and NColNColNColNColNColNCol is 15*49=735, while the length of the tuples NXNXNXNXNXNX, NYNYNYNYNYNY, and NZNZNZNZNZNZ is 49. The order of the values in NRowNRowNRowNRowNRowNRow and NColNColNColNColNColNCol is “image after image”, i.e., using 49 marks the first 3D model point corresponds to the 1st, 50th, 99th, 148th, 197th, 246th, etc. extracted 2D mark.

The 3D model points can be read from a calibration plate description file using the operator caltab_pointscaltab_pointsCaltabPointscaltab_pointsCaltabPointsCaltabPoints. Initial values for the poses of the calibration plate can be determined by applying find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose for each image. The tuple NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose is set by the concatenation of all these poses.

What is the meaning of the output parameters?

If the camera calibration process is finished successfully, i.e., the minimization process has converged, the output parameters CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam and NFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPose contain the computed exact values for the internal and external camera parameters. The length of the tuple NFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPose corresponds to the length of the tuple NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose.

The representation types of NFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPose correspond to the representation type of the first tuple of NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose (see create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose). You can convert the representation type by convert_pose_typeconvert_pose_typeConvertPoseTypeconvert_pose_typeConvertPoseTypeConvertPoseType.

The computed average error (ErrorsErrorsErrorsErrorsErrorserrors) reflects the accuracy of the calibration. The error value (root mean square error of the position) is measured in pixels.

Must I use a planar calibration object?

No. The operator camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration is designed in a way that the input tuples NXNXNXNXNXNX, NYNYNYNYNYNY, NZNZNZNZNZNZ, NRowNRowNRowNRowNRowNRow, and NColNColNColNColNColNCol can contain any 3D/2D correspondences, see the above paragraph explaining the order of the single parameters.

Thus, it makes no difference how the required 3D model marks and the corresponding extracted 2D marks are determined. On one hand, it is possible to use a 3D calibration object, on the other hand, you also can use any characteristic points (natural landmarks) with known position in the world. By setting EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams to 'pose'"pose""pose""pose""pose""pose", it is thus possible to compute the pose of an object in camera coordinates! For this, at least three 3D/2D-correspondences are necessary as input. NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose can, e.g., be generated directly as shown in the program example for create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose.

Attention

The minimization process of the calibration depends on the initial values of the internal (StartCamParamStartCamParamStartCamParamStartCamParamStartCamParamstartCamParam) and external (NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose) camera parameters. The computed average errors ErrorsErrorsErrorsErrorsErrorserrors give an impression of the accuracy of the calibration. The errors (deviations in x and y coordinates) are measured in pixels.

For line scan cameras, it is possible to set the start value for the internal camera parameter Sy to the value 0.0. In this case, it is not possible to determine the position of the principal point in y-direction. Therefore, EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams must contain the term '~cy'"~cy""~cy""~cy""~cy""~cy". The effective distance of the principle point from the sensor line is then always pv = Sy*Cy = 0.0.

Parallelization

Parameters

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

Ordered tuple with all x coordinates of the calibration marks (in meters).

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

Ordered tuple with all y coordinates of the calibration marks (in meters).

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

Ordered tuple with all z coordinates of the calibration marks (in meters).

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

Ordered tuple with all row coordinates of the extracted calibration marks (in pixels).

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

Ordered tuple with all column coordinates of the extracted calibration marks (in pixels).

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

Initial values for the internal camera parameters.

Number of elements: StartCamParam == 8 || StartCamParam == 11 || StartCamParam == 12

NStartPoseNStartPoseNStartPoseNStartPoseNStartPoseNStartPose (input_control)  pose(-array) HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Ordered tuple with all initial values for the external camera parameters.

EstimateParamsEstimateParamsEstimateParamsEstimateParamsEstimateParamsestimateParams (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Camera parameters to be estimated.

Default value: 'all' "all" "all" "all" "all" "all"

List of values: 'all'"all""all""all""all""all", 'alpha'"alpha""alpha""alpha""alpha""alpha", 'beta'"beta""beta""beta""beta""beta", 'camera'"camera""camera""camera""camera""camera", 'cx'"cx""cx""cx""cx""cx", 'cy'"cy""cy""cy""cy""cy", 'focus'"focus""focus""focus""focus""focus", 'gamma'"gamma""gamma""gamma""gamma""gamma", 'kappa'"kappa""kappa""kappa""kappa""kappa", 'poly'"poly""poly""poly""poly""poly", 'poly_rad_2'"poly_rad_2""poly_rad_2""poly_rad_2""poly_rad_2""poly_rad_2", 'poly_rad_4'"poly_rad_4""poly_rad_4""poly_rad_4""poly_rad_4""poly_rad_4", 'poly_rad_6'"poly_rad_6""poly_rad_6""poly_rad_6""poly_rad_6""poly_rad_6", 'poly_tan_2'"poly_tan_2""poly_tan_2""poly_tan_2""poly_tan_2""poly_tan_2", 'pose'"pose""pose""pose""pose""pose", 'sx'"sx""sx""sx""sx""sx", 'sy'"sy""sy""sy""sy""sy", 'transx'"transx""transx""transx""transx""transx", 'transy'"transy""transy""transy""transy""transy", 'transz'"transz""transz""transz""transz""transz", 'vx'"vx""vx""vx""vx""vx", 'vy'"vy""vy""vy""vy""vy", 'vz'"vz""vz""vz""vz""vz"

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

Internal camera parameters.

NFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPoseNFinalPose (output_control)  pose(-array) HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Ordered tuple with all external camera parameters.

ErrorsErrorsErrorsErrorsErrorserrors (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Average error distance in pixels.

Example (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
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    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], \
                   [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')

Example (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
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    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], \
                   [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')

Example (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
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    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], \
                   [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')

Example (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,
                   "all", &CameraParam, &NFinalPose, &Errors);
// write internal camera parameters to file
write_cam_par(CameraParam, "campar.dat");

Example (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
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    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], \
                   [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')

Example (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
find_marks_and_pose(Image1, Caltab1, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, Caltab2, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, Caltab3, 'caltab.descr', \
                    [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                    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], \
                   [0.008, 0.0, 0.000011, 0.000011, 384, 288, 768, 576], \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  write internal camera parameters to file
write_cam_par(CameraParam, 'campar.dat')

Result

camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration returns 2 (H_MSG_TRUE) if all parameter values are correct and the desired camera parameters have been determined by the minimization algorithm. If necessary, an exception is raised.

Possible Predecessors

find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose, caltab_pointscaltab_pointsCaltabPointscaltab_pointsCaltabPointsCaltabPoints, read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar

Possible Successors

write_posewrite_poseWritePosewrite_poseWritePoseWritePose, pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d, disp_caltabdisp_caltabDispCaltabdisp_caltabDispCaltabDispCaltab, sim_caltabsim_caltabSimCaltabsim_caltabSimCaltabSimCaltab

Alternatives

calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras

See also

find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab, find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose, disp_caltabdisp_caltabDispCaltabdisp_caltabDispCaltabDispCaltab, sim_caltabsim_caltabSimCaltabsim_caltabSimCaltabSimCaltab, write_cam_parwrite_cam_parWriteCamParwrite_cam_parWriteCamParWriteCamPar, read_cam_parread_cam_parReadCamParread_cam_parReadCamParReadCamPar, create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose, convert_pose_typeconvert_pose_typeConvertPoseTypeconvert_pose_typeConvertPoseTypeConvertPoseType, write_posewrite_poseWritePosewrite_poseWritePoseWritePose, read_poseread_poseReadPoseread_poseReadPoseReadPose, pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose, caltab_pointscaltab_pointsCaltabPointscaltab_pointsCaltabPointsCaltabPoints, gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab, calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras

Module

Calibration


ClassesClassesClassesClasses | | | | Operators