affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld仿射变换轮廓扩展线描述(算子)
名称
affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld — 对扩展线描述轮廓应用任意仿射二维变换。
签名
描述
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 对ContoursContoursContoursContourscontourscontours 中给定的 XLD 轮廓应用任意仿射二维变换,即缩放、旋转、平移和倾斜(偏斜),并将变换后的轮廓返回至 ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTranscontours_affine_trans 中。仿射变换由
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 中给出的齐次变换矩阵描述,该矩阵可通过 hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity、 hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale、
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate、 hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate 等算子创建,或由 vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigidVectorAngleToRigidvector_angle_to_rigid 等算子生成。
齐次变换矩阵的分量解释如下:图像的行 row 坐标对应于变换矩阵定义坐标系中的 x 轴,列 column 坐标对应于 y 轴。此设定对于构建图像的右手坐标系至关重要,尤其能确保旋转操作沿正确方向进行。需注意矩阵中 (x,y) 的顺序与图像坐标惯用的 (行,列) 顺序自然对应。
注意
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 不采用 HALCON 标准坐标系(其原点位于左上角像素的中心),而是使用与 affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel 相同的坐标系,即原点位于左上角像素的左上角。因此,应用 affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 相当于对轮廓的每个点(输入和输出像素作为齐次向量)施加一组变换(参见 affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel)。因此,当基于轮廓衍生的坐标创建仿射变换时,例如通过 area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld 等算子,可能会得到意外的结果。例如,若使用此算子计算旋转对称 XLD 轮廓的重心,随后通过 hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate 围绕该点旋转轮廓,则生成的轮廓将不会位于原始轮廓之上。在这种情况下,您可以在将 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 用于 affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 之前,通过应用以下变换来补偿这种影响:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)
|
hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
|
affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)
|
有关 HALCON 中使用的不同二维坐标系的说明,请参阅 变换 / 二维变换 一章的引言。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
参数
ContoursContoursContoursContourscontourscontours (输入对象) xld_cont(-array) → objectHXLDContHObjectHXLDContHobject
输入 XLD 轮廓。
ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTranscontours_affine_trans (输出对象) xld_cont(-array) → objectHXLDContHObjectHXLDContHobject *
转换后的 XLD 轮廓。
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (输入控制) hom_mat2d → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
输入变换矩阵。
结果
如果矩阵 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 表示仿射变换(即非投影变换),affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 返回 2 ( H_MSG_TRUE )。如果输入为空时,可设置行为通过算子 set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)。如有必要,则抛出异常。
可能的前趋
hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity,
hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate,
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate,
hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale,
hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflecthom_mat2d_reflect
另见
affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image,
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region
模块
基础