无论2D相机还是3D相机,提到相机不可避免地涉及到机器视觉。
机器视觉与计算机视觉并没有一个明显的定义去划分。但在实际应用中,应用于工业检测的时候更多地被称为机器视觉而非计算机视觉。这时候,机器视觉更多地偏向或者专指以图像传感器为采集软件,辅助以光源,PLC甚至机器人等外部设备,以实现特定的检测或定位等特定目的。如果你从事的是机器视觉行业则避免不了PCL,机器人,编码器,光栅尺,光源,镜头等这些图像之外的硬件设备打交道。
另外还有一些领域,图像识别,物体检测和跟踪,自动文档分析,面部检测和识别,计算摄影,增强现实,3D重建以及医学图像处理等也会被称为机器视觉。
这篇文章所讲述的内容更多地以工业检测领域的机器视觉的角度出发。
2D视觉回顾
在以往的机器视觉领域通常是指2D的视觉系统即通过摄像头拍到一个平面的照片然后通过图像分析或比对来识别物体,从而应用缺陷、瑕疵,位置、OCR,条形码等。
以2D视觉检测为例,一个典型的基于2D相机的机器视觉检测系统通常如下组成:
机器视觉系统组成
其中,属于视觉部分的部件主要有:相机,镜头,光源,采集卡。
在机器视觉领域,每一个部件都是一门学问,例如对光源的选择上,常见的光源形状有环光,条光、面光等;从颜色上划分,则可以分为单色光源和RGB光源。从打光方式上刻有正面打光、侧面打光、背面打光等方式。
不同的样件和不同的目的决定了哪一种光源和打光方式合适,如何选择合适的打光方案既依赖于经验,例如对于金属件,可能蓝光最好,如果要检测边缘,则红色背光效果最佳,也依赖于实际效果的对比,对于一个具体的视觉检测项目,最佳的打光效果要靠实际进行打光的效果来进行判断和确定。
但即便2D视觉是一门如此高深的学问,它在应用上也有很大的局限。这种局限很大一部分来源于,真实世界的物体在经过镜头的透视投影后,相机能够捕捉到的只有2D的平面信息。对于一些涉及到3D信息的处理,它是无能为力的,因此3D相机和3D视觉的出现和发展便是大势所趋。
3D相机与2D相机的区别
3D相机与2D相机的最大区别在于,3D相机可以获取真实世界尺度下的3D信息,而2D相机只能获取像素尺度下的2D平面图像信息,以下面的两幅图为例:
上面的左图是图像处理人员都知道的Lena,这种图片是2D相机获取的一张RGB图像。而右图是一张由深度相机获取的深度图。尽管看起来黑乎乎的一片,但我们依然可以看出图像的形状。
可能有的小伙伴看到这里,心中的疑惑更大了。这不还是一张2D图吗。的确,这还是一张2D图像,但这种图像上存储的不是由光照决定的灰度信息,而是由距离决定的深度信息。
众所周知,世界坐标系下可以由(X,Y,Z)三个轴来表示,空间中的任何一个点都可以由(x,y,x)来表示。实际上作为一个合格的3D相机,它传输给你的必然是X,Y,Z方向的真实信息,例如,有的3D相机会得到X,Y,Z图。其中,Z图便是我们所谓的深度图,而其它两张图分别存储着X,Y方向的真实信息。
如果只有一张深度图,那么其它两个轴方向的信息也必然可以由某个公式给出。这便是被称为3D相机的原因。我们以一款工业3D相机Gocator为例:
Gocatro生成的深度图
3D相机Gocator的X,Y,Z数据的获取
Gocator的深度图可以直接获取,而X,Y方向的信息与行和列按一定的公式进行生成。值得注意的是,这个公式一般由生产该3D相机的厂商决定,并不通用。我们再以民用级别的深度相机kinect为例,它的X,Y方向的信息可以按以下公式来获取。
其中,d为深度图存储的信息,(u,v)为像素坐标,()为相机内参,相机内存均可标定得知。在实际使用中,厂商会提供标定好的参数或者现成的API。
Kinect的API参数,用于生成X,Y,Z图
通过3D相机得到的数据,我们可以还原出被测量物体的三维信息,进而用于后一步的处理。
3D相机的应用
随着科技的发展和检测需求的提高,3D视觉越来越在机器视觉行业占有重要的地位,与传统的2D相机相比,3D相机能获取三维信息,可以实现2D视觉无法实现或者不好实现的功能,例如检测产品的高度、平面度、体积等和三维建模等。
轮胎划痕很纹理检测
体积检测
路面系统检测