一、双目视觉概述

1.1 什么是双目视觉

双目视觉,说白了就是给机器装上两只眼睛。

我们人类用两只眼睛看世界,能判断距离、感知深度。双目视觉模仿的就是这个原理。它用两个相机从不同角度拍摄同一场景,然后通过计算两幅图像之间的差异——我们叫它视差——来还原三维信息。

我刚开始接触这个领域时,总觉得这玩意儿很玄乎。后来做了几个项目才明白,核心就一句话:三角测量原理。两个相机的位置固定,像我们的左右眼。同一个物体在左右相机成像的位置不同,这个偏移量就是视差。视差越大,物体离我们越近;视差越小,物体越远。

核心公式(简化版):

深度 Z = (焦距 f × 基线距离 B) / 视差 d

其中:

  • Z:物体到相机的距离
  • f:相机焦距
  • B:两个相机光心之间的距离
  • d:左右图像中对应点的像素差

嗯,这里要注意。这个公式看着简单,但实际落地时坑很多。我后面会慢慢讲。

1.2 双目视觉 vs 单目视觉

很多人问我:为什么不用一个相机?非要搞两个?

我直接说结论:单目视觉没有深度信息

你想想看,单目相机拍一张照片,它只知道物体在图像上的位置,但不知道它离相机多远。就像你闭上一只眼睛,伸手去拿杯子,是不是经常抓空?

单目视觉能做什么?

  • 二维尺寸测量(前提是物体在固定平面)
  • 二维码/条形码识别
  • 简单的颜色/形状分类

双目视觉能做什么?

  • 三维尺寸测量
  • 物体深度/高度检测
  • 空间定位与引导
  • 立体缺陷检测

我在项目中遇到过一件事。有个客户想用单目测一个零件的厚度,结果死活测不准。为什么?因为零件摆放有轻微倾斜,单目根本不知道倾斜角度。后来换成双目,一次搞定。说白了,单目是二维的,双目是三维的

对比项 单目视觉 双目视觉
深度信息
硬件成本 较高
标定难度 简单 复杂(需双目标定)
计算量 大(需立体匹配)
适用场景 平面检测 三维空间检测

我的建议:如果被测物体是纯平面的,且位置固定,单目就够了。但一旦涉及高度、深度、空间姿态,别犹豫,上双目。

1.3 工业检测中的典型应用场景

我做了这么多年机器视觉,双目视觉在工业里用得最多的就三个方向。我一个个说。

1.3.1 尺寸测量

这是最基础的应用。比如测量一个汽车零部件的长宽高、孔径、平面度。

单目也能测尺寸,但前提是物体必须紧贴一个已知平面。一旦物体有高度变化,单目就废了。

双目不一样。它直接重建三维点云,然后从点云里量尺寸。精度能做到0.1mm甚至更高,取决于相机分辨率和基线长度。

我记得有个项目,客户要测一个铸件的三个安装孔之间的空间距离。铸件形状不规则,单目根本没法做。我们用双目重建了铸件的三维模型,然后直接量孔心距,精度0.05mm,客户很满意。

1.3.2 缺陷检测

这个有意思。有些缺陷在二维图像里根本看不出来。

举个例子:一个塑料外壳,表面有个微小的凹陷。从正面拍,光线一打,可能完全看不出来。但用双目重建三维表面,这个凹陷在深度图上就是一个明显的坑。

我曾经做过一个手机中框的检测项目。中框的平面度要求很高,单目根本测不了。我们用双目扫描整个中框表面,生成深度图,然后设定一个平面度阈值。超过阈值的区域直接标红。嗯,效果立竿见影。

注意:双目视觉对光照比较敏感。如果现场环境光变化大,或者物体表面反光严重,深度图会出现空洞。我建议在打光设计上多花点心思。

1.3.3 定位引导

这个场景在自动化产线上特别常见。机器人要抓取一个工件,但工件的位置和姿态是随机的。怎么办?

用双目视觉给机器人一双眼睛。它先拍两张照片,重建工件的三维位置和姿态,然后告诉机器人:目标在X方向偏移了5mm,Y方向偏移了3mm,Z方向高度是200mm,并且绕Z轴旋转了2度。

机器人拿到这些数据,就能精准抓取。

我做过一个汽车轮毂的抓取项目。轮毂在传送带上,位置每次都不一样。我们用双目定位,机器人抓取成功率从原来的85%提升到了99.5%。那0.5%的失败,基本是因为轮毂表面油污反光太严重。

1.4 双目视觉系统的基本组成

一个完整的双目视觉系统,至少包含这几部分:

  1. 双目相机模组:两个相机,固定在一个刚性支架上。基线距离根据检测距离和精度要求来定。
  2. 镜头:焦距、光圈、畸变都要匹配。我建议用同型号镜头,省去很多麻烦。
  3. 光源:这个很多人忽略。双目视觉对光照均匀性要求很高,不均匀的光会导致立体匹配失败。
  4. 计算单元:工控机或者嵌入式板卡。立体匹配计算量大,CPU不够的话得上GPU。
  5. 标定板:棋盘格或者圆点阵,用于双目标定。

我个人习惯:选相机时,优先考虑全局快门。卷帘快门在运动场景下会出问题,左右图像时间不同步,深度图会扭曲。这个坑我踩过,说出来都是泪。

1.5 双目视觉的核心流程

我把整个流程画了一张图,方便你理解。

双目视觉核心处理流程 图像采集 双目标定 立体校正 立体匹配 深度计算 点云生成 应用分析 尺寸测量 缺陷检测 定位引导

这个流程看着步骤多,但实际跑起来很快。我优化过的系统,从采集到输出深度图,能做到30帧每秒,完全满足工业实时性要求。

1.6 落地时最容易踩的坑

说了这么多好的,我也得说说坑。不然你们回去做项目,肯定要骂我。

坑一:基线距离选错

基线越大,深度精度越高,但视野重叠区域越小。基线越小,重叠区域大,但精度低。我一般按这个经验选:基线 ≈ 检测距离的 1/10 到 1/5。

坑二:标定不认真

双目标定是基础。标定板不平、标定图片不够、标定算法选错,都会导致后续深度图全是错的。我曾经因为标定板有个小折痕,折腾了三天才找到原因。

坑三:忽略环境光

双目视觉对环境光很敏感。太阳光直射、频闪灯光、反光表面,都会让立体匹配失败。我建议在产线上加遮光罩,或者用主动光源(结构光)辅助。

1.7 小结

这一章我们聊了双目视觉的基本概念、和单目的区别、工业里的三个典型应用,还有整个系统的组成和流程。

说白了,双目视觉就是给机器一双眼睛,让它能看懂三维世界。在工业检测里,它解决的是单目解决不了的问题:深度、高度、空间姿态。

下一章,我会详细讲双目标定的原理和实操。那个环节是双目视觉的基石,标定做不好,后面全是白搭。


公众号:蓝海资料掘金营,微信deep3321