1、引言
工业应用上,机器视觉已经是一项较为成熟的技术。本文作为引文,主要对其中一些常用的技术手段以及一些技术做一个简单概述,其中一些技术细节,会在后续文章中展开。
做项目时,查阅网上很多资料,大部分都比较琐碎。本文重点对数字图像处理理论知识、硬件部分内容、软件部分做一个较为全面的阐述,能够快速了解到一个视觉系统所需要包含的内容,实现快速上手项目。
2、基础知识
2.1 知识结构
先上图,包含一个视觉系统中所应该有的大部分内容。
2.2、详解
2.2.1、数字图像处理基础知识
主要是一些理论知识,此处也做简单介绍,不做详细展开。
- 二值化:主要是将图像按照一定的规则,分割成为明(255)暗(0)两部分,也就是说,二值化后的图像只有两种像素值——0和255,是一种非黑即白的图像。常用的方法有固定阈值二值化(给定一个范围,将像素值在给定范围的像素置255,其余置0)、动态阈值二值化(首先平滑图像,然后,将原图与平滑后的图像逐像素对比,比原图亮的像素值置255,当然也可以设置比原图暗的像素值置255)、基于灰度直方图的二值化(根据灰度直方图的双峰,自动选择合适的阈值进行分割)。三种二值化方式后续会有专门的文章介绍,此处不做赘述。
- 形态学运算:常用主要是图像的膨胀、腐蚀、开运算、闭运算,开运算是先腐蚀后膨胀,而闭运算则相反,先膨胀。后腐蚀。顶帽运算和底帽运算相对较少,其实质也是开闭运算与原图的交、叉、并集实现的。很重要的一点是,这些形态学运算没有固定的使用方式,会根据不同的场景进行组合使用。
- 模板匹配:这个是halcon种较为常用的一种手段。可以自行训练或者创建一个模板,创建模板是一个比较耗时的操作,但是,模板可以保存至硬盘,后续使用时可直接读取使用,避免每次重新创建的耗时,毕竟很多视觉系统都有时间要求,不可能每次都重新创建模板。在halcon种,模板可以基于形状创建,也可以基于轮廓创建。大部分模板都用来做定位使用,根据模板查找待检测图像中与模板匹配度最高的部分。然后通过仿射变换将模板变换到查到的坐标位置,再进行形态学运算。
- 频域分析:频域分析法主要是需要去除或者拿出一些固定频率的图像时需要用到的一种手段。图像高频信息多集中在边缘部分,在边缘部分,像素值的梯度变化剧烈,频率较高,此处的边缘是图像中物体的边缘,不是指图片的边界,这一点在学习时候要明白,而其他部分是一些中低频信息。在空间域,有很多难以解决的问题转频域之后就会非常简单。举个最简单的例子,平时经常见到的正弦波,转至频域之后,就只有一个点。频域从频率的角度看待世界,区别于平时我们感知的世界,在理解上会有一定的难度。后续也会针对频域写一份专门的文章解读。
- 颜色空间理论:涉及到颜色检测的一些场景下会用到颜色空间。彩色图由RGB三通道组成,这个所有人都知道,但是,除了RGB空间,还有HSI(HSV)空间,此外还有其他颜色空间。经常用到的则是HSI空间,这里H空间为色调空间、S空间为饱和度空间,I空间为亮度空间。而HSV与HSI空间相同,唯一的区别在于I和V空间有细微差别,其他完全一致,两个空间可以作为同一个空间理解。在这里再仔细介绍一下H和S空间:H空间的色调,决定了图像呈现出什么颜色,S空间的饱和度,则是某一种颜色的纯度,纯度越高,这种颜色就月接近纯色,举个简单的例子就是红的程度不同。给出晚上非常多的一个HSI空间的图解,多看几遍就会明白其中的含义。
注:以上所有内容后续都会有专门的文章解读,这里只做简单介绍
2.2.2、成像原理
成像原理,其实就是很简单的一句话,反射什么光就呈现什么颜色。呈现白色的物体是因为反射了所有光,呈现黑色的物体是因为吸收了所有的光,呈现彩色的物体是因为对三色光的反射程度不同,导致三色光混合后呈现出的彩色。
2.2.3、硬件
硬件部分主要关注光源、光源控制器、相机等部分
- 光源是根据实际项目确定,从颜色上主要有R、G、B三色光,从打光方式上主要有条形光、面光、环形光,三种光源可以百度看实际的图片。如果采用黑白相机想要拍出彩色图,就需要使用RGB三色光分别拍三张图之后合成彩图,这里会涉及到一些白平衡算法,用于矫正图像偏色的问题,其中最常用效率最高的就是灰度世界算法。
- 光源控制器,主要是可控,控制光源输出的亮度。此处涉及到一个光源标定的问题:使用色卡标定RGB三种光源,使用光源控制器控制亮度使得色卡在RGB三种光源下像素值相同。此时才完成光源的标定,才能用于实际项目中。
- 相机,主要根据项目需要,如果项目要求图片质量较高,需要采用高分辨率的相机。此处,相机的分辨率,就是拍照后,图片上的像素个数。5120*5120的相机拍出来的图片有2500万个像素,对应图片的大小就是25M。
2.2.4、软件方面
常用的两种算法库:halcon 、 opencv,除此之外,也有其他算法库
-
halcon是一种相对更加容易上手的算法库。其中包含高度封装的各种算子,通过不同的算子的组合,可以满足基本上所有的需求。缺点是为商业软件,实际项目中需要考虑成本问题。安装上,后续版本的安装需要通过MvTec,电脑不可以加密,因为安装过程会校验一些文件,加密电脑无法读取文件会导致安装失败。试用的话,license需要每个月更新一次,网上有很多供大家使用的,可以自行百度,需要注意的是,千万不能修改系统时间来解决license的时效问题。后续会有专门文章介绍halcon的安装、使用、与c++的联合编程等。
-
opencv最大的优点是开源,免费,可以商用,采用c和c++编写。相较于halcon,上手相对较慢,内置的算法库与halcon 相比,也几乎应有尽有,只不过两种算法库的内部数据结构不一样,掌握一种之后,可以较快的上手另外一个。新手建议halcon入门,后续再开始opencv。同样,需要和C++联合编程,后续做详细介绍。
-
深度学习是近年来非常热门的一个方向。在视觉领域有着非常突出的表现,对于一些肉眼可以看出来,但是却不太容易手动设计特征的检测,深度学习有着极好的表现。但是深度学习的缺点在于,受实时性的限制,需要根据业务搭建尽量简单的网络模型,而且需要手动标注数据集。