affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld仿射变换多边形扩展线描述(算子)
名称
affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld — 对扩展线描述多边形应用任意仿射变换。
签名
描述
affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld 对 PolygonsPolygonsPolygonsPolygonspolygonspolygons 中给定的 XLD 多边形应用任意仿射变换,即缩放、旋转、平移和倾斜(偏斜),并将变换后的多边形返回至 PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_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) 的顺序与图像坐标中常规的 (行,列) 顺序自然对应。
注意
可能被 PolygonsPolygonsPolygonsPolygonspolygonspolygons 引用的XLD轮廓既不会被转换,也不会与输出多边形一同存储,因为这通常会导致 XLD 轮廓属性出现不一致。因此,访问多边形关联轮廓的算子(例如 split_contours_xldsplit_contours_xldSplitContoursXldSplitContoursXldSplitContoursXldsplit_contours_xld )将无法正常工作。
affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld 不采用 HALCON 标准坐标系(其原点位于左上角像素的中心),而是使用与 affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel 相同的坐标系,即原点位于左上角像素的左上角。因此,应用 affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_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_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_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_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)affine_trans_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)affine_trans_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)
|
有关 HALCON 中使用的不同二维坐标系的说明,请参阅 变换 / 二维变换 一章的引言。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
参数
PolygonsPolygonsPolygonsPolygonspolygonspolygons (输入对象) xld_poly(-array) → objectHXLDPolyHObjectHXLDPolyHobject
输入 XLD 多边形。
PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_affine_trans (输出对象) xld_poly(-array) → objectHXLDPolyHObjectHXLDPolyHobject *
变换后的 XLD 多边形。
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (输入控制) hom_mat2d → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
输入变换矩阵。
结果
如果矩阵 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 表示仿射变换(即非投影变换),affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_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,
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld
模块
基础