4. 圆点阵标定板设计:圆点直径与间距关系、圆心定位精度、椭圆畸变补偿、对称性设计
圆点阵标定板,说白了就是棋盘格的「亲戚」。但两者性格完全不同。棋盘格靠角点,圆点阵靠圆心。我个人更偏爱圆点阵——尤其是在做高精度双目视觉标定时。为什么?因为圆心定位可以做到亚像素级,而且抗噪能力比角点强不少。
今天咱们就聊聊圆点阵设计的四个核心问题。嗯,都是我在项目里踩过坑、填过土的地方。
4.1 圆点直径与间距的关系
先问个问题:圆点做多大?间距留多少?
这不是拍脑袋定的。我见过有人随便画个圆就打印出来用,结果标定完发现焦距偏差3%以上。为什么?因为直径和间距的比例不对,圆心提取的稳定性会大打折扣。
我个人习惯遵循一个经验法则:圆点直径 = 间距的 1/3 到 1/2。举个例子,如果间距是 30mm,那圆点直径在 10mm 到 15mm 之间比较合适。
核心原则:
- 圆点不能太大,否则相邻圆点容易粘连,边缘检测会出问题
- 圆点不能太小,否则亚像素定位的信噪比不够
- 间距要保证圆点之间至少有 1 个圆点直径的空白区域
我曾经在一个项目中,甲方要求标定板做得很小(A5纸大小),我硬是把圆点直径缩到了 4mm,间距 12mm。结果呢?相机一拉远,圆点糊成一团,圆心定位误差直接飙到 0.3 像素。后来换成 6mm 直径、18mm 间距,问题才解决。
| 应用场景 | 推荐直径 (mm) | 推荐间距 (mm) | 比例 |
|---|---|---|---|
| 近距离高精度 (0.5m以内) | 6 - 10 | 18 - 30 | 1:3 |
| 中等距离 (0.5m - 2m) | 10 - 15 | 30 - 45 | 1:3 ~ 1:2.5 |
| 远距离 (2m以上) | 15 - 25 | 45 - 75 | 1:3 |
我的小技巧:设计时先确定相机的最小视场,然后反推圆点尺寸。保证每个圆点在图像上至少占 20 个像素直径,这样亚像素定位才有意义。
4.2 圆心定位精度
圆心定位是圆点阵标定的「命根子」。定位不准,后面所有参数都是白搭。
常用的方法有几种:
- 灰度重心法:简单粗暴,速度快,但对光照不均匀敏感
- 椭圆拟合法:精度高,能处理透视变形,但计算量稍大
- 边缘拟合 + 亚像素插值:我比较喜欢的方法,鲁棒性好
你想想看,一个圆在图像上被拍成了椭圆(透视投影造成的),你用重心法找圆心,找出来的其实是椭圆的几何中心,而不是真正的圆心投影。这个误差在标定中会被放大。
我个人推荐的做法是:
- 先用 Canny 或 Sobel 提取圆点边缘
- 对边缘点做亚像素插值(用二次曲线拟合)
- 再用最小二乘法拟合椭圆
- 最后取椭圆的中心作为圆心
注意:椭圆拟合时,如果边缘点太少(少于 6 个),拟合结果会很不稳定。我一般要求每个圆点至少提取 20 个边缘点。
我曾经在一条产线调试时,发现标定结果反复跳变。排查了两天,最后发现是光源频闪导致圆点边缘亮度波动,重心法定位误差在 0.1 像素上下跳。换成椭圆拟合法后,稳定性明显提升。
4.3 椭圆畸变补偿
这里要重点说一下。圆点阵标定板在倾斜拍摄时,圆变成椭圆。如果不做补偿,直接用椭圆中心当圆心,会引入系统误差。
为什么会这样?因为透视投影下,圆的中心投影和椭圆的几何中心并不重合。这个偏差叫做「透视偏心误差」。说白了,就是你看一个圆盘,从侧面看它变成椭圆,但椭圆的「中心」并不是原来圆盘中心在图像上的真实位置。
补偿方法其实不复杂:
- 方法一:利用已知的标定板平面方程,反算透视变换,把椭圆校正回圆
- 方法二:在椭圆拟合时,加入透视约束条件,直接求解圆心投影
- 方法三:迭代优化——先粗标定,然后用标定结果补偿椭圆畸变,再精标定
我个人习惯用方法三。虽然多了一步迭代,但效果最稳。我记得有一次做双目视觉测距,没做椭圆补偿时,测距误差在 5mm 左右。加上补偿后,误差降到了 1mm 以内。差别很明显。
补偿公式(简化版):
// 假设已知相机内参 K 和标定板位姿 [R|t]
// 将椭圆边缘点反投影到标定板平面
// 在标定板平面上,这些点应该构成一个标准圆
// 用标准圆的圆心作为真实圆心
// 再投影回图像,得到补偿后的圆心位置
4.4 对称性设计
最后聊聊对称性。你可能觉得这有什么好说的?不就是把圆点排整齐吗?
没那么简单。对称性设计直接影响标定板的「可识别性」和「唯一性」。
想象一下:你拍了一张标定板的局部图像,怎么知道哪个圆点是哪个?如果所有圆点一模一样,没有区分度,那你就没法建立图像点和物理点的对应关系。
常见的做法有:
- 非对称排列:比如行数和列数不同,或者某一行缺一个圆点
- 编码标记:在四个角或中心位置放特殊标记(如十字、大圆点)
- 颜色编码:用不同颜色的圆点区分区域(但要注意光照影响)
我比较推荐的是「非对称排列 + 角点标记」的组合方案。举个例子:
- 整体排列为 11 行 × 9 列(非对称,一眼就能区分方向)
- 左上角放一个直径是普通圆点 1.5 倍的大圆点
- 右下角放一个十字标记
这样不管你怎么旋转标定板,算法都能自动识别方向,不会搞混。
避坑指南:我曾经设计过一个完全对称的 10×10 圆点阵,结果拍出来的图像旋转 90 度后,算法完全无法判断方向。后来花了整整一天改代码加方向判别逻辑。从那以后,我再也不敢用完全对称设计了。
知识体系总览
下面这张图是我自己整理的圆点阵标定板设计知识体系,你可以对照着看:
这四个方面其实是环环相扣的。直径和间距决定了你能提取到多少有效像素;圆心定位精度决定了标定的下限;椭圆补偿决定了倾斜拍摄时的准确性;对称性设计决定了算法的自动化程度。缺一个,整体效果都会打折扣。
好了,关于圆点阵标定板的设计,今天就聊到这儿。下一节咱们会聊聊实际制作和打印中的注意事项——嗯,那个坑也不少。
公众号:蓝海资料掘金营,微信deep3321