刚性仿射变换(Rigid Affine Transformation)是一种机械视觉和图像处理常用的技术,通常用于在保持物体形状和大小不变的情况下,对物体进行旋转和平移。常见于模板匹配,定位跟随等场景。
1: vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)
功能:用于从点和角度计算刚性仿射变换。该函数根据点对应关系和两个对应角度计算刚性仿射变换,并将其作为齐次变换矩阵HomMat2D返回。这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用,把参考图像变为当前图像。
Row1和Column1代表原始点的行列坐标,Angle1是原始点的角度
Row2和Column2代表转换点的行列坐标,Angle2是转换点的角度,
HomMat2D是输出的转换矩阵。
2:affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2D)
功能:用于对XLD轮廓进行任意仿射2D变换。这个函数将任意仿射2D变换(即缩放、旋转、平移和倾斜)应用于轮廓中给定的XLD轮廓,并以ContoursAffineTrans的形式返回变换后的轮廓。仿射变换由HomMat2D中给出的齐次变换矩阵来描述。
Contours 输入的XLD轮廓
ContoursAffineTrans 转换后的XLD轮廓
HomMat2D 输入的转换矩阵。
通过这两个函数,可以实现对图像中物体的定位和变换,以适应不同的视觉处理需求。
案例分析:
read_image (Image33, 'E:/Halcon数据/资源图片/33.png')
get_image_pointer1 (Image33, Pointer, Type, Width, Height)
r:=Height/2
c:=Width/2
dev_set_color ('blue')
gen_arrow_contour_xld (Arrow, r, c, r, c+300, 5, 5)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, rad(90), r, c, HomMat2DRotate)
affine_trans_contour_xld (Arrow, ContoursAffineTrans, HomMat2DRotate)
*初始位
r1:=r
c1:=c+150
dev_set_color ('red')
gen_rectangle2_contour_xld (Rectangle, r1, c1, rad(90), 50.5, 10.5)
*目标位 角度变换90
r2:=r-150
c2:=c
dev_set_color ('red')
*刚性变换
vector_angle_to_rigid (r1, c1, 0, r2, c2, rad(90), HomMat2D)
affine_trans_contour_xld (Rectangle, ContoursAffineTrans2, HomMat2D)
通过矩阵分步演化
dev_set_color ('green')
hom_mat2d_identity (HomMat2DIdentity1)
hom_mat2d_rotate (HomMat2DIdentity1, rad(90), r1, c1, HomMat2DRotate1)
hom_mat2d_translate (HomMat2DRotate1, (r2-r1), (c2-c1), HomMat2DTranslate)
affine_trans_contour_xld (Rectangle, ContoursAffineTrans1, HomMat2DTranslate)
标签:mat2d,刚性,HomMat2D,变换,xld,Halcon,contour,仿射变换
From: https://blog.csdn.net/2202_75557553/article/details/143612415