仿射变换以及数学公式的实现

什么是仿射变换?

仿射变换是指在几何中,一个空间向量进行一次线性变换并接上一个平移,变换为另一个向量空间。

比如说某一矩形的某一顶点发生平移旋转后的位置。

 

关键算子:

vector_angle_to_rigid 
affine_trans_point_2d

 

实验与测试:

halcon代码:

dev_set_draw ('margin')
RR1:=50
CC1:=100
RR2:=150
CC2:=300
gen_rectangle1 (ROI_0, RR1, CC1, RR2, CC2)
area_center (ROI_0, Area, Row, Column)
gen_cross_contour_xld (Cross,Row, Column , 20, 0)
dev_set_color ('green')
*变换前的点
gen_cross_contour_xld (Cross1,RR1, CC1 , 20, 0.785398)
gen_cross_contour_xld (Cross2,RR2, CC2 , 20, 0.785398)
*仿射变换
vector_angle_to_rigid (Row, Column, rad(0), Row, Column, rad(30), HomMat2D)
affine_trans_point_2d (HomMat2D, RR1, CC1, Qx, Qy)
*显示变换后的点
gen_cross_contour_xld (Cross3,Qx, Qy , 20, 0.5)
stop()
*以下为测试变换结果是否正确
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
*辅助圆
*半径
distance_pp (RR1, CC1, Row, Column, Distance)
gen_circle_contour_xld (ContCircle, Row, Column, Distance, 0, 6.28318, 'positive', 1)
stop ()

运用数学方式实现仿射变换:

仿射变换可以拆解为一个物体发生1、位移,2、变换 后的坐标位置 平移好处理,旋转我们可以发现物体都是围绕一个点进行旋转的,旋转一周刚好形成一个圆的轮廓。于是可以用圆上任意点的公式进行计算:

x = x0+R*cosθ
y = y0+R*sinθ

式中x和y是任意一点坐标,x0和y0是围绕的中心点坐标,R是半径

 

代码:

*求矩形旋转30°后左上角顶点坐标
dev_set_draw ('margin')
Phi:=rad(30)
RR1:=50
CC1:=100
RR2:=150
CC2:=300
gen_rectangle1 (ROI_0, RR1, CC1, RR2, CC2)
area_center (ROI_0, Area, Row, Column)
gen_cross_contour_xld (Cross,Row, Column , 20, 0)
*显示左上角顶点
gen_cross_contour_xld (Cross,50, 100 , 30, 0.5)
*以下使用圆上任意一点公式实现数学方式的仿射变换
*x = x0+R*cosθ
*y = y0+R*sinθ
dev_set_color ('green')
*半径
distance_pp (RR1, CC1, Row, Column, Distance)
*左上角顶点到中心点线段与Row轴的斜率
angle_lx (RR1, CC1, Row, Column, Angle)
*式中的-rad(180)-Angle-rad(30)这些参数取决于圆的画向是顺时针的
ORR:=Row+Distance*sin(-rad(180)-Angle-rad(30))
OCC:=Column+Distance*cos(-rad(180)-Angle-rad(30))
gen_cross_contour_xld (Cross, ORR, OCC, 20, 0)
*测试结果是否正确
vector_angle_to_rigid (Row, Column, rad(0), Row, Column, rad(30), HomMat2D)
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值