一、介绍
。仿射变换(Affine Transformation)其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换
仿射变换变化包括缩放(Scale、平移(transform)、旋转(rotate)、反射(reflection,对图形照镜子)、错切(shear mapping,感觉像是一个图形的倒影),原来的直线仿射变换后还是直线,原来的平行线经过仿射变换之后还是平行线,这就是仿射
二、数学描述
没有平移或者平移量为0的所有仿射变换可以用如下变换矩阵描述:
不同变换对应的a,b,c,d约束不同,排除了平移变换的所有仿射变换为线性变换,其特点是原点位置不变,多次线性变换的结果仍是线性变换。
为了涵盖平移,引入齐次坐标,在原有2维坐标的基础上,增广1个维度,如下所示:
所以,仿射变换的变换矩阵统一用
来描述,不同基础变换的a,b,c,d,e,f约束不同,如下所示:
三、halcon代码
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID) #绘制区域
hom_mat2d_identity (HomMat2DIdentity) #定义一个对角为 1 的 单位矩阵
hom_mat2d_rotate (HomMat2DIdentity, -0.3, 256, 256, HomMat2DRotate) #旋转
hom_mat2d_scale (HomMat2DRotate, 1.5, 1.5, 256, 256, HomMat2DScale) #缩放
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (RegionAffineTrans)
执行
参考: