一、双目视觉概述
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 双目视觉系统的基本组成
一个完整的双目视觉系统,至少包含这几部分:
- 双目相机模组:两个相机,固定在一个刚性支架上。基线距离根据检测距离和精度要求来定。
- 镜头:焦距、光圈、畸变都要匹配。我建议用同型号镜头,省去很多麻烦。
- 光源:这个很多人忽略。双目视觉对光照均匀性要求很高,不均匀的光会导致立体匹配失败。
- 计算单元:工控机或者嵌入式板卡。立体匹配计算量大,CPU不够的话得上GPU。
- 标定板:棋盘格或者圆点阵,用于双目标定。
我个人习惯:选相机时,优先考虑全局快门。卷帘快门在运动场景下会出问题,左右图像时间不同步,深度图会扭曲。这个坑我踩过,说出来都是泪。
1.5 双目视觉的核心流程
我把整个流程画了一张图,方便你理解。
这个流程看着步骤多,但实际跑起来很快。我优化过的系统,从采集到输出深度图,能做到30帧每秒,完全满足工业实时性要求。
1.6 落地时最容易踩的坑
说了这么多好的,我也得说说坑。不然你们回去做项目,肯定要骂我。
坑一:基线距离选错
基线越大,深度精度越高,但视野重叠区域越小。基线越小,重叠区域大,但精度低。我一般按这个经验选:基线 ≈ 检测距离的 1/10 到 1/5。
坑二:标定不认真
双目标定是基础。标定板不平、标定图片不够、标定算法选错,都会导致后续深度图全是错的。我曾经因为标定板有个小折痕,折腾了三天才找到原因。
坑三:忽略环境光
双目视觉对环境光很敏感。太阳光直射、频闪灯光、反光表面,都会让立体匹配失败。我建议在产线上加遮光罩,或者用主动光源(结构光)辅助。
1.7 小结
这一章我们聊了双目视觉的基本概念、和单目的区别、工业里的三个典型应用,还有整个系统的组成和流程。
说白了,双目视觉就是给机器一双眼睛,让它能看懂三维世界。在工业检测里,它解决的是单目解决不了的问题:深度、高度、空间姿态。
下一章,我会详细讲双目标定的原理和实操。那个环节是双目视觉的基石,标定做不好,后面全是白搭。
公众号:蓝海资料掘金营,微信deep3321