Name
projective_trans_image T_projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage — Apply a projective transformation to an image.
Herror projective_trans_image (Hobject Image , Hobject* TransImage , const HTuple& HomMat2D , const HTuple& Interpolation , const HTuple& AdaptImageSize , const HTuple& TransformDomain )
HImage HImage ::ProjectiveTransImage (const HTuple& HomMat2D , const HTuple& Interpolation , const HTuple& AdaptImageSize , const HTuple& TransformDomain ) const
HImageArray HImageArray ::ProjectiveTransImage (const HTuple& HomMat2D , const HTuple& Interpolation , const HTuple& AdaptImageSize , const HTuple& TransformDomain ) const
void ProjectiveTransImage (const HObject& Image , HObject* TransImage , const HTuple& HomMat2D , const HTuple& Interpolation , const HTuple& AdaptImageSize , const HTuple& TransformDomain )
HImage HImage ::ProjectiveTransImage (const HHomMat2D& HomMat2D , const HString& Interpolation , const HString& AdaptImageSize , const HString& TransformDomain ) const
HImage HImage ::ProjectiveTransImage (const HHomMat2D& HomMat2D , const char* Interpolation , const char* AdaptImageSize , const char* TransformDomain ) const
HImage HHomMat2D ::ProjectiveTransImage (const HImage& Image , const HString& Interpolation , const HString& AdaptImageSize , const HString& TransformDomain ) const
HImage HHomMat2D ::ProjectiveTransImage (const HImage& Image , const char* Interpolation , const char* AdaptImageSize , const char* TransformDomain ) const
void HOperatorSetX .ProjectiveTransImage ( [in] IHUntypedObjectX* Image , [out] IHUntypedObjectX* * TransImage , [in] VARIANT HomMat2d , [in] VARIANT Interpolation , [in] VARIANT AdaptImageSize , [in] VARIANT TransformDomain )
IHImageX* HImageX .ProjectiveTransImage ( [in] IHHomMat2DX* HomMat2d , [in] BSTR Interpolation , [in] BSTR AdaptImageSize , [in] BSTR TransformDomain )
IHImageX* HHomMat2DX .ProjectiveTransImage ( [in] IHImageX* Image , [in] BSTR Interpolation , [in] BSTR AdaptImageSize , [in] BSTR TransformDomain )
static void HOperatorSet .ProjectiveTransImage (HObject image , out HObject transImage , HTuple homMat2D , HTuple interpolation , HTuple adaptImageSize , HTuple transformDomain )
HImage HImage .ProjectiveTransImage (HHomMat2D homMat2D , string interpolation , string adaptImageSize , string transformDomain )
HImage HHomMat2D .ProjectiveTransImage (HImage image , string interpolation , string adaptImageSize , string transformDomain )
projective_trans_image projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage applies the projective transformation
(homography) determined by the homogeneous transformation matrix
HomMat2D HomMat2D HomMat2D HomMat2D HomMat2D homMat2D on the input image Image Image Image Image Image image and stores the
result into the output image TransImage TransImage TransImage TransImage TransImage transImage .
If the parameter AdaptImageSize AdaptImageSize AdaptImageSize AdaptImageSize AdaptImageSize adaptImageSize ist set to
'false' "false" "false" "false" "false" "false" , TransImage TransImage TransImage TransImage TransImage transImage will have the same size as
Image Image Image Image Image image ; if AdaptImageSize AdaptImageSize AdaptImageSize AdaptImageSize AdaptImageSize adaptImageSize is 'true' "true" "true" "true" "true" "true" , the
output image size will be automatically adapted so that all
non-negative points of the transformed image are visible.
The parameter Interpolation Interpolation Interpolation Interpolation Interpolation interpolation determines, which interpolation
method is used to determine the gray values of the output image.
For Interpolation Interpolation Interpolation Interpolation Interpolation interpolation = 'nearest_neighbor' "nearest_neighbor" "nearest_neighbor" "nearest_neighbor" "nearest_neighbor" "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 Interpolation Interpolation Interpolation Interpolation interpolation = 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear" , the gray values are
interpolated bilinearly, leading to longer runtimes, but also to
significantly improved results.
The parameter TransformDomain TransformDomain TransformDomain TransformDomain TransformDomain transformDomain can be used to determine
whether the domain of Image Image Image Image Image 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
TransformDomain TransformDomain TransformDomain TransformDomain TransformDomain transformDomain is set to 'false' "false" "false" "false" "false" "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 vector_to_proj_hom_mat2d VectorToProjHomMat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d VectorToProjHomMat2d .
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') =
.
Just like in affine_trans_image affine_trans_image AffineTransImage affine_trans_image AffineTransImage AffineTransImage , x represents the row
coordinate while y represents the column coordinate in
projective_trans_image projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage . With this convention, affine
transformations are a special case of projective transformations in
which the last row of HomMat2D HomMat2D HomMat2D HomMat2D HomMat2D homMat2D is of the form (0,0,c).
For images of type 'byte' "byte" "byte" "byte" "byte" "byte" or 'uint2' "uint2" "uint2" "uint2" "uint2" "uint2" the system
parameter 'int_zooming' "int_zooming" "int_zooming" "int_zooming" "int_zooming" "int_zooming" selects between fast calculation in
fixed point arithmetics ('int_zooming' "int_zooming" "int_zooming" "int_zooming" "int_zooming" "int_zooming" = 'true' "true" "true" "true" "true" "true" )
and highly accurate calculation in floating point arithmetics
('int_zooming' "int_zooming" "int_zooming" "int_zooming" "int_zooming" "int_zooming" = 'false' "false" "false" "false" "false" "false" ). Especially for
Interpolation Interpolation Interpolation Interpolation Interpolation interpolation = 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear" , however, fixed point
calculation can lead to minor gray value deviations since the faster
algorithm achieves an accuracy of no more than
pixels. Therefore, when applying large
scales 'int_zooming' "int_zooming" "int_zooming" "int_zooming" "int_zooming" "int_zooming" = 'false' "false" "false" "false" "false" "false" is recommended.
The used coordinate system is the same as in
affine_trans_pixel affine_trans_pixel AffineTransPixel affine_trans_pixel AffineTransPixel AffineTransPixel . This means that in fact not
HomMat2D HomMat2D HomMat2D HomMat2D HomMat2D homMat2D is applied but a modified version. Therefore,
applying projective_trans_image projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage corresponds to the following
chain of transformations, which is applied to each point (Row_i,
Col_i) of the image (input and output
pixels as homogeneous vectors):
As an effect, you might get unexpected results when creating projective
transformations based on coordinates that are derived from the
image, e.g., by operators like area_center_gray area_center_gray AreaCenterGray area_center_gray AreaCenterGray AreaCenterGray . For
example, if you use this operator to calculate the center of gravity
of a rotationally symmetric image and then rotate the image around
this point using hom_mat2d_rotate hom_mat2d_rotate HomMat2dRotate hom_mat2d_rotate HomMat2dRotate HomMat2dRotate , the resulting image will
not lie on the original one. In such a case, you can compensate this
effect by applying the following translations to HomMat2D HomMat2D HomMat2D HomMat2D HomMat2D homMat2D
before using it in projective_trans_image projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage :
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)
hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
projective_trans_image(Image, TransImage, HomMat2DAdapted,
'bilinear', 'false', 'false')
projective_trans_image projective_trans_image ProjectiveTransImage projective_trans_image ProjectiveTransImage ProjectiveTransImage can be executed on OpenCL devices if the input
image does not exceed the maximum size of image objects of the selected
device and the parameter TransformDomain TransformDomain TransformDomain TransformDomain TransformDomain transformDomain is set to
'false' "false" "false" "false" "false" "false" . The result can diverge slightly from that calculated on
the CPU.
Supports OpenCL compute devices.
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).
Automatically parallelized on tuple level.
Automatically parallelized on channel level.
Automatically parallelized on internal data level.
Homogeneous projective transformation matrix.
Interpolation method for the transformation.
Default value:
'bilinear'
"bilinear"
"bilinear"
"bilinear"
"bilinear"
"bilinear"
List of values: 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear" , 'nearest_neighbor' "nearest_neighbor" "nearest_neighbor" "nearest_neighbor" "nearest_neighbor" "nearest_neighbor"
Adapt the size of the output image automatically?
Default value:
'false'
"false"
"false"
"false"
"false"
"false"
List of values: 'false' "false" "false" "false" "false" "false" , 'true' "true" "true" "true" "true" "true"
Should the domain of the input image also be
transformed?
Default value:
'false'
"false"
"false"
"false"
"false"
"false"
List of values: 'false' "false" "false" "false" "false" "false" , 'true' "true" "true" "true" "true" "true"
List of values (for compute devices): 'false' "false" "false" "false" "false" "false"
vector_to_proj_hom_mat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d VectorToProjHomMat2d ,
hom_vector_to_proj_hom_mat2d hom_vector_to_proj_hom_mat2d HomVectorToProjHomMat2d hom_vector_to_proj_hom_mat2d HomVectorToProjHomMat2d HomVectorToProjHomMat2d ,
proj_match_points_ransac proj_match_points_ransac ProjMatchPointsRansac proj_match_points_ransac ProjMatchPointsRansac ProjMatchPointsRansac ,
proj_match_points_ransac_guided proj_match_points_ransac_guided ProjMatchPointsRansacGuided proj_match_points_ransac_guided ProjMatchPointsRansacGuided ProjMatchPointsRansacGuided ,
hom_mat3d_project hom_mat3d_project HomMat3dProject hom_mat3d_project HomMat3dProject HomMat3dProject
projective_trans_image_size projective_trans_image_size ProjectiveTransImageSize projective_trans_image_size ProjectiveTransImageSize ProjectiveTransImageSize ,
projective_trans_contour_xld projective_trans_contour_xld ProjectiveTransContourXld projective_trans_contour_xld ProjectiveTransContourXld ProjectiveTransContourXld ,
projective_trans_region projective_trans_region ProjectiveTransRegion projective_trans_region ProjectiveTransRegion ProjectiveTransRegion ,
projective_trans_point_2d projective_trans_point_2d ProjectiveTransPoint2d projective_trans_point_2d ProjectiveTransPoint2d ProjectiveTransPoint2d ,
projective_trans_pixel projective_trans_pixel ProjectiveTransPixel projective_trans_pixel ProjectiveTransPixel ProjectiveTransPixel
Foundation