工业 3D 视觉最高精度、最稳定的标定方案
我会从0 推导到最终平面方程,包含:多高度平台定义 → 几何约束 → 联立方程 → SVD 求解 → 测量公式 → Halcon 算子对应全程无跳步、无黑箱、纯数学
多高度平台标定 = 利用 N 个已知高度的标准平面,直接建立激光平面约束,不依赖标定板外参 R、t,直接求解
AXc+BYc+CZc+D=0
1、问题分析
1.1 相机坐标系(Cam)
- 原点:相机光心
- Xc:向右
- Yc:向下
- Zc:光轴向前(深度)
1.2 激光平面方程(待求)
π:AXc+BYc+CZc+D=0(1)
- (A,B,C):单位法向量
- D:光心到平面的有向距离
- 目标:求(A,B,C,D)
1.3 多高度平台定义
你有K 个固定高度平台:Zw=h1, h2, ..., hK每个高度h 已知、精确、固定。
2. 多高度平台标定的 3 个强约束
对任意激光点 (u,v),必须同时满足:
约束 1:点在激光平面上
AXc+BYc+CZc+D=0
约束 2:点在已知高度平台上
Zw=hk
约束 3:针孔相机投影![]()
3. 数学推导
1、像素->归一化坐标
2、带入光平面方程
3、高度平台的关键约束
4、联立约束(最关键)
5、构建超定方程组
6、SVD分解
Halcon 使用SVD 最小二乘解这个方程:
M=UΣVT
取V 的最后一列作为最优解:β=V(:,end)
即得到:β=[A,B,C,D]T
最后 Halcon 会自动归一化法向量:A2+B2+C2=1
4、多高度平台的几何意义
- 平台 1 高度 h1 → 提供一条直线约束
- 平台 2 高度 h2 → 提供第二条直线约束
- 平台 3 高度 h3 → 提供第三条直线约束
三条直线确定唯一平面!
这就是为什么多高度平台 ≥3 个才能标定
算子解释
| 算子 | 数学功能 |
|---|---|
| create_calib_data | 创建标定模型 |
| set_calib_data_height | 设置平台高度 h1,h2,h3 |
| find_laser_line | 提取激光线 (u,v) |
| image_points_to_world_plane | 计算 x,y |
| create_planar_laser_plane | SVD 求解 A,B,C,D |
| get_laser_plane_param | 获取平面参数 |
| intersect_ray_with_plane | 计算深度 Zc=−D/(Ax+By+C) |
多高度平台标定最终测量公式
为什么多高度平台精度远高于棋盘格?
- 不计算外参 R、t少一层误差传递,精度提升 50%~300%
- 高度 h 是物理真值约束极强
- 不受姿态影响不会出现标定板倾斜误差
- SVD 直接求解平面,数值稳定
多高度平台标定 = 用多个已知高度平面 → 构建直线约束 → 拟合激光平面测量 = 像素射线与平面求交点核心公式:
Zc=−D/(Ax+By+C)
5、多高度标定调试步骤
1、准备工作
1. 硬件
- 线激光 + 相机固定好,绝对不能动
- 3~5 个已知高度的标准平台(平面度 < 0.01mm)
- 例:h1=0mm,h2=10mm,h3=20mm,h4=30mm
- 平台表面哑光黑,避免反光
- 相机已标定内参 + 畸变
2. 软件(Halcon)
- 加载相机内参
- 准备好激光提取算法(高斯拟合 / 重心法)
2、步骤
第 1 步:放置第 1 个高度平台(h1)
- 平台放平稳
- 激光线完整打在平台上
- 激光线清晰、不断裂、无反光
- 拍摄 1 张图
第 2 步:提取激光线(亚像素)
- 阈值分割
- 亚像素重心拟合
- 输出:一行整齐的 (u, v) 亚像素点
第 3 步:记录平台高度 h1
- 在 Halcon 中设置:
plaintext
set_plane_height (h1) - 保存当前所有激光点坐标
第 4 步:更换第 2 个高度平台(h2)
- 相机、激光绝对不动
- 只换平台高度
- 激光线依然清晰完整
- 提取激光点 → 保存
- 设置高度 h2
第 5 步:更换第 3 个高度平台(h3)
- 同上
- 至少3 个高度才能标定
- 推荐4~5 个高度精度最高
第 6 步:Halcon 开始标定
算子:
plaintext
create_planar_laser_plane (CameraParam, HeightList, LaserPointsList, LaserPlanePose)内部数学:
- 把所有高度的激光点代入
- 构建超定方程组
- SVD 求解平面 A,B,C,D
- 归一化法向量
第 7 步:查看标定结果(现场必查)
plaintext
get_laser_plane_param (LaserPlanePose, A, B, C, D)检查:
- 平面残差 < 0.01mm
- 法向量单位化 A²+B²+C²=1
- 无明显倾斜突变
第 8 步:验证测量(现场必做)
- 放一个已知高度的标准块
- 测量高度
- 误差 < 0.02mm 为合格
- 误差 > 0.05mm 重新标定