affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegionaffine_trans_region仿射变换区域(算子)
名称
affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegionaffine_trans_region — 对区域应用任意仿射二维变换。
签名
描述
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 对 RegionRegionRegionRegionregionregion 中给定的区域应用任意仿射二维变换,即缩放、旋转、平移和倾斜(偏斜),并将变换后的区域返回至 RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTransregion_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) 的顺序与图像坐标中常规的 (行,列) 顺序自然对应。
参数 InterpolateInterpolateInterpolateInterpolateinterpolateinterpolate 决定是否通过内部插值执行变换操作。可使用 affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image 中详细描述的模式 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" 和 'constant'"constant""constant""constant""constant""constant"。插值可使区域边界更平滑,尤其在区域放大时效果显著。但运行时间会大幅增加。
注意
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 通常不可逆(旋转和缩放过程中会进行裁剪和离散化)。
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 不采用 HALCON 标准坐标系(其原点位于左上角像素的中心),而是使用与 affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel 相同的坐标系,即原点位于左上角像素的左上角。因此应用 affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 相当于对区域的每个点(输入和输出像素作为齐次向量)施加一组变换(参见 affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel)。因此,当基于区域派生的坐标(例如通过 area_centerarea_centerAreaCenterAreaCenterAreaCenterarea_center 等算子)创建仿射变换时,可能会得到意外的结果。例如,若使用此算子计算旋转对称区域的重心,随后通过 hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate 围绕该点旋转该区域,则旋转后的区域将不会位于原始区域之上。在这种情况下,您可以在将 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 用于 affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 之前,通过应用以下变换来补偿这种影响:
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_region(Region, RegionAffineTrans, HomMat2DAdapted, 'nearest_neighbor')affine_trans_region(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")affine_trans_region(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")
|
有关 HALCON 中使用的不同二维坐标系的说明,请参阅 变换 / 二维变换 一章的引言。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
参数
RegionRegionRegionRegionregionregion (输入对象) region(-array) → objectHRegionHObjectHRegionHobject
需旋转和缩放的区域。
RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTransregion_affine_trans (输出对象) region(-array) → objectHRegionHObjectHRegionHobject *
变换后的输出区域。
元素数量:
RegionAffineTrans == Region
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (输入控制) hom_mat2d → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
输入变换矩阵。
InterpolateInterpolateInterpolateInterpolateinterpolateinterpolate (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
是否应使用插值进行变换?
默认值:
'nearest_neighbor'
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
值列表:
'constant'"constant""constant""constant""constant""constant", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"
结果
如果矩阵 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 表示仿射变换(即非投影变换),affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region 返回 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>),当输入区域为空时,可设置行为通过算子 set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>),以及当结果区域为空时,可设置行为通过算子 set_system('store_empty_region',<'true'/'false'>)set_system("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)set_system("store_empty_region",<"true"/"false">)。如有必要,则抛出异常。
可能的前趋
hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity,
hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale,
hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate,
hom_mat2d_inverthom_mat2d_invertHomMat2dInvertHomMat2dInvertHomMat2dInverthom_mat2d_invert,
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate,
hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflecthom_mat2d_reflect
可能的后继
select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape
替代
move_regionmove_regionMoveRegionMoveRegionMoveRegionmove_region,
mirror_regionmirror_regionMirrorRegionMirrorRegionMirrorRegionmirror_region,
zoom_regionzoom_regionZoomRegionZoomRegionZoomRegionzoom_region
另见
affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image
模块
基础