3D 视觉检测技术:结构光、ToF 与双目立体视觉选型实战一、为什么工业检测需要 3D 视觉?2023 年,我在一个锂电池产线项目中遇到了棘手的问题:极片缺陷检测。传统 2D 相机能拍出划痕、脏污,但面对极片表面10-30μm 的微小凸起(颗粒)和凹陷(针孔),2D 成像几乎是无能为力的——缺陷和背景的灰度差只有寥寥几个灰度级,无论怎么调打光角度,对比度都拉不开。后来我们换上了一台结构光相机,0.5 秒内生成一张 200 万点的点云,高度分辨率达到 5μm。那些在 2D 图像中"隐形"的颗粒和针孔,在深度图上像月球环形山一样清晰。这次经历让我深刻意识到:3D 视觉不是 2D 的"补充",而是解决一类全新问题的必要工具。当前工业检测中主流的 3D 成像技术有三条路线:结构光(Structured Light)、飞行时间(ToF)、双目立体视觉(Stereo Vision)。它们原理完全不同,适用场景也大相径庭。选错技术路线的代价可能是整个项目推倒重来。本文从原理、精度、速度、成本四个维度做一次系统对比,并给出实际选型建议。二、三种技术的核心原理2.1 结构光:三角测量 + 编码图案结构光的核心是三角测量。投影仪向物体表面投射已知的编码图案(条纹、格子、散斑),相机从另一个角度拍摄变形的图案,通过解码变形量反算深度。以最常用的相移法为例。投影仪依次投射 N 幅正弦条纹图案,第 n 幅的亮度分布为:In(x,y)=A(x,y)+B(x,y)⋅cos[ϕ(x,y)+2πnN]I_n(x, y) = A(x, y) + B(x, y) \cdot \cos\left[\phi(x, y) + \frac{2\pi n}{N}\right]In(x,y)=A(x,y)+B(x,y)⋅cos[ϕ(x,y)+N2πn]其中AAA是背景光强,BBB是调制度,ϕ(x,y)\phi(x, y)ϕ(x,y)就是我们需要解算的包裹相位(被截断在[−π,π][-\pi, \pi][−π,π]范围内)。相机捕捉到 N 幅变形条纹后,通过最小二乘法解出包裹相位:ϕ(x,y)=−arctan(∑n=1NInsin(2πn/N)∑n=1NIncos(2πn/N))\phi(x, y) = -\arctan\left(\frac{\sum_{n=1}^{N} I_n \sin(2\pi n/N)}{\sum_{n=1}^{N} I_n \cos(2\pi n/N)}\right)ϕ(x,y)=−arctan(∑n=1NIncos(2πn/N)∑n=1NInsin(2πn/N))拿到包裹相位后需要相位展开(Phase Unwrapping)——将截断的ϕ\phiϕ恢复为连续的绝对相位Φ\PhiΦ。这一步是结构光最难的地方:物体表面如果有高度跳变、遮挡或阴影,展开算法很容易出错,产生"拉丝"噪声。展开后的绝对相位Φ\PhiΦ通过三角测量公式转换为深度ZZZ:Z=B⋅fd+Φ⋅λ/(2π)Z = \frac{B \cdot f}{d + \Phi \cdot \lambda / (2\pi)}Z=d+Φ⋅λ/(2π)B⋅f其中BBB是投影仪-相机基线距离,fff是焦距,ddd是参考平面视差,λ\lambdaλ是等效波长。可以看出,深度分辨率与基线BBB成正比,与工作距离的平方成反比——这也是结构光相机在近距离小视野场景精度极高的物理原因。实际产品中,3 步相移(N=3N=3N=3)是速度最快的方案,4 步是精度和速度的平衡点,更高步数用于计量级精度场景。有些高端系统还会叠加格雷码(Gray Code)来辅助相位展开,或者使用多频外差法消除歧义。2.2 ToF:光的飞行时间ToF(Time of Flight)的原理最直观:发射调制光脉冲,测量从发射到接收的时间差Δt\Delta tΔt,深度Z=c⋅Δt/2Z = c \cdot \Delta t / 2Z=c⋅Δt/2(除以 2 是因为光走了往返路程)。但由于光速太快(约 30cm/ns),直接测量飞行时间需要皮秒级的时钟精度,工程上不可行。所以实际 ToF 相机用的是间接测量法(iToF)。以连续波调制(CW-iToF)为例,光源发出正弦调制的红外光:E(t)=E0⋅[1+sin(2πfmt)]E(t) = E_0 \cdot [1 + \sin(2\pi f_m t)]E(t)=E0⋅[1+sin(2πfmt)]反射光经过深度ZZZ产生的相位延迟为:Δϕ=4πfmZc\Delta\phi = \frac{4\pi f_m Z}{c}Δϕ=c4πfmZ相机在四个等间隔相位点(0°, 90°, 180°, 270°)采样,每个像素收集到的电荷量分别为Q0,Q90,Q180,Q270Q_0, Q_{90}, Q_{180}, Q_{270}Q0,Q90,Q180,Q270
3D 视觉检测技术:结构光、ToF 与双目立体视觉选型实战
3D 视觉检测技术:结构光、ToF 与双目立体视觉选型实战一、为什么工业检测需要 3D 视觉?2023 年,我在一个锂电池产线项目中遇到了棘手的问题:极片缺陷检测。传统 2D 相机能拍出划痕、脏污,但面对极片表面10-30μm 的微小凸起(颗粒)和凹陷(针孔),2D 成像几乎是无能为力的——缺陷和背景的灰度差只有寥寥几个灰度级,无论怎么调打光角度,对比度都拉不开。后来我们换上了一台结构光相机,0.5 秒内生成一张 200 万点的点云,高度分辨率达到 5μm。那些在 2D 图像中"隐形"的颗粒和针孔,在深度图上像月球环形山一样清晰。这次经历让我深刻意识到:3D 视觉不是 2D 的"补充",而是解决一类全新问题的必要工具。当前工业检测中主流的 3D 成像技术有三条路线:结构光(Structured Light)、飞行时间(ToF)、双目立体视觉(Stereo Vision)。它们原理完全不同,适用场景也大相径庭。选错技术路线的代价可能是整个项目推倒重来。本文从原理、精度、速度、成本四个维度做一次系统对比,并给出实际选型建议。二、三种技术的核心原理2.1 结构光:三角测量 + 编码图案结构光的核心是三角测量。投影仪向物体表面投射已知的编码图案(条纹、格子、散斑),相机从另一个角度拍摄变形的图案,通过解码变形量反算深度。以最常用的相移法为例。投影仪依次投射 N 幅正弦条纹图案,第 n 幅的亮度分布为:In(x,y)=A(x,y)+B(x,y)⋅cos[ϕ(x,y)+2πnN]I_n(x, y) = A(x, y) + B(x, y) \cdot \cos\left[\phi(x, y) + \frac{2\pi n}{N}\right]In(x,y)=A(x,y)+B(x,y)⋅cos[ϕ(x,y)+N2πn]其中AAA是背景光强,BBB是调制度,ϕ(x,y)\phi(x, y)ϕ(x,y)就是我们需要解算的包裹相位(被截断在[−π,π][-\pi, \pi][−π,π]范围内)。相机捕捉到 N 幅变形条纹后,通过最小二乘法解出包裹相位:ϕ(x,y)=−arctan(∑n=1NInsin(2πn/N)∑n=1NIncos(2πn/N))\phi(x, y) = -\arctan\left(\frac{\sum_{n=1}^{N} I_n \sin(2\pi n/N)}{\sum_{n=1}^{N} I_n \cos(2\pi n/N)}\right)ϕ(x,y)=−arctan(∑n=1NIncos(2πn/N)∑n=1NInsin(2πn/N))拿到包裹相位后需要相位展开(Phase Unwrapping)——将截断的ϕ\phiϕ恢复为连续的绝对相位Φ\PhiΦ。这一步是结构光最难的地方:物体表面如果有高度跳变、遮挡或阴影,展开算法很容易出错,产生"拉丝"噪声。展开后的绝对相位Φ\PhiΦ通过三角测量公式转换为深度ZZZ:Z=B⋅fd+Φ⋅λ/(2π)Z = \frac{B \cdot f}{d + \Phi \cdot \lambda / (2\pi)}Z=d+Φ⋅λ/(2π)B⋅f其中BBB是投影仪-相机基线距离,fff是焦距,ddd是参考平面视差,λ\lambdaλ是等效波长。可以看出,深度分辨率与基线BBB成正比,与工作距离的平方成反比——这也是结构光相机在近距离小视野场景精度极高的物理原因。实际产品中,3 步相移(N=3N=3N=3)是速度最快的方案,4 步是精度和速度的平衡点,更高步数用于计量级精度场景。有些高端系统还会叠加格雷码(Gray Code)来辅助相位展开,或者使用多频外差法消除歧义。2.2 ToF:光的飞行时间ToF(Time of Flight)的原理最直观:发射调制光脉冲,测量从发射到接收的时间差Δt\Delta tΔt,深度Z=c⋅Δt/2Z = c \cdot \Delta t / 2Z=c⋅Δt/2(除以 2 是因为光走了往返路程)。但由于光速太快(约 30cm/ns),直接测量飞行时间需要皮秒级的时钟精度,工程上不可行。所以实际 ToF 相机用的是间接测量法(iToF)。以连续波调制(CW-iToF)为例,光源发出正弦调制的红外光:E(t)=E0⋅[1+sin(2πfmt)]E(t) = E_0 \cdot [1 + \sin(2\pi f_m t)]E(t)=E0⋅[1+sin(2πfmt)]反射光经过深度ZZZ产生的相位延迟为:Δϕ=4πfmZc\Delta\phi = \frac{4\pi f_m Z}{c}Δϕ=c4πfmZ相机在四个等间隔相位点(0°, 90°, 180°, 270°)采样,每个像素收集到的电荷量分别为Q0,Q90,Q180,Q270Q_0, Q_{90}, Q_{180}, Q_{270}Q0,Q90,Q180,Q270