projective_trans_image ( Image : TransImage : HomMat2D, Interpolation, AdaptImageSize, TransformRegion : )

Apply a projective transformation to an image.

projective_trans_image applies the projective transformation (homography) determined by the homogeneous transformation matrix HomMat2D on the input image Image and stores the result into the output image TransImage.

If the parameter AdaptImageSize ist set to 'false', TransImage will have the same size as Image; if AdaptImageSize is 'true', the output image size will be automatically adapted so that all non-negative points of the transformed image are visible.

The parameter Interpolation determines, which interpolation method is used to determine the gray values of the output image. For Interpolation = 'nearest_neighbor', the gray value is determined from the nearest pixel in the input image. This mode is very fast, but also leads to the typical ``jagged'' appearance for large enlargements of the image. For Interpolation = 'bilinear', the gray values are interpolated bilinearly, leading to longer runtimes, but also to significantly improved results.

The parameter TransformRegion can be used to determine whether the domain of Image is also transformed. Since the transformation of the domain costs runtime, this parameter should be used to specify whether this is desired or not. If TransformRegion is set to 'false' the domain of the input image is ignored and the complete image is transformed.

The projective transformation matrix could for example be created using the operator vector_to_proj_hom_mat2d.

In a homography the points to be projected are represented by homogeneous vectors of the form (x,y,w). A Euclidean point can be derived as (x',y') = (x/w,y/w).

Just like in affine_trans_image, x represents the row coordinate while y represents the column coordinate in projective_trans_image. With this convention, affine transformations are a special case of projective transformations in which the last row of HomMat2D is of the form (0,0,c).

For images of type byte or uint2 the system parameter 'int_zooming' selects between fast calculation in fixed point arithmetics ('int_zooming' = 'true') and highly accurate calculation in floating point arithmetics ('int_zooming' = 'false'). Especially for Interpolation = 'bilinear', however, fixed point calculation can lead to minor gray value deviations since the faster algorithm achieves an accuracy of no more than 1/16 pixels. Therefore, when applying large scales 'int_zooming' = 'false' is recommended.


Parameters

Image (input_object)
(multichannel-)image(-array) -> object : byte / uint2 / real
Input image.

TransImage (output_object)
(multichannel-)image(-array) -> object : byte / uint2 / real
Output image.

HomMat2D (input_control)
hom_mat2d-array -> real
Homogeneous projective transformation matrix.

Interpolation (input_control)
string -> string
Interpolation method for the transformation.
Default value: 'bilinear'
List of values: 'nearest_neighbor', 'bilinear'

AdaptImageSize (input_control)
string -> string
Adapt the size of the output image automatically?
Default value: 'false'
List of values: 'true', 'false'

TransformRegion (input_control)
string -> string
Should the domain of the input image also be transformed?
Default value: 'false'
List of values: 'true', 'false'


Parallelization Information

projective_trans_image is reentrant and automatically parallelized (on tuple level, channel level).


Possible Predecessors

vector_to_proj_hom_mat2d, hom_vector_to_proj_hom_mat2d, proj_match_points_ransac, hom_mat3d_project


See also

projective_trans_image_size, projective_trans_contour_xld, projective_trans_region, projective_trans_point_2d, projective_trans_pixel


Module

Foundation



Copyright © 1996-2008 MVTec Software GmbH