一、相机标定
对双目相机进行双目标定,通过视差恢复深度,可对相机拍摄的图进行三维重建,
内参矩阵
$$ K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} $$
畸变系数
$$ D = [k_1, k_2, p_1, p_2, k_3] $$
外参(相对左目)
$$ R, T $$
其中:
- R:旋转矩阵
- T:平移向量
二、立体匹配视差计算
对左目图像坐标 (uL, vL) 与右目图像坐标 (uR, vR),定义视差为:
$$ d = u_L - u_R $$
通过 SGBM (Semi-Global Block Matching) 或 Block Matching 算法获取 全局优化的稠密视差矩阵:
$$ D(u, v) $$
此矩阵包含了在每个像素下的视差信息,用于后续深度计算。
三、像素坐标归一化
去畸变并计算归一化像素坐标:
$$ x = \frac{u - c_x}{f_x}, \quad y = \frac{v - c_y}{f_y} $$
得到归一化相机坐标:
$$ \tilde{p} = [x, y, 1]^T $$
用于构建:
$$ s \cdot \tilde{p} = R [X, Y, Z]^T + T $$
进行三维空间坐标重建时使用。
四、深度恢复(Z 坐标计算)
由双目标定得出的基线:
$$ B = ||T|| $$
深度计算公式:
$$ Z = \frac{f_x \cdot B}{d} $$
若使用重投影矩阵 Q,则:
$$ [X, Y, Z, W]^T = Q [u, v, d, 1]^T $$
进而:
$$ X = \frac{X}{W}, \quad Y = \frac{Y}{W}, \quad Z = \frac{Z}{W} $$
完成像素域->三维空间点云域映射。
五、十字提取
- 在 AR/VR 显示屏显示高对比度 十字测试图,确保中心交点具有 亚像素可检测性。
使用亚像素质心法 / Harris + 亚像素角点优化等方法精确提取:
- 左目十字中心:(uL, vL)
- 右目十字中心:(uR, vR)
六、空间点恢复
使用已知标定参数计算深度:
$$ d = u_L - u_R $$
结合归一化坐标和深度恢复:
$$ Z = \frac{f_x \cdot B}{d}, \quad X = \frac{(u_L - c_x) \cdot Z}{f_x}, \quad Y = \frac{(v_L - c_y) \cdot Z}{f_y} $$
获得十字中心在空间中的重建点:
$$ P = (X, Y, Z) $$
七、投影到 XZ 平面
将空间点 (X, Y, Z) 投影到 XZ 平面:
$$ P_{XZ} = (X, Z) $$
进一步计算:
- 水平汇聚角(vergence angle): 水平面内左右目射线夹角
- 垂直视差(垂直发散度): 上下方向视差所恢复的角度
- 水平度(虚像水平偏差): 左右目重建点相对于水平面的偏移角度