Multi-View

List of Operators ↓

This chapter describes how to calibrate different multi-view camera setups.

General Objectives

To achieve maximum accuracy of measurement for your camera setup, you have to calibrate it accordingly. Therefore, a camera model is determined, which describes the projection of a 3D world point into a (sub-)pixel in the image.

The following paragraphs state how to perform the calibration of different camera setups. In particular they describe

Calibration Object

For a successful calibration of your camera setup, at least one calibration object with accurately known metric properties is needed, e.g., a HALCON calibration plate. Before calling calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras, take a series of images of the calibration object in different orientations and make sure that the whole field of view or measurement volume is covered. The success of the calibration highly depends on the quality of the calibration object and the images. So you might want to exercise special diligence during the acquisition of the calibration images. See the section “How to take a set of suitable images?” for further information.

Preparing the Calibration Input Data

Before calling calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras, you must create and adapt the calibration data model with the following steps:

  1. Create a calibration data model with the operator create_calib_datacreate_calib_dataCreateCalibDataCreateCalibDataCreateCalibData, specifying the number of cameras in the setup and the number of used calibration objects.

  2. Specify the camera type and the initial internal camera parameters for all cameras with the operator set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamSetCalibDataCamParam. Note that only cameras of the same type can be calibrated in a single setup.

  3. Specify the description of all calibration objects with the operator set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObject.

  4. Collect observation data with the operators find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject or set_calib_data_observ_pointsset_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsSetCalibDataObservPoints, i.e., obtain the image coordinates of the extracted calibration marks of the calibration object and a roughly estimated pose of the calibration object relative to the observing camera.

  5. Configure the calibration process, e.g., specify the reference camera or exclude certain camera parameters from the optimization. You can specify parameters for the complete setup or just configure parameters of individual cameras as well as calibration object poses in the setup with the operator set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibData. For example, if the image sensor cell size of camera 0 is known precisely and only the rest of the parameters need to be calibrated, you call set_calib_data (CalibDataID, 'camera', 0, \ 'excluded_settings', ['sx','sy']).

Performing the Actual Camera Calibration

The calibration performed by calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras depends on the camera types that are involved in the calibration setup. While different camera setups require specific conditions when acquiring images, the basic steps of the calibration procedure for setups including projective and/or telecentric cameras are similar:

  1. Building a chain of observation poses: In the first step, the operator calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras tries to build a valid chain of observation poses, that connects all cameras and calibration object poses to the reference camera. Depending on the setup, the conditions for a valid chain of poses differ. For specific information see the respective paragraphs below. If there is a camera that cannot be reached (i.e., it is not observing any calibration object pose that can be connected in the chain), the calibration process is terminated with an error. Otherwise, the algorithm initializes all calibration items' poses by going down this chain.

  2. First optimization: In this step, calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras performs the actual optimization for all optimization parameters that were not explicitly excluded from the calibration.

  3. Second optimization: Based on the so-far calibrated cameras, the algorithm corrects all observations that contain mark contour information (see find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject). Then, the calibration setup is optimized anew for the corrections to take effect. If no contour information was available, this step is skipped.

  4. Compute quality of parameter estimation: In the last step, calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras computes the standard deviations and the covariances of the calibrated internal camera parameters.

Detailed information about the calibration of the mentioned camera setups and additionally about the calibration of line scan cameras can be found in the following paragraphs.

Projective area scan cameras

For a setup with projective area scan cameras ('area_scan_division'"area_scan_division""area_scan_division""area_scan_division""area_scan_division", 'area_scan_polynomial'"area_scan_polynomial""area_scan_polynomial""area_scan_polynomial""area_scan_polynomial", 'area_scan_tilt_division'"area_scan_tilt_division""area_scan_tilt_division""area_scan_tilt_division""area_scan_tilt_division", 'area_scan_tilt_polynomial'"area_scan_tilt_polynomial""area_scan_tilt_polynomial""area_scan_tilt_polynomial""area_scan_tilt_polynomial", 'area_scan_tilt_image_side_telecentric_division'"area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division", 'area_scan_tilt_image_side_telecentric_polynomial'"area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial", 'area_scan_hypercentric_division'"area_scan_hypercentric_division""area_scan_hypercentric_division""area_scan_hypercentric_division""area_scan_hypercentric_division", and 'area_scan_hypercentric_polynomial'"area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial"), the calibration is performed in the four steps listed above. The algorithm tries to build a chain of observation poses that connects all cameras and calibration object poses to the reference camera like in the diagram below.

image/svg+xml image/svg+xml
(1) (2)
(1) All cameras can be connected by a chain of observation poses. (2) The leftmost camera is isolated, because the left calibration plate cannot be seen by any other camera.
Telecentric area-scan cameras

For a setup with telecentric area-scan cameras ('area_scan_telecentric_division'"area_scan_telecentric_division""area_scan_telecentric_division""area_scan_telecentric_division""area_scan_telecentric_division", 'area_scan_telecentric_polynomial'"area_scan_telecentric_polynomial""area_scan_telecentric_polynomial""area_scan_telecentric_polynomial""area_scan_telecentric_polynomial", 'area_scan_tilt_bilateral_telecentric_division'"area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division", 'area_scan_tilt_bilateral_telecentric_polynomial'"area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial", 'area_scan_tilt_object_side_telecentric_division'"area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division", or 'area_scan_tilt_object_side_telecentric_polynomial'"area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial"), similar to projective area scan cameras, the same four steps that are listed above are executed. In the first step (building a chain of observation poses that connects all cameras and calibration objects), additional conditions must hold. Since the pose of an object can only be determined up to a translation along the optical axis, each calibration object must be observed by at least two cameras to determine its relative location. Otherwise, its pose is excluded from the calibration. Also, since a planar calibration object appears the same from two different observation angles, the relative pose of the cameras among each other cannot be determined unambiguously. Therefore there are always two valid alternative relative poses. Both alternatives result in a consistent camera setup which can be used for measuring. Since the ambiguity cannot be resolved, the first of the alternatives is returned. Note that, if the returned pose is not the real pose but the alternative one, then this will result in a mirrored reconstruction.

Projective and telecentric area scan cameras

For a mixed setup with projective and telecentric area scan cameras, the algorithm performs the same four steps as enumerated above. Possible ambiguities during the first step (building a chain of observation poses that connects all cameras and calibration objects), as described above for the setup with telecentric cameras, can be resolved as long as there exists a chain of observation poses consisting of all perspective cameras and a sufficient number of calibration objects. Here, sufficient number means that each telecentric camera observes at least two calibration objects of this chain.

image/svg+xml (P) (T) (P) image/svg+xml (P) (T) (P)
(1) (2)
Mixed calibration setup with perspective (P) and telecentric (T) area scan cameras. (1) All perspective cameras are connected by a chain of observation poses that only contains perspective cameras. (2) The second calibration plate (from the left) is not observed by the rightmost perspective camera. Therefore, the relative pose between both perspective cameras cannot be determined uniquely.
Line scan cameras

For a setup with line scan cameras ('line_scan'"line_scan""line_scan""line_scan""line_scan"), some restrictions exist: First, only one camera can be calibrated and only one calibration object per setup can be used. Furthermore, the calibration does not deliver information about standard deviations and covariances for the estimated parameters.

Finally, for calibration plates with rectangularly arranged marks (see gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab) all observations must contain the projection coordinates of all calibration marks of the calibration object. For calibration plates with hexagonally arranged marks (see create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltab) this restriction is not applied. You can find further information about calibration plates and the acquisition of calibration images in the section “Additional information about the calibration process”.

Checking the Success of the Calibration

After a successful calibration, the root mean square error (RMSE) of the back projection of the optimization is returned in ErrorErrorErrorErrorerror (in pixels). The error gives a general indication whether the optimization was successful as it corresponds to the average distance (in pixels) between the backprojected calibration points and their extracted image coordinates.

If only a single camera is calibrated, an ErrorErrorErrorErrorerror in the order of 0.1 pixel (the typical detection error by extraction of the coordinates of the projected calibration markers) is an indication that the optimization fits the observation data well. If ErrorErrorErrorErrorerror strongly differs from 0.1 pixels, the calibration did not perform well. Reasons for this might be, e.g., a poor image quality, an insufficient number of calibration images, or an inaccurate calibration plate. If more than one camera is calibrated simultaneously, the value of ErrorErrorErrorErrorerror is more difficult to judge. As a rule of thumb, ErrorErrorErrorErrorerror should be as small as possible and at least smaller than 1.0, thus indicating that a subpixel precise evaluation of the data is possible with the calibrated parameters. This value might be difficult to reach in particular configurations. For further analysis of the quality of the calibration, refer to the standard deviations and covariances of the estimated parameters (currently for area scan cameras only, see get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData).

Getting the Calibration Results

The results of the calibration, i.e., internal camera parameters, camera poses (external camera parameters), calibration objects poses etc., can be queried with get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData.

The poses of telecentric cameras can only be determined up to a displacement along the z-axis of the coordinate system of the respective camera (perpendicular to the image plane). Therefore, all camera poses are moved along this axis until they all lie on a common sphere. The center of the sphere is defined by the pose of the first calibration object. The radius of the sphere depends on the calibration setup. If projective and telecentric area scan cameras are calibrated, the radius is the maximum over all distances from the perspective cameras to the first calibration object. Otherwise, if only telecentric area scan cameras are considered, the radius is equal to 1 m.

Camera Parameters

Regarding camera parameters, you can distinguish between 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. Below is an overview of all available camera types and their respective parameters CameraParam. In the list, “projective area scan cameras” refers to the property that the lens performs a perspective projection on the object-side of the lens, while “telecentric area scan cameras” refers to the property that the lens performs a telecentric projection on the object-side of the lens.

Area scan cameras

have 9 to 16 internal parameters depending on the camera type.

For reasons explained below, parameters that are marked with an * asterisk are fixed and not estimated by the algorithm.

Area scan cameras with regular lenses

Projective area scan cameras

'area_scan_division'"area_scan_division""area_scan_division""area_scan_division""area_scan_division"

['area_scan_division', Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_polynomial'"area_scan_polynomial""area_scan_polynomial""area_scan_polynomial""area_scan_polynomial"

['area_scan_polynomial', Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

Telecentric area scan cameras

'area_scan_telecentric_division'"area_scan_telecentric_division""area_scan_telecentric_division""area_scan_telecentric_division""area_scan_telecentric_division"

['area_scan_telecentric_division', Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_division", Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_division", Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_division", Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_division", Magnification, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_telecentric_polynomial'"area_scan_telecentric_polynomial""area_scan_telecentric_polynomial""area_scan_telecentric_polynomial""area_scan_telecentric_polynomial"

['area_scan_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

Area scan cameras with tilt lenses

Projective area scan cameras

'area_scan_tilt_division'"area_scan_tilt_division""area_scan_tilt_division""area_scan_tilt_division""area_scan_tilt_division"

['area_scan_tilt_division', Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_division", Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_division", Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_division", Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_division", Focus, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_polynomial'"area_scan_tilt_polynomial""area_scan_tilt_polynomial""area_scan_tilt_polynomial""area_scan_tilt_polynomial"

['area_scan_tilt_polynomial', Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_polynomial", Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_polynomial", Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_polynomial", Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_polynomial", Focus, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_image_side_telecentric_division'"area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division""area_scan_tilt_image_side_telecentric_division"

['area_scan_tilt_image_side_telecentric_division', Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_division", Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_division", Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_division", Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_division", Focus, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_image_side_telecentric_polynomial'"area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial""area_scan_tilt_image_side_telecentric_polynomial"

['area_scan_tilt_image_side_telecentric_polynomial', Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_polynomial", Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_polynomial", Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_polynomial", Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_image_side_telecentric_polynomial", Focus, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]

Telecentric area scan cameras

'area_scan_tilt_bilateral_telecentric_division'"area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division""area_scan_tilt_bilateral_telecentric_division"

['area_scan_tilt_bilateral_telecentric_division', Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_division", Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_division", Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_division", Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_division", Magnification, Kappa, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_bilateral_telecentric_polynomial'"area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial""area_scan_tilt_bilateral_telecentric_polynomial"

['area_scan_tilt_bilateral_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_bilateral_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, Tilt, Rot, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_object_side_telecentric_division'"area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division""area_scan_tilt_object_side_telecentric_division"

['area_scan_tilt_object_side_telecentric_division', Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_division", Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_division", Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_division", Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_division", Magnification, Kappa, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_tilt_object_side_telecentric_polynomial'"area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial""area_scan_tilt_object_side_telecentric_polynomial"

['area_scan_tilt_object_side_telecentric_polynomial', Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_tilt_object_side_telecentric_polynomial", Magnification, K1, K2, K3, P1, P2, ImagePlaneDist, Tilt, Rot, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

Area scan cameras with hypercentric lenses

Projective area scan cameras with hypercentric lenses

'area_scan_hypercentric_division'"area_scan_hypercentric_division""area_scan_hypercentric_division""area_scan_hypercentric_division""area_scan_hypercentric_division"

['area_scan_hypercentric_division', Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_division", Focus, Kappa, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

'area_scan_hypercentric_polynomial'"area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial""area_scan_hypercentric_polynomial"

['area_scan_hypercentric_polynomial', Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]["area_scan_hypercentric_polynomial", Focus, K1, K2, K3, P1, P2, Sx, Sy*, Cx, Cy, ImageWidth, ImageHeight]

Description of the internal camera parameters:

CameraType:

Type of the camera, as listed above.

Focus:

Focal length of the lens (only for lenses that perform a perspective projection on the object side of the lens).

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

Magnification:

Magnification of the lens (only for lenses that perform a telecentric projection on the object side of the lens).

The initial value is the nominal magnification of the used telecentric lens (the image size divided by the object size), e.g., 0.2.

Kappa :

Distortion coefficient to model the radial lens distortions (only for the division model).

Use 0.0 as initial value.

K1, K2, K3, P1, P2:

Distortion coefficients to model the radial and decentering lens distortions (only for the polynomial model).

Use 0.0 as initial value for all five coefficients.

ImagePlaneDist:

Distance of the exit pupil of the lens to the image plane. The exit pupil is the (virtual) image of the aperture stop (typically the diaphragm), as viewed from the image side of the lens. Typical values are in the order of a few centimeters to very large values if the lens is close to being image-side telecentric.

Tilt, Rot:

The tilt angle describes the angle by which the optical axis is tilted with respect to the normal of the sensor plane (corresponds to a rotation around the x-axis). The rotation angle describes the rotation around the optical axis (z-axis). For a rotation the optical axis gets tilted vertically down with respect to the camera housing, corresponds to the optical axis being tilted horizontally to the left (direction of view along the z-z-axis), corresponds to the optical axis being tilted vertically up, and corresponds to the optical axis being tilted horizontally to the right.

These parameters are only used if a tilt lens is part of the camera setup.
image/svg+xml y x z y x z 2. tilt 1. rot ImagePlaneDist
The tilt of the lens is described by the parameters , and ImagePlaneDistImagePlaneDistImagePlaneDistImagePlaneDistimagePlaneDist. describes the orientation of the tilt axis in relation to the x-axis of the sensor and has to be applied first. describes the actual tilt of the lens. ImagePlaneDistImagePlaneDistImagePlaneDistImagePlaneDistimagePlaneDist is the distance of the exit pupil of the lens to the image plane.

These angles are typically roughly known based on the considerations that led to the use of the tilt lens or can be read off from the mechanism by which the lens is tilted.

Sx, Sy:

Scale factors. They corresponds to the horizontal and vertical distance between two neighboring cells on the sensor. Since in most cases the image signal is sampled line-synchronously, is determined by the dimension of the sensor and does not need to be estimated by the calibration process.

The initial values depend on the dimensions of the used chip of the camera. See the technical specification of your camera for the actual values. Attention: These values increase if the image is subsampled!

As projective cameras are described through the pinhole camera model, it is impossible to determine FocusFocusFocusFocusfocus, and simultaneously. Therefore, the algorithm will keep fixed.

For telecentric lenses, it is impossible to determine MagnificationMagnificationMagnificationMagnificationmagnification, , and simultaneously. Therefore, the algorithm will keep fixed.

For image-side telecentric tilt lenses (see chapter “Basics”, section “Camera Model and Parameters” in the “Solution Guide III-C 3D Vision” for an overview of different types of tilt lenses), it is impossible to determine FocusFocusFocusFocusfocus, , , and the tilt parameters and simultaneously. Therefore, additionally to , the algorithm will keep fixed.

For bilateral telecentric tilt lenses, it is impossible to determine MagnificationMagnificationMagnificationMagnificationmagnification, , , and the tilt parameters and simultaneously. Therefore, additionally to , the algorithm will keep fixed.

Cx, Cy:

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

Use the half image width and height as initial values. Attention: These values decrease if the image is subsampled!

ImageWidth, Image Height:

Width and height of the sampled image. Attention: These values decrease if the image is subsampled!

Line scan cameras

Line scan cameras have the following 12 internal parameters: ['line_scan', Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]["line_scan", Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]["line_scan", Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]["line_scan", Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]["line_scan", Focus, Kappa, Sx*, Sy*, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

For reasons explained below, parameters that are marked with an * asterisk are fixed and not estimated by the algorithm.

CameraType:

Type of the camera ('line_scan'"line_scan""line_scan""line_scan""line_scan").

Focus:

Focal length of the lens.

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

Kappa :

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

Use 0.0 as initial value.

Sx:

Scale factor. Corresponds to the horizontal distance between two neighboring cells on the sensor. Note that Focus and cannot be determined simultaneously. Therefore, is kept fixed in the calibration. The initial value for can be taken from the technical specifications of the camera. Attention: This value increases if the image is subsampled!

Sy:

Scale factor. During the calibration, it appears only in the form . Consequently, and cannot be determined simultaneously. Therefore, in the calibration, is kept fixed. describes the distance of the image center point from the sensor line in meters. The initial value for can be taken from the technical specifications of the camera. Attention: This value increases if the image is subsampled!

Cx:

Column coordinate of the image center point (center of the radial distortions). Use half of the image width as the initial value for . Attention: This value decreases if the image is subsampled!

Cy:

Distance of the image center point (center of the radial distortions) from the sensor line in scanlines. The initial value can normally be set to 0.

ImageWidth, ImageHeight:

Width and height of the sampled image. Attention: These values decrease if the image is subsampled!

Vx, Vy, Vz:

X-, Y-, and Z-component of the motion vector.

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, use the initial values . The initial value for can then be determined, e.g., from a line scan image of an object with known size (e.g., calibration plate, ruler):

With

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:

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:

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

Restrictions for internal camera parameters

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.

For all operators that use camera parameters as input the respective parameter values are checked as to whether they fulfill the following restrictions:

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

External camera parameters:

The following 6 parameters describe the 3D pose, i.e., the position and orientation of the world coordinate system relative to the camera coordinate system. The x- and y-axis of the camera coordinate system are parallel to the column and row axes of the image, while the z-axis is perpendicular to the image plane. For line scan cameras, the pose of the world coordinate system refers to the camera coordinate system of the first image line.

TransX:

Translation along the x-axis of the camera coordinate system.

TransY:

Translation along the y-axis of the camera coordinate system.

TransZ:

Translation along the z-axis of the camera coordinate system.

RotX:

Rotation around the x-axis of the camera coordinate system.

RotY:

Rotation around the y-axis of the camera coordinate system.

RotZ:

Rotation around the z-axis of the camera coordinate system.

The pose tuple contains one more element, which is the representation type of the pose. It codes the combination of the parameters OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform, OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation and ViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform. See create_posecreate_poseCreatePoseCreatePoseCreatePose for more information about 3D poses.

When using a standard HALCON calibration plate, the world coordinate system is defined by the coordinate system of the calibration plate. For calibration plates with hexagonally arranged marks (see create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltab), the origin of the coordinate system is located at the center of the central mark of the first finder pattern. For calibration plates with rectangularly arranged marks (see gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab) the origin is located in the middle of the surface of the calibration plate. In both cases, the z-axis of the coordinate system is pointing into the calibration plate, its x-axis is pointing to the right, and its y-axis is pointing downwards with the direction of view along the z-axis.

If a HALCON calibration plate is used, you can use the operator find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject to determine initial values for all parameters. Using HALCON calibration plates with rectangularly arranged marks, a combination of the two operators find_caltabfind_caltabFindCaltabFindCaltabFindCaltab and find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose will have the same effect.

Parameter units:

HALCON calibration plates use meters as unit. The camera parameters use corresponding units. Of course, calibration can be done using different units, but in this case the related parameters have to be adapted. Here, we list the HALCON default units for the different camera parameters:

Parameter Unit
External RotX, RotY, RotZ , ,
TransX, TransY, TransZ , ,
Internal Cx, Cy ,
Focus
ImagePlaneDist
ImageWidth, ImageHeight ,
K1, K2, K3 , ,
Kappa
P1, P2 ,
Magnification - (scalar)
Sx, Sy ,
Tilt, Rot ,
Vx, Vy, Vz , ,

Additional Information about the Calibration Process

The use of calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras leads to some questions, which are addressed in the following sections:

How to obtain an appropriate calibration plate?

You can obtain high-precision calibration plates in various sizes and materials from your local distributor. These calibration plates come with associated description files and can be easily extracted with find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject.

It is also possible to use any arbitrary object for calibration. The only requirement is that the object has characteristic points that can be robustly detected in the image and that the 3D world position of these points is known with high accuracy. See the “Solution Guide III-C 3D Vision” for details.

Self-printed calibration objects are usually not accurate enough for high-precision applications.

How to take a set of suitable images?

With the combination of lens (fixed focus setting!), camera, and frame grabber to be calibrated, a set of images of the calibration plate must be taken (see open_framegrabberopen_framegrabberOpenFramegrabberOpenFramegrabberOpenFramegrabber and grab_imagegrab_imageGrabImageGrabImageGrabImage). The following items must be considered:

Your local distributor can provide you with two different types of HALCON calibration plates: Calibration plates with hexagonally arranged marks (see create_caltabcreate_caltabCreateCaltabCreateCaltabCreateCaltab) and calibration plates with rectangularly arranged marks (see gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab). Since these two calibration plates substantially differ from each other, additional particularities have to be considered beside the general advices (see also find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject):

HALCON calibration plates with hexagonally arranged marks

HALCON calibration plates with rectangularly arranged marks

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 section “Camera parameters” and “The Used 3D camera model”).

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. Note, however, that the calibration sequence used for the polynomial model must provide an even better 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.

The Used 3D Camera Model

In general, camera calibration means the exact determination of the parameters that model the (optical) projection of any 3D world point into a (sub-)pixel (r,c) in the image. This is important if the original 3D pose of an object must be computed from the image (e.g., for measuring industrial parts). The appropriate projection model depends on the camera type used in your setup.

For the modeling of this projection process, which 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 on the object side of the lens and that may show radial and decentering distortions. The lens may be a tilt lens, i.e., the optical axis of the lens may be tilted with respect to the camera's sensor (this is sometimes called a Scheimpflug lens). Since hypercentric lenses also perform a perspective projection, cameras with hypercentric lenses are pinhole cameras. The models for regular (i.e., non-tilt) pinhole and image-side telecentric lenses are identical. In contrast, the models for pinhole and image-side telecentric tilt lenses differ substantially, as described below.

Area scan telecentric camera:

The combination of an area scan camera with a lens that is telecentric on the object-side of the lens, i.e., that effects a parallel projection on the object-side of the lens, and that may show radial and decentering distortions. The lens may be a tilt lens. The models for regular (i.e., non-tilt) bilateral and object-side telecentric lenses are identical. In contrast, the models for bilateral and object-side telecentric tilt lenses differ substantially, as described below.

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. Tilt lenses are currently not supported for line scan cameras.

To transform a 3D point which is given in world coordinates, into a 2D point , which is given in pixel coordinates, a chain of transformations is needed:

3D world point
Transformed into camera coordinate system
Projected into image plane (2D point, still in metric coordinates)
Lens distortion applied
If tilted lens is used, the point is projected on a tilted image plane. In this case the distorted point only lies on a virtual image plane of a system without tilt.
Pixel coordinates

The following paragraphs describe these steps in more detail for area scan cameras and subsequently for line scan cameras. For a even more detailed description of the different 3D camera models as well as some explanatory diagrams please refer to the chapter “Basics”, section “Camera Model and Parameters” in the “Solution Guide III-C 3D Vision”.

Transformation step 1:

The point is transformed from world into camera coordinates (points as homogeneous vectors, compare affine_trans_point_3daffine_trans_point_3dAffineTransPoint3dAffineTransPoint3dAffineTransPoint3d) by :

with and being the rotation and translation matrices (refer to the chapter “Basics”, section “3D Transformations and Poses`” in the “Solution Guide III-C 3D Vision” for detailed information).

Transformation step 2:

If the underlying camera model is an area scan pinhole camera, the projection of into the image plane is described by the following equation: where . For cameras with hypercentric lenses, the following equation holds instead:

If an area scan telecentric camera is used, the corresponding equation is: where .

Transformation step 3:

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 KappaKappaKappaKappakappa 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:

These equations can be inverted analytically, which leads to the following equations that transform undistorted coordinates into distorted coordinates:

The polynomial model uses three parameters ( ) to model the radial distortions and two parameters ( ) 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: with

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

Additional transformation step for tilt lenses:

If the camera lens is a tilt lens, the tilt of the lens with respect to the image plane is described by the rotation angle and the tilt angle .

In this step you have to further distinguish between different types of tilt lenses as described below. See chapter “Basics”, section “Camera Model and Parameters” in the “Solution Guide III-C 3D Vision” for an overview of different types of tilt lenses.

For projective tilt lenses and object-side telecentric tilt lenses (which perform a perspective projection on the image side of the lens) the projection of into the point , which lies in the tilted image plane, is described by a projective 2D transformation, i.e., by the homogeneous 3×3 matrix (see projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2d):

where is the additional coordinate from the projective transformation of a homogeneous point. where and with and .

For image-side telecentric tilt lenses and bilateral telecentric tilt lenses (which perform a parallel projection on the image side of the lens), the projection onto the tilted image plane is described by a linear 2D transformation, i.e., by a 2×2 matrix: where is defined as above for projective lenses.

Transformation step 4: /

Finally, the point (or if a tilt lens is present) is transformed from the image plane coordinate system into the image coordinate system (the pixel coordinate system):

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 that must be given in [meter/row] 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 .

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 is taken into account during the projection of the point into the image. Consequently, only the pose of the first image line is computed by the operator find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject (and stored by calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras in the calibration results).

For line scan pinhole cameras, the transformation from world to camera coordinates ( ) works in the same way. Therefore, you can also apply transformation step 1 as described for area scan cameras above. After that, the projection of the point that is given in the camera coordinate system into (sub-)pixel coordinates in the image is modeled as follows:

Assuming the following set of equations must be solved for , , and : with

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:

Further Limitations Related to Specific Camera Types

For pinhole cameras, if the calibration plates are parallel to each other in all images (in particular, if they all lie in the same plane), it is impossible to determine FocusFocusFocusFocusfocus together with all six of the external camera parameters. For example, it is impossible to determine FocusFocusFocusFocusfocus and the distance of the calibration plates to the camera in this case. To be able to calibrate all camera parameters uniquely, make sure that you acquire images of the calibration plate tilted in different orientations.

For telecentric lenses, the distance of the calibration plate from the camera cannot be determined. Therefore, the z-component of the resulting calibration plate pose is set to 1 m in the calibration results.

For tilt lenses the greater the lens distortion is, the more accurately the tilt can be determined. For lenses with small distortions, the tilt cannot be determined robustly. Therefore, the optimized tilt parameters may differ significantly from the nominal tilt parameters of the setup. If this is the case, please check ErrorErrorErrorErrorerror. If ErrorErrorErrorErrorerror is small, the resulting camera parameters describe the imaging geometry consistently within the calibrated volume and can be used for accurate measurements.

For perspective tilt lenses and object-side telecentric tilt lenses, the image plane distance can only be determined uniquely if the tilt is not 0 degrees. The smaller the tilt, the less accurately the image plane distance can be determined. Therefore, the optimized image plane distance may differ significantly from the nominal image plane distance of the setup. If this is the case, please check ErrorErrorErrorErrorerror. If ErrorErrorErrorErrorerror is small, the resulting camera parameters describe the imaging geometry consistently within the calibrated volume and can be used for accurate measurements.

For perspective tilt lenses and object-side telecentric tilt lenses that are tilted around the horizontal or vertical axis, i.e., for which the rotation angle is 0, 90, 180, or 270 degrees, the tilt angle , scale factor , the focal length (for perspective tilt lenses) or the magnification (for object-side telecentric tilt lenses), and the distance of the tilted image plane from the perspective projection center cannot be determined uniquely. In this case, should be excluded from the optimization by calling set_calib_data (CalibDataID, 'camera', 'general', \ 'excluded_settings', 'sx').

Additionally, note that for tilt lenses it is only possible to determine and simultaneously. This is an implementation choice that makes the optimization numerically more robust. Consequently, the parameters and are excluded simultaneously from the optimization by calling set_calib_data (CalibDataID, 'camera', 'general', \ 'excluded_settings', 'tilt').

Pinhole cameras with tilt lenses with large focal lengths have nearly telecentric projection characteristics. Therefore, as described before, and the tilt parameters and are correlated and can only be determined imprecisely simultaneously. In this case, it is again advisable to exclude from the optimization.

For telecentric lenses, there are always two possible poses of a calibration plate for a single image. Therefore, it is not possible to decide which one of the two poses is actually present in the image. This ambiguity also effects the tilt parameters and of a telecentric tilt lens. Consequently, depending on the initial parameters for and the camera calibration may return the alternative parameters instead of the nominal ones. If this is the case, please check ErrorErrorErrorErrorerror. If ErrorErrorErrorErrorerror is small, the resulting camera parameters describe the imaging geometry consistently within the calibrated volume and can be used for accurate measurements.


List of Operators

calibrate_camerasCalibrateCamerasCalibrateCamerascalibrate_cameras
Determine all camera parameters by a simultaneous minimization process.
clear_calib_dataClearCalibDataClearCalibDataclear_calib_data
Free the memory of a calibration data model.
clear_camera_setup_modelClearCameraSetupModelClearCameraSetupModelclear_camera_setup_model
Free the memory of a calibration setup model.
create_calib_dataCreateCalibDataCreateCalibDatacreate_calib_data
Create a HALCON calibration data model.
create_camera_setup_modelCreateCameraSetupModelCreateCameraSetupModelcreate_camera_setup_model
Create a model for a setup of calibrated cameras.
deserialize_calib_dataDeserializeCalibDataDeserializeCalibDatadeserialize_calib_data
Deserialize a serialized calibration data model.
deserialize_camera_setup_modelDeserializeCameraSetupModelDeserializeCameraSetupModeldeserialize_camera_setup_model
Deserialize a serialized camera setup model.
get_calib_dataGetCalibDataGetCalibDataget_calib_data
Query data stored or computed in a calibration data model.
get_calib_data_observ_contoursGetCalibDataObservContoursGetCalibDataObservContoursget_calib_data_observ_contours
Get contour-based observation data from a calibration data model.
get_calib_data_observ_pointsGetCalibDataObservPointsGetCalibDataObservPointsget_calib_data_observ_points
Get point-based observation data from a calibration data model.
get_camera_setup_paramGetCameraSetupParamGetCameraSetupParamget_camera_setup_param
Get generic camera setup model parameters.
query_calib_data_observ_indicesQueryCalibDataObservIndicesQueryCalibDataObservIndicesquery_calib_data_observ_indices
Query information about the relations between cameras, calibration objects, and calibration object poses.
read_calib_dataReadCalibDataReadCalibDataread_calib_data
Restore a calibration data model from a file.
read_camera_setup_modelReadCameraSetupModelReadCameraSetupModelread_camera_setup_model
Restore a camera setup model from a file.
remove_calib_dataRemoveCalibDataRemoveCalibDataremove_calib_data
Remove a data set from a calibration data model.
remove_calib_data_observRemoveCalibDataObservRemoveCalibDataObservremove_calib_data_observ
Remove observation data from a calibration data model.
serialize_calib_dataSerializeCalibDataSerializeCalibDataserialize_calib_data
Serialize a calibration data model.
serialize_camera_setup_modelSerializeCameraSetupModelSerializeCameraSetupModelserialize_camera_setup_model
Serialize a camera setup model.
set_calib_dataSetCalibDataSetCalibDataset_calib_data
Set data in a calibration data model.
set_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectset_calib_data_calib_object
Define a calibration object in a calibration model.
set_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamset_calib_data_cam_param
Set type and initial parameters of a camera in a calibration data model.
set_calib_data_observ_pointsSetCalibDataObservPointsSetCalibDataObservPointsset_calib_data_observ_points
Set point-based observation data in a calibration data model.
set_camera_setup_cam_paramSetCameraSetupCamParamSetCameraSetupCamParamset_camera_setup_cam_param
Define type, parameters, and relative pose of a camera in a camera setup model.
set_camera_setup_paramSetCameraSetupParamSetCameraSetupParamset_camera_setup_param
Set generic camera setup model parameters.
write_calib_dataWriteCalibDataWriteCalibDatawrite_calib_data
Store a calibration data model into a file.
write_camera_setup_modelWriteCameraSetupModelWriteCameraSetupModelwrite_camera_setup_model
Store a camera setup model into a file.