相机标定(二):九点标定和旋转中心
2023 年 3 月 23 日 · 4 分钟读完
总结项目里用过的几种视觉标定,讲清楚大概原理。下面都假设已经排除了镜头畸变,并且相机垂直于工作平面。坐标系的基础见 上一篇。
一、眼在手外(相机固定)
自动化设备里经常要用视觉引导机械手或 XY 模组去准确定位。相机固定不动、视野固定时,分两种情况。
1. 不需要纠正角度
只需要把执行器移到目标点上方,不关心目标的朝向,比如点胶、点焊:

相机固定,视野里出现目标点 p 后,模组要能准确移到 p 的上方。
九点标定:求像素坐标和模组坐标之间的映射。
- 把标定块(带一个 Mark 点)固定在执行器上;
- 在视野里移动执行器;
- 记录此时模组的 XY 坐标,以及图像里 Mark 点的像素坐标;
- 重复 2 ~ 3 步,一共走 9 个点(通常排成 3 × 3 的网格,铺满视野);
- 用这 9 组对应点求出像素坐标到模组坐标的变换矩阵。
理论上 3 个不共线的点就能确定一个仿射变换,多取几个点是为了用最小二乘平均掉误差,所以常取 9 个。
示教基准:
- 把一个物料放在视野中间;
- 手动把执行器移到物料上方,摆好正确的工作位置,记录此时的模组坐标作为基准位置;
- 视觉识别出这个物料,用标定矩阵换算成模组坐标,作为基准坐标 b(Xb, Yb)。
正常工作:
- 识别新物料,换算得到坐标 p(X, Y);
- 计算偏差 (X - Xb, Y - Yb) 发给控制器;
- 控制器在基准位置上加上这个偏差,就到了正确位置。
用「基准 + 偏差」而不是直接走换算出的绝对坐标,好处是示教时的执行器偏移(比如针头和 Mark 点不在同一个位置)被自动抵消了。
2. 需要纠正角度
需要把东西按正确的角度放下,比如贴标签、装配、抓取。下图中吸起来的标签角度每次可能不同,要让它和目标的红色区域平行贴上:

这时除了九点标定 XY,还要知道 U 轴(旋转轴)的旋转中心在哪。因为执行器转一个角度时,标签是绕旋转中心转的,标签上每个点的位置都会变。
九点标定 XY:同上。
标定旋转中心:
- 标定块固定在执行器上,移到视野中,记下此时的 XY 和 U 坐标(很重要);
- 视觉识别 Mark 点位置;
- XY 不动,只转 U 轴一个角度;
- 重复 2 ~ 3 步,得到多个 Mark 点位置。它们都在以旋转中心为圆心的一段圆弧上;
- 用这些点拟合圆,圆心就是旋转中心。
三个点就能确定一个圆,多取几个提高精度。转的角度范围越大,拟合的圆心越准,太小的弧拟合出来误差很大。注意:这个旋转中心是在第 1 步那个 XY 位置下求得的,拍照位置的 XY 变了,旋转中心的像素坐标也会跟着变。
正常工作:
- 吸起标签,移到拍照位置(XY、U 要和标定旋转中心时一致);
- 拍标签,得到标签的角度和参考点(比如左上角)坐标;
- 拍目标位置,得到放置的角度和参考点坐标;
- 两个角度相减得到要转的角度 θ;
- 算出标签参考点绕旋转中心转过 θ 之后的新位置 (X′, Y′);
- 目标参考点和 (X′, Y′) 之差就是 XY 要移动的距离。
第 5 步的旋转公式,(cx, cy) 是旋转中心:
X′ = (X - cx)·cosθ - (Y - cy)·sinθ + cx
Y′ = (X - cx)·sinθ + (Y - cy)·cosθ + cy
所以执行器先转 θ,再平移 (目标 - X′, 目标 - Y′),就放正了。
原文还写了第二种做法:用标签的长宽和参考点到旋转中心的距离,在目标上推算出一个「虚拟旋转中心」,再算两个旋转中心的差。思路也能用,但要量的东西多、误差来源多,不推荐,这里就不展开了。
二、眼在手上(相机随执行器移动)
相机装在机械手或模组上,跟着一起动。原文这一节没写完,补一下思路:
- 拍照位置固定:每次都在同一个拍照位置拍照,那么相机和工作平面的关系每次都一样,和眼在手外一样做九点标定即可,只是标定时动的是标定板(或者让执行器带着相机去拍固定的标定板,记录 9 个位置)。
- 拍照位置不固定:要把「相机相对执行器的偏移」也求出来,像素坐标先换算成相机下的坐标,再加上拍照时执行器的位置。机械手上一般用标准的手眼标定(求解 AX = XB),Halcon 的
calibrate_hand_eye、OpenCV 的calibrateHandEye都能做。
延伸
- 算标定矩阵:Halcon 用
vector_to_hom_mat2d(九组点 → 仿射矩阵),再用affine_trans_point_2d换算坐标;OpenCV 用estimateAffine2D。拟合圆用 Halcon 的fit_circle_contour_xld或者自己写最小二乘。 - 验证标定:标定完不要直接用。拿标定块在视野里随便放几个位置,用标定结果去走,看实际偏差多大,同时检查视野四角,畸变大的话边缘误差会明显变大。
- 精度来源:Mark 点识别的精度(用模板匹配或亚像素圆拟合,比阈值求中心准)、模组本身的重复定位精度、标定块是否固定牢靠、相机是否和平面垂直。
- 换了什么要重新标定:相机或镜头动了、焦距调过、工作高度变了,都要重新做;只换产品不用。
原文首发于 blog.csdn.net