9点标定方法

16627940:

1.9点标定

夹具夹取产品或者标定块,选取一个特征,开始进行标定
X轴、Y轴移动一个位置,记录轴的物理坐标:(Qx1,Qy1)
提取图像中对应特征点,图像像素坐标:(Px1,Py1)
运动第N位置,记录下点位轴轴坐标(QxN,QyN),t提取像素坐标:(PxN,PyN)
一般9点、16点,特征均匀分布在图像的各个位置即可
halcon算子计算:
假如把上面记录的点转化成halcon的使用的方式,如下:
Px:=[1,2,3]
Py:=[1,2,3]
Qx:=[3,9,12]
Qy:=[3,9,12]
九点标定使用(仿射变换,最少三个点),不能消除镜头和相机畸变
vector_to_hom_mat2d (Px, Py, Qx , Qy, HomMat2D)
HomMat2D就是得到矩阵
此案例不需要标定旋转中心,使用 Affine_Trans_Point_2d(HomMat2D,ProductCol,ProductRow,Qx,Qy);Qx,Qy为变换后的机械坐标,可直接发给机器人做移动处理。

2.旋转标定

![*已知九点标定的矩阵
HomMat2D:=[0.0202215, 3.43298e-005, -27.1543, 3.20314e-005, -0.0202298, 75.8988]
*旋转点集的像素坐标,例如如下
Prx:=[0,1,2,3,4,5,6]
Pry:=[0,1,2,3,4,5,6]
for Index := 0 to |Prx|-1 by 1
*通过矩阵转换一个点到另一点的算子
affine_trans_point_2d (HomMat2D, Prx[Index], Pry[Index], Qx, Qy)
Qrx[Index]:=Qx
Qry[Index]:=Qy
Endfor
最核心的一个算子:affine_trans_point_2d,就是一个矩阵转换点。
就是把一系列的像素点for循环转换为物理坐标点,用来拟合圆,
上面就算已经得到我们的物理的拟合点Qrx, Qry
第二步,拟合圆:
*拟合圆
*先生成轮廓
gen_contour_polygon_xld (Contour, Qry, Qrx)
*轮廓拟合圆,算法要选择‘geotukey’,自己看说明文档
fit_circle_contour_xld (Contour, ‘geotukey’, -1, 0, 0, 3, 2, Row_C, Column_C, Radius_C, StartPhi, EndPhi, PointOrder)
拟合圆不细讲,网上都有,得到我们的圆心(Column_C,Row_C)(注意这里X,Y坐标和行、列坐标区别),半径:Radius_C
]
(https://img-blog.csdnimg.cn/7a84eb02828d4f7fa2336593f16db24c.png)
在这里插入图片描述旋转标定示意图
计算 某个点绕另外一旋转定角度后的坐 标,如图 :A(x,y)绕 B(rx0 ,ry0) 旋转a度后的位置为 C(x0,y0 ),则有如 下关系式:
x0= cos (a) * (x -rx0) – sin (a) *(y-ry0) +rx0
y0= cos (a) * (y- ry0) + sin (a) *(x-rx0) +ry0

计算实际偏移:
△x=x1-x0
△y=y1-y0
△x, △y作为补偿量加入X,Y轴偏移量中

3.公式推导过程

在这里插入图片描述
在这里插入图片描述
平面的9点+旋转标定就这样完成了,怎么样是不是很愉快!

猜你喜欢

转载自blog.csdn.net/slts12345/article/details/129725747