一、总概括
- 光平面标定 = 求相机坐标系下的激光平面方程
- AXc+BYc+CZc+D=0
- 激光三角测量 = 像素射线与该平面求交点 = 3D 坐标
- 光平面:AXc+BYc+CZc+D=0
- 像素→射线:(x,y,1)
- 激光三角:射线与平面求交
- 深度公式:s=−D/(Ax+By+C)
- Halcon 标定 = 内参 + 外参 + 平面 SVD 拟合
二、光平面标定的本质
光平面 = 激光在相机坐标系下的一个空间平面
A⋅Xc+B⋅Yc+C⋅Zc+D=0
Halcon 做的事:
- 求相机内参 K、畸变 Dist
- 求棋盘格外参(相机 ↔ 标定板)
- 求激光平面 A,B,C,D
- 测量时:像素 → 射线 → 与平面求交 → 得到 3D 点(激光三角)
三、坐标系与相机标定
1、相机坐标系(Camera)
1)相机坐标系(Cam)
- 原点:相机光心
- Zc → 光轴向前
- Xc → 右
- Yc → 下
2)标定板坐标系(World = Obj)
- 原点在棋盘格角点
- Zw=0 平面 = 标定板平面
3)光平面方程(相机系)
AXc+BYc+CZc+D=0
(A,B,C) = 平面单位法向量
D = 平面到光心的有向距离
2、相机标定(针孔模型-内参)
针孔模型 标定内参
1)理想投影

2)归一化坐标(Zc=1)

3)去畸变矫正

cpp
camera_calib
输出:内参 K + 畸变系数 D
3、求标定的外参(R,T)
对每一张图 求出pose

意义:知道任意棋盘点 (Xw,Yw,0),就能求它在相机中的 3D 位置
四、激光平面标定
目标:求平面 A,B,C,D
约束条件(所有激光点必须落在平面上)
对每一个激光点:AXc+BYc+CZc+D=0
1、从像素反推3D点
已知像素 (u,v),求相机系射线:
1)去畸变
x,y=undistort(u,v)
2)构建射线

2、激光点必须在标定板平面上(Zw=0)

3、构建平面方程(Halcon 内部 SVD)
每个激光点给出一行方程:
AXc+BYc+CZc=−D
写成矩阵:

cpp
svd(M) → V → 最小奇异值向量 → [A,B,C,D]

五、测量
已知:
- 像素 (u,v)
- 内参 K
- 光平面 A,B,C,D
求 3D 坐标 (Xc,Yc,Zc)
- s:深度(Zc)
- x,y:像素去畸变后的归一化坐标
- 几何意义 :相机射线与光平面求交点
1、像素 → 相机系射线

2、射线与光平面求交(核心公式)

3、得到3D点

六、总结
| Halcon 算子 | 数学含义 |
|---|---|
calibrate_cameras |
求 K,Distortion |
find_calib_object |
求外参 R,t |
create_planar_laser_plane |
SVD 求解 A,B,C,D |
get_line_of_sight |
像素 → 射线 x,y |
intersect_ray_with_plane |
s=−D/(Ax+By+C) |
get_world_coordinates |
3D 点计算 |