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_xld(Polygons : PolygonsAffineTrans : HomMat2D : )

Herror T_affine_trans_polygon_xld(const Hobject Polygons, Hobject* PolygonsAffineTrans, const Htuple HomMat2D)

void AffineTransPolygonXld(const HObject& Polygons, HObject* PolygonsAffineTrans, const HTuple& HomMat2D)

HXLDPoly HXLDPoly::AffineTransPolygonXld(const HHomMat2D& HomMat2D) const

HXLDPoly HHomMat2D::AffineTransPolygonXld(const HXLDPoly& Polygons) const

static void HOperatorSet.AffineTransPolygonXld(HObject polygons, out HObject polygonsAffineTrans, HTuple homMat2D)

HXLDPoly HXLDPoly.AffineTransPolygonXld(HHomMat2D homMat2D)

HXLDPoly HHomMat2D.AffineTransPolygonXld(HXLDPoly polygons)

def affine_trans_polygon_xld(polygons: HObject, hom_mat_2d: Sequence[float]) -> HObject

描述

affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xldPolygonsPolygonsPolygonsPolygonspolygonspolygons 中给定的 XLD 多边形应用任意仿射变换,即缩放、旋转、平移和倾斜(偏斜),并将变换后的多边形返回至 PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_affine_trans。仿射变换由 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 中给定的齐次变换矩阵描述。该矩阵可通过算子 hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identityhom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scalehom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotatehom_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

模块

基础