《深度相机选型与3D视觉检测课程》

2. 3D视觉基础:深度图、点云、视差、相机坐标系、内参外参等核心概念与数学基础

在进入深度相机选型与3D视觉检测应用之前,必须先建立一套统一的语言体系。无论是结构光、ToF(飞行时间)还是双目立体视觉,最终输出的数据都离不开深度图、点云、视差以及相机几何模型。本章将围绕这些核心概念展开,重点厘清它们之间的数学关系与物理含义,为后续的相机选型、标定、算法调试和系统集成打下坚实基础。我们将从像素坐标系出发,逐步推导到世界坐标系,并解释内参、外参如何将二维图像与三维空间精确对应。

3D视觉核心概念与坐标系变换链路 图像平面 像素坐标 (u, v) 深度值 Z (mm) 灰度/IR强度 深度图 (Depth Map) 内参K 点云 (Point Cloud) 相机坐标 (Xc, Yc, Zc) XYZ + 强度/颜色 无序点集 / 有序点云 每像素对应一个3D点 外参RT 世界坐标系 (Xw, Yw, Zw) 机器人基座/工作台 多相机拼接基准 手眼标定目标 双目视差 (Disparity) d = x_left - x_right Z = (f * B) / d B: 基线距离, f: 焦距 视差图 → 深度图 内参矩阵 K [fx 0 cx] [0 fy cy] [0 0 1] fx=f/dx, fy=f/dy 畸变模型 径向: k1, k2, k3 切向: p1, p2 桶形/枕形畸变 标定板校正 核心公式: Z * [u, v, 1]^T = K * [R|t] * [Xw, Yw, Zw, 1]^T 深度图是2.5D数据,点云是3D数据,视差是双目深度估计的中间量

2.1 深度图与视差:从2.5D到3D的桥梁

深度图(Depth Map)是一种灰度图像,其中每个像素值代表该点与相机光心之间的垂直距离(通常以毫米为单位)。它本质上是2.5D数据——虽然具有Z方向信息,但依然受限于图像网格结构,无法表达遮挡关系或自由旋转视角。深度图是大多数深度相机的直接输出格式,例如Intel RealSense的深度流、Kinect的深度帧。

视差(Disparity)是双目立体视觉中的核心概念。当两个水平放置的相机同时观察同一场景时,空间中的一点P在左图像上的投影为x_left,在右图像上的投影为x_right,视差定义为d = x_left - x_right。根据三角测量原理,深度Z与视差d成反比关系:

Z = (f * B) / d

其中f为相机焦距(像素单位),B为左右相机光心之间的基线距离。视差图经过转换即可得到深度图。值得注意的是,视差与深度并非线性关系——近距离物体视差大、深度分辨率高;远距离物体视差小、深度分辨率急剧下降。这决定了双目相机在近距离(0.3m~3m)具有优势,而远距离精度不如ToF。

数据形式维度物理含义典型应用
深度图2.5D每个像素存储Z值(mm)背景分割、遮挡检测
视差图2D左右图像对应点水平偏移量立体匹配、深度估计中间量
点云3D空间离散点集(X,Y,Z)三维测量、SLAM、逆向工程
工程经验:在选型时,如果应用只需要平面尺寸测量(如工件长宽),深度图即可满足;若需要进行体积计算、姿态估计或多视角拼接,则必须使用点云数据。深度图转点云的过程需要内参矩阵参与,且每个像素的Z值对应相机坐标系下的深度,而非欧氏距离。

2.2 相机坐标系与内参矩阵:像素如何映射到相机空间

相机坐标系(Camera Coordinate System)以相机光心为原点,Z轴指向相机前方,X轴向右,Y轴向下(遵循右手定则的变体)。图像坐标系的原点位于图像中心,而像素坐标系的原点位于图像左上角。从像素坐标(u,v)到相机坐标(Xc,Yc,Zc)的转换由内参矩阵K描述:

[u]   [fx  0  cx] [Xc]
[v] = [0  fy  cy] [Yc]
[1]   [0   0   1] [Zc]

其中fx = f/dx,fy = f/dy,dx和dy分别为单个像素在x和y方向的物理尺寸(mm/pixel),cx和cy为主点坐标(通常接近图像中心)。内参矩阵是相机的固有属性,由镜头焦距和传感器尺寸决定,但会因温度、振动等因素发生微小变化,因此需要定期标定。

实际镜头还存在畸变,包括径向畸变(k1, k2, k3)和切向畸变(p1, p2)。畸变会导致直线在图像中变弯,尤其在图像边缘区域。标定过程通常使用棋盘格或圆点标定板,通过OpenCV或Matlab工具箱计算内参与畸变系数。未校正畸变的深度图直接转点云,会导致边缘点云位置偏移,在精密测量中必须避免。

常见误区:初学者常将深度图中的像素值直接当作相机坐标的Z值使用,忽略了内参中的fx、fy和主点偏移。正确的做法是:先通过内参矩阵将像素坐标(u,v)转换为归一化坐标(x', y'),再乘以深度Z得到相机坐标。公式为:Xc = (u - cx) * Z / fx,Yc = (v - cy) * Z / fy。

2.3 外参矩阵:从相机坐标系到世界坐标系

外参矩阵(Extrinsic Matrix)描述相机在世界坐标系中的位姿,由旋转矩阵R(3x3)和平移向量t(3x1)组成。其作用是将相机坐标系下的点转换到世界坐标系:

[Xw]   [R | t] [Xc]
[Yw] = [      ] [Yc]
[Zw]   [0  1]  [Zc]
[1 ]            [1 ]

外参矩阵的物理意义是:世界坐标系先经过旋转R,再经过平移t,与相机坐标系重合。在机器人视觉引导场景中,外参通常通过手眼标定获得——即求解相机与机器人末端执行器之间的固定变换关系。常见的标定方法包括AX=ZB问题求解,使用棋盘格在机器人工作空间内多次移动并采集图像。

外参的精度直接影响3D测量的绝对精度。例如,在机器人抓取任务中,如果外参标定误差为1mm,那么相机识别到的物体位置在机器人坐标系中也会有1mm的偏差,可能导致抓取失败。因此,外参标定是3D视觉系统部署中最关键的步骤之一。

案例拆解:某汽车零部件装配线需要引导机器人抓取不同高度的螺栓。系统采用双目相机安装在机器人手臂上方(Eye-to-Hand构型)。初始阶段,系统识别精度为±2mm,但抓取成功率仅85%。排查发现,外参标定使用了12个位置,但标定板平面与相机光轴夹角过大(>45°),导致旋转矩阵解算不稳定。重新设计标定流程:将标定板固定在水平工作台上,机器人带动相机在5个高度、每个高度3个姿态下采集图像,共15组数据。使用最小二乘法优化后,外参重投影误差从1.8像素降至0.3像素,抓取成功率提升至98.5%。复盘经验:外参标定必须覆盖实际工作空间,且标定板姿态应多样化,避免退化配置。

2.4 点云生成与处理:从深度图到可计算的三维数据

点云(Point Cloud)是三维空间中离散点的集合,每个点包含坐标(X,Y,Z)以及可选的强度、颜色或法向量信息。根据深度图生成点云的流程如下:

  1. 输入深度图:获取每个像素的深度值Z(单位:mm)
  2. 内参映射:利用内参矩阵将像素坐标(u,v)转换为相机坐标(Xc,Yc,Zc)
  3. 外参变换:若需要世界坐标,则应用外参矩阵[R|t]
  4. 滤波与降采样:去除无效点(深度为0或NaN)、离群点,使用体素滤波器降低点密度
  5. 后续处理:法向量估计、点云配准、分割、特征提取等

点云数据量通常较大——一个VGA分辨率(640x480)的深度图可生成30万个点,每个点若包含XYZ+RGB+法向量,约需48字节,单帧数据量约14MB。在实时检测系统中,必须考虑点云处理的算力开销。常用策略包括:ROI裁剪(只处理感兴趣区域)、体素降采样(将空间划分为固定大小的立方体,每个立方体保留一个代表点)、以及直通滤波(按坐标范围裁剪)。

点云类型特点适用场景
有序点云保留图像网格结构,索引快速深度相机直接输出,适合快速处理
无序点云点无固定排列,需KD-Tree加速激光雷达、多视角拼接后的数据
彩色点云XYZ+RGB,便于语义分割需要颜色信息的检测任务
性能优化建议:在工业检测中,不必处理全量点云。例如检测平面工件的划痕,可先通过RANSAC平面分割提取工件表面,再将表面点云投影到2D平面进行图像处理,计算量可降低80%以上。此外,使用PCL(Point Cloud Library)或Open3D时,应尽量使用体素降采样而非均匀采样,以保持点云密度均匀。

2.5 常见误区与总结复盘

在3D视觉基础概念的学习和工程应用中,以下误区值得特别关注:

  • 混淆深度与距离:深度图存储的是Z轴坐标(垂直距离),而非到相机的欧氏距离。对于大视场角镜头,边缘像素的欧氏距离可能远大于Z值。
  • 忽略畸变校正:未校正畸变的深度图在边缘区域会产生明显的3D位置误差,尤其在广角镜头下。建议在深度图生成点云前,先对深度图进行畸变校正。
  • 外参标定不充分:仅使用少量标定图像或标定板姿态单一,会导致外参解算退化。建议至少采集15~20组覆盖工作空间的图像。
  • 点云坐标系不统一:在多相机系统中,各相机的点云必须统一到同一世界坐标系下才能拼接。这需要精确的外参标定和同步触发机制。

总结:深度图、视差、点云是3D视觉的三种核心数据形态,它们通过相机内参和外参相互关联。内参描述像素与相机坐标的映射关系,外参描述相机与世界坐标的位姿关系。在实际项目中,建议先明确最终需要的是深度图还是点云,再选择合适的相机类型和标定流程。对于精密测量应用,务必重视畸变校正和外参标定质量;对于实时性要求高的应用,应提前规划点云降采样和ROI策略。