手眼标定(九点法)

一、用途

为了确定像素坐标系和空间机械手坐标系的坐标转化关系,我们介绍一种工业上使用广泛的二维手眼标定方法——九点法。所谓二维,即工作平面限制在一个平面上。在实际控制中,相机检测到目标在图像中的像素位置后,通过标定好的坐标转换矩阵,将相机的像素坐标,变换到机械手的空间坐标系中,然后根据机械手坐标系,计算出各个电机该如何运动,从而控制机械手到达指定位置。

根据相机的装载位置分为
不在手上(eye-to-hand):相机固定在一个地方,机械手的运动不会带着相机一起移动。
在手上(eye-in-hand):相机安装在机械手上,随着机械手一起移动。较为常用。这个实际上和eye-to-hand类似。可以快速有效地标定被测物体的坐标。这种情况的标定过程实际上和相机和机械手分离的标定方法是一样的,因为相机拍照时,机械手会运动到相机标定的时候的位置,然后相机拍照,得到目标的坐标,再控制机械手,所以简单的相机固定在末端的手眼系统很多都是采用这种方法,标定的过程和手眼分离系统的标定是可以相同对待的。

九点标定的作用:

1、求解x和y方向的分辨率

2、求解图像坐标到xx坐标的仿射变换矩阵

3、根据变换矩阵来实现像素坐标与实际坐标的转换

二、分辨率求解

经过图像处理,我们可以得到九个点的图像上的坐标,然后按照从左到右,从上到下的规律排好,利用这些点去计算分辨率

//pt:点集;hj:行距;lj:列距
bool CvGetClibrateData(CvPoint *pt, double hj, double lj, double &dx, double &dy)
{
	//pt的排列原则从左到右,从上到下,可以使用sort函数排序
	//具体的sort就不写了,感兴趣的同学自己研究一下,在这里我默认他排好序了
	//pt的排序结果
	// 0 1 2
	// 3 4 5
	// 6 7 8
    //因此接下来的求解方法全是数学问题
	//x方向分辨率
	dx = (pt[1].x - pt[0].x) + (pt[2].x - pt[1].x);
	dx += (pt[4].x - pt[3].x) + (pt[5].x - pt[4].x);
	dx += (pt[7].x - pt[6].x) + (pt[8].x - pt[7].x);
	dx = dx / (6 * lj);
 
	//y方向分辨率
	dy = (pt[3].y - pt[0].y) + (pt[6].y - pt[3].y);
	dy += (pt[4].y - pt[1].y) + (pt[7].y - pt[4].y);
	dy += (pt[5].y - pt[2].y) + (pt[8].y - pt[5].y);
	dy = dy / (6 * hj);
    return ture;
}

 

二、仿射矩阵

从一个坐标系到另一个坐标系的变换,通常使用仿射矩阵。使用Opencv的函数

Mat*  getAffineTransform( const CvPoint2D32f* src,const CvPoint2D32f*  dst, CvMat*  map_matrix );
src:输入图像的三角形顶点坐标。
dst:输出图像的相应的三角形顶点坐标。
map_matrix:指向2×3输出矩阵的指针。

旋转矩阵

Mat cv::getRotationMatrix2D(Point2f center,double angle,double 	scale )		
参数:
center	旋转图像所要围绕的中心点
angle	旋转的角度. 在OpenCV中正角度是逆时针的
scale	缩放因子,可选的

这两个函数就是已知图像上三点坐标,和XY坐标系中对应的三点坐标,然后求解一个变换矩阵。

 

三、进行求解

参考:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html

https://blog.csdn.net/huanghundechenxi/article/details/82025466

https://blog.csdn.net/qq_36251561/article/details/85323948?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase

https://blog.csdn.net/weixin_41074793/article/details/89477476?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase

 

 

你可能感兴趣的:(图像处理,OpenCV)