image_to_world_planeT_image_to_world_planeImageToWorldPlaneImageToWorldPlaneimage_to_world_plane — Rectify an image by transforming it into the plane z=0 of a world
coordinate system.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane rectifies an image ImageImageImageImageimageimage by
transforming it into the plane z=0 (plane of measurements) in a world
coordinate system. The resulting rectified image ImageWorldImageWorldImageWorldImageWorldimageWorldimage_world 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 WorldPoseWorldPoseWorldPoseWorldPoseworldPoseworld_pose.
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 CameraParamCameraParamCameraParamCameraParamcameraParamcamera_param you must pass the internal camera parameters (see
Calibration for the sequence of the parameters and the
underlying camera model).
The parameter ScaleScaleScaleScalescalescale can be used to specify the size of a pixel in the
transformed image. There are two ways to use this parameter:
Scale pixels to metric units:
Scale the image such that one pixel in the transformed image corresponds
to a metric unit, e.g., setting 'mm'"mm""mm""mm""mm""mm" determines that a pixel in the
transformed image corresponds to the area 1mm x 1mm in the
plane of measurements. For this, the original unit needs to be meters.
This is the case if you use a standard calibration plate.
List of values:'m'"m""m""m""m""m", 'cm'"cm""cm""cm""cm""cm", 'mm'"mm""mm""mm""mm""mm",
'microns'"microns""microns""microns""microns""microns", 'um'"um""um""um""um""um".
Default:'m'"m""m""m""m""m".
Control scaling manually:
Scale the image by giving a number that determines the ratio of
original unit length / desired number of pixels.
E.g., if your original unit is meters and you want
every pixel of your transformed image to represent 3mm x 3mm
of the measuring plane, your scale is calculated
.
If you want to perform a task like shape-based matching on your
transformed image, it is useful to scale the image such that its content
appears in a size similar to the original image.
The parameter InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation specifies, whether bilinear
interpolation ('bilinear'"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""nearest_neighbor") should be used.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane 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""bilinear", 'nearest_neighbor'"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_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane returns 2 (
H_MSG_TRUE)
if all parameter values
are correct. If necessary, an exception is raised.