标定板尺寸与方格尺寸怎么定:一套可直接套用的计算方法
从图像分辨率、像元尺寸、镜头焦距和工作距离出发,一步步算出视场、物方分辨率、标定板外形尺寸和方格尺寸,并核对 ChArUco 标记与 AprilGrid tag 的编码位像素数,附完整算例。
要点
- 先算视场:
视场宽 ≈ 工作距离 × 传感器宽 / 焦距。 - 标定板的图案区宜占视场宽度(或高度)的 1/3–1/2 以上,同时兼顾倾斜拍摄时的景深。
- 方格在最不利的姿态下(最远、最倾斜)仍应有约 15–20 像素以上;ChArUco 标记的每个编码位至少 3–5 像素。这些都是经验值。
- 方格也不是越小越好:太小检测不稳,太大则特征点太少,短边方向常取 7–12 个方格。
- 标定板尺寸计算器可以自动完成下面的全部计算。
第一步:收集参数
| 参数 | 本文算例 | 说明 |
|---|---|---|
| 图像分辨率 | 2448 × 2048 px | 用实际工作时的分辨率(注意 binning 和 ROI) |
| 像元尺寸 | 3.45 µm | 见相机规格书 |
| 镜头焦距 | 12 mm | 定焦镜头的标称焦距 |
| 工作距离 | 400 mm | 镜头到被测物的距离 |
| 拍摄距离变化范围 | ±20% | 采集时远近变化的幅度 |
| 最大倾斜角 | 45° | 采集时标定板的最大倾斜 |
第二步:算传感器尺寸、视场和物方分辨率
传感器尺寸:
传感器宽 = 水平像素数 × 像元尺寸 = 2448 × 3.45 µm ≈ 8.45 mm传感器高 = 2048 × 3.45 µm ≈ 7.07 mm
注意不要直接用“2/3 英寸”“1 英寸”这类靶面规格去换算:这些名称沿用自早期摄像管,并不等于传感器的实际尺寸。用像素数乘以像元尺寸最可靠;如果实际使用时开了 ROI 或 binning,也要按实际输出的图像来算。
视场(针孔近似):
视场宽 ≈ 工作距离 × 传感器宽 / 焦距 = 400 × 8.45 / 12 ≈ 282 mm视场高 ≈ 400 × 7.07 / 12 ≈ 236 mm
这个公式在工作距离远大于焦距时足够准确。近距离时可以用薄透镜公式修正:视场 ≈ 传感器尺寸 × (工作距离 − 焦距) / 焦距,本例约为 273 × 228 mm,比近似值小 3% 左右。最可靠的还是以镜头厂商的视场数据或实拍为准。
物方分辨率:
物方分辨率 = 水平像素数 / 视场宽 = 2448 / 282 ≈ 8.7 px/mm- 即每个像素在物体上约对应 0.115 mm。
第三步:定标定板的大小
下限:图案区至少占视场宽(或高)的 1/3–1/2。本例中,宽度方向约 94–141 mm,高度方向约 79–118 mm。
往上取:单张图中标定板越大,对畸变的约束越强,需要的图像越少。但板太大会带来两个问题:一是倾斜时整板可见类图案(棋盘格、圆点)容易出画;二是景深。倾斜 45° 时,宽 180 mm 的图案在深度方向会跨越约 180 × sin45° ≈ 127 mm,即工作距离前后各约 64 mm,镜头景深必须覆盖这个范围。景深不够时,可以适当缩小光圈并在标定前锁定,或减小倾斜角,或选小一号的板。
本例选择图案区约 180 × 132 mm,约占视场的 64% × 56%。
视场很大(米级以上)时,标定板会变得又大又重。可以选择允许部分可见的 ChArUco 或 AprilGrid,用较小的板多拍几张覆盖全场,或者采用大视场一次标定系统。视场很小(几十毫米甚至更小)时,方格往往只有一两毫米乃至零点几毫米,需要玻璃或陶瓷等能做精细图案的基材,见标定板基材怎么选。
顺便估算一下景深
工作距离远大于焦距时,景深可以用近似公式估算:
景深 ≈ 2 × F 数 × 容许弥散圆 × (工作距离 / 焦距)²
容许弥散圆取 2 个像元(6.9 µm)、光圈 F8 时,本例景深约 2 × 8 × 0.0069 × (400 / 12)² ≈ 123 mm,与倾斜 45° 时需要的 127 mm 相当;如果要求更严格、弥散圆取 1 个像元,景深只有约 61 mm,就需要减小倾斜角或换小一号的板。继续缩小光圈可以增加景深,但衍射模糊也会随之增大、图像变暗,需要在两者之间取舍。这个估算只用于判断量级,最终以实拍时板的远近两端是否都清晰为准。
第四步:定方格尺寸
下限:最不利姿态下也要看得清
方格的像素数在两种情况下最小:拍摄距离最远时,以及标定板倾斜导致方格在一个方向上被压缩时。
- 最远距离:
400 × 1.2 = 480 mm,此时物方分辨率约8.7 × 400 / 480 ≈ 7.25 px/mm; - 倾斜 45°:压缩方向再乘以
cos45° ≈ 0.71,得到约 5.1 px/mm; - 方格至少 20 px:
20 / 5.1 ≈ 3.9 mm。
也就是说,本例方格不应小于 4 mm。
上限:特征点不能太少
方格太大,每张图的角点太少,对畸变的约束变弱,靠近板边缘的区域也覆盖不到。经验上,图案短边方向安排 7–12 个方格比较合适:本例短边 132 mm,对应方格约 11–19 mm。
取值与核对
本例取 12 mm:
- 正常姿态下每个方格约
12 × 8.7 ≈ 104 px; - 最不利姿态下约
12 × 5.1 ≈ 61 px,满足至少 15–20 px 的要求; - 15 × 11 个方格,共 14 × 10 = 140 个内角点。
方格较大时,对离焦和运动模糊的容忍度也更高,因此在满足数量要求的前提下,不必刻意把方格做到最小。
方格太小为什么会检测不稳?
棋盘格检测通常要先把图像二值化、分割出一个个黑色方块,再把它们组织成网格。方格只有十来个像素时,镜头的模糊、轻微离焦和图像噪声就足以让相邻方块在角点处“粘连”或“断开”,分割随之失败。即使检测成功,亚像素细化所用的窗口也会碰到相邻的角点或边缘,精度下降。此外,方格越小,印刷边缘的毛刺、镜头分辨率不足等问题占比越大。因此下限要按最不利姿态来算,而不是按正对相机时来算。
第五步:ChArUco 标记与 AprilGrid tag 的核对
ChArUco 标记由数据位加一圈黑边组成:5X5 字典的标记在边长方向共有 5 + 2 = 7 个编码位(bit)。
每个 bit 的尺寸 = 标记边长 / (字典位数 + 2)
本例标记边长取方格的 0.75 倍,即 9 mm,则每个 bit 约 1.29 mm:正常姿态下约 11 px,最不利姿态下约 6.6 px,满足每个 bit 至少 3–5 px 的经验要求。15 × 11 的板共有 82 个标记,选用 DICT_5X5_100 即可覆盖。
AprilGrid 的 tag 由 6×6 数据位加两圈黑边组成,边长方向共 10 个 bit:每个 bit = tag 边长 / 10。若改用 AprilGrid,tag 边长取 20 mm 时每个 bit 为 2 mm,最不利姿态下约 10 px。
圆点阵列可以按类似思路取圆心距;圆直径一般取圆心距的一半左右,并保证最不利姿态下直径仍有十几个像素以上(经验值)。
算例结果汇总
| 项目 | 结果 |
|---|---|
| 视场 | 约 282 × 236 mm |
| 物方分辨率 | 约 8.7 px/mm |
| 图案类型 | ChArUco,15 × 11 方格 |
| 方格 / 标记边长 | 12 mm / 9 mm,字典 DICT_5X5_100 |
| 图案区 / 板外形 | 180 × 132 mm / 约 192 × 144 mm(四周各留 6 mm) |
| 方格像素数 | 正常约 104 px,最不利约 61 px |
| 标记每 bit 像素数 | 正常约 11 px,最不利约 6.6 px |
如果改用普通棋盘格,可以取 15 × 10 个方格:行列奇偶不同,方向可判定。
几个常见疑问
板比视场还大可以吗? 对 ChArUco 和 AprilGrid 可以,部分可见的图像同样有效,还能把角点推到画面边缘。棋盘格和圆点阵列一般要求整板可见,不适合。
板太小会怎样? 单张图覆盖范围小,需要拍更多图才能覆盖边角;同时板本身的透视变化弱,焦距与距离更难区分,焦距的不确定度会增大。
双目或多相机怎么定? 对每台相机分别计算,方格下限按分辨率最低、视场最大的那台取,板的大小则要保证它能同时出现在相机的共视区内,并且在共视区里仍有倾斜和移动的余地。基线较长、共视区较窄时,板不宜过大。
工作距离变化很大怎么办? 标定数据应覆盖实际的距离范围,并在中间距离对焦。如果远近两端的成像尺度相差很大,一块板难以兼顾,可以分别用两种尺寸的板采集。OpenCV 的 calibrateCamera 允许每张图使用不同的三维点集,两组数据可以放在一起标定。
用打印机先试一下? 可以用在线图案生成器按上述参数生成图案,打印后贴在平整的硬板上试拍,确认检测效果后再订制正式的标定板。注意打印时选择 100% 实际尺寸,并用尺子核对比例。