image_to_world_planeT_image_to_world_planeImageToWorldPlaneImageToWorldPlane — Rectify an image by transforming it into the plane z=0 of a world
coordinate system.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane rectifies an image ImageImageImageImageimage by
transforming it into the plane z=0 (plane of measurements) in a world
coordinate system. The resulting rectified image ImageWorldImageWorldImageWorldImageWorldimageWorld shows
neither radial nor perspective distortions; it corresponds to an image
acquired by a distortion-free camera that looks perpendicularly onto the
plane of measurements. The world coordinate system is chosen by passing its
3D pose relative to the camera coordinate system in WorldPoseWorldPoseWorldPoseWorldPoseworldPose.
Hence, latter one is expected in the form
, where
ccs denotes the camera coordinate system and
wcs the world coordinate system (see
Transformations / Poses
and “Solution Guide III-C - 3D Vision”).
In CameraParamCameraParamCameraParamCameraParamcameraParam you must pass the internal camera parameters (see
Calibration / Multi-View for the sequence of the parameters and the
underlying camera model).
With the parameter ScaleScaleScaleScalescale you can specify the size of a pixel in the
transformed image. There are two typical scenarios: First, you can scale the
image such that pixel coordinates in the transformed image directly
correspond to metric units, e.g., that one pixel corresponds to one
micron. This is useful if you want to perform measurements in the
transformed image which will then directly result in metric results.
The second scenario is to scale the image such that its content appears in
a size similar to the original image. This is useful, e.g., if you want to
perform shape-based matching in the transformed image.
ScaleScaleScaleScalescale must be specified as the ratio desired pixel
size/original unit. A pixel size of 1um means that a pixel in the
transformed image corresponds to the area 1um x 1um in the
plane of measurements. The original unit is determined by the coordinates of
the calibration object. If the original unit is meters (which is the case if
you use the standard calibration plate), you can use the parameter values
'm'"m""m""m""m", 'cm'"cm""cm""cm""cm", 'mm'"mm""mm""mm""mm", 'microns'"microns""microns""microns""microns", or
'um'"um""um""um""um" to directly set the unit of pixel coordinates in the
transformed image.
The parameter InterpolationInterpolationInterpolationInterpolationinterpolation specifies, whether bilinear
interpolation ('bilinear'"bilinear""bilinear""bilinear""bilinear") should be applied between the pixels in
the input image or whether the gray value of the nearest neighboring pixel
('nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor") should be used.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane can be executed on OpenCL devices if the input
image does not exceed the maximum size of image objects of the selected
device. There can be slight differences in the output compared to the
execution on the CPU.
Execution Information
Supports OpenCL compute devices.
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).
List of values: 'bilinear'"bilinear""bilinear""bilinear""bilinear", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"
Example (HDevelop)
* Calibrate camera.
calibrate_cameras (CalibDataID, Error)
* Obtain camera parameters.
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
* Example values, if no calibration data is available:
CamParam := ['area_scan_division', 0.0087, -1859, 8.65e-006, 8.6e-006, \
362.5, 291.6, 768, 576]
* Get reference pose (pose 4 of calibration object 0).
get_calib_data (CalibDataID, 'calib_obj_pose',\
[0,4], 'pose', Pose)
* Example values, if no calibration data is available:
Pose := [-0.11, -0.21, 2.51, 352.73, 346.73, 336.48, 0]
* Compensate thickness of plate.
set_origin_pose (Pose, -1.125, -1.0, 0, PoseNewOrigin)
* Transform the image into the world plane.
read_image (Image, 'calib/calib-3d-coord-04')
image_to_world_plane (Image, ImageWorld, CamParam, PoseNewOrigin,\
900, 800, 0.0025, 'bilinear')
Result
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane returns 2 (H_MSG_TRUE) if all parameter values
are correct. If necessary, an exception is raised.