基于MATLAB 的彩色基本形状检测设计
2019-10-15袁良祺刘力双顾淑琪田畅
袁良祺,刘力双,顾淑琪,田畅
(北京信息科技大学仪器科学与光电工程系,北京100192)
0 引言
在生产作业中,想要实现自动化技术在各个领域的应用,对机器视觉的数字图像进行处理颜色识别以及参数计算往往是重中之重,机器判断目标的位置主要通过图像中的某些特征图形来进行定位,图像识别系统主要是针对图像图形的颜色以及图像中的各个基本形状参数进行计算。
计算机视觉检测是指利用计算机图像处理系统来模拟人类视觉进行检测对象的分类、识别和测量的技术,具有检测效率高、可检测指标多、可非接触测量、检测结果客观等优点[1]。在图像的识别与检测中,检测的基本图形如四边形、圆形及椭圆计算得到参数以后可以进行更加复杂的图形叠加的参数计算,复杂的图形都是由简单的图形叠加起来的,所以检测简单图形的特征参数对于计算机视觉检测具有重要的意义。因此可以通过这样机器视觉检测系统对复杂图形零件图进行参数计算来判断零件的大小是否标准。
2019 年北京信息科技大学《视觉检测系统设计与实践》课程设计主要是针对颜色识别以及基本形状的参数计算,根据课程设计的题目要求利用MATLAB 设计出一套针对此课程设计的系统具有十分重要的意义。
MATLAB 软件是美国MathWorks 公司出品的一款商业软件,广泛应用于算法开发、数据可视化、数值计算、图形图像处理等领域,其图形用户界面(Graphical User Interface,GUI)具有高效、方便等特征,有助于直观、便捷的人机交互界面的快速设计与实现[2-3]。使用MATLAB GUI 提出了一个颜色识别及基本形状参数计算的方法,设计并实现了一个彩色基本形状检测系统。
1 识别图像的截取
对于不同使用者需要识别的图像不同、所识别的图像大小不同、图像所在区域不同,本设计采用自由的图像截取方式,使用者读取需要识别的图像后采用roipoly 函数在图像上使用鼠标进行点的选择,如图1(a)所示为截取零件图中单个椭圆零件的截取图,蓝色点为使用在使用鼠标左键在图像上面进行的选取点操作,选取点的连线应是封闭图形。选取点的位置任意、选取点的个数任意、选取点的任意、选取点与点之间的长度任意。
在选取的区域点击右键选择Create Mask 可以获得截取所截取的区域的形状,如图1(b)所示,为截取下来的二值图,此时可以将截取下来的图像与原始图像相乘再加上截取图像取反,可以得到横纵像素点与原图大小相等的被截取下来的椭圆零件图的图像,这样的从多个零件图中截取到的单个零件图如图1(c)所示。
图1 截取零件图中单个椭圆零件图
2 图像的颜色识别
图像的颜色识别主要是预先设定一个颜色对应区间,再将图片有色彩的图片(一般来说是RGB 图)进行每个像素点的对应颜色区间的判断。颜色对应区间可以先读取任意数量的颜色图像,通过MATLAB 读取此图像像素点的颜色区间值来规定颜色区间范围,这种规定颜色区间的方法可以称为颜色识别系统的学习,再将学习到的颜色区间值编写进程序再对颜色进行判断。本设计对颜色空间的图像进行有效处理都是在HSV 空间进行的,然后对于基本色中对应的HSV 分量需要给定一个严格的范围,H:0-180;S:0-255;V:0-255。
表1 十种基础颜色对应的HSV 颜色分量范围[2]
在MATLAB 中可以采用rgb2hsv 的函数将RGB图像转换到HSV 区域里进行处理,采用if 以及elseif函数来判断单个像素点的颜色归属。表1 为十种基础颜色分别是黑灰白红橙黄绿青蓝紫的HSV 对应区间数值范围。例如,图像中某个像素点的HSV 值分别为5、50、50 则判断此点为红色点并计数。
得到图像的横纵像素点个数后,再使用两个for 循环遍历二维图像的所有像素点,根据表1 所示HSV 颜色分量范围对所有像素点的颜色进行对应HSV 区间的识别,并计算各个HSV 颜色分量范围的像素点个数,判断像素点数量最多的颜色区域则是被识别物体的颜色,如图2 所示为颜色识别程序流程图。
图2 颜色识别程序流程图
含有绿色椭圆的零件图如图3(a)所示,采用第一步骤所介绍的识别图像的截取操作,对零件图中所需要的截取的绿色椭圆截取下来进行颜色识别的准备工作如图3(b)所示,再将图片信息进行颜色识别将颜色识别的结果输出到“可编辑文本”显示框里输出如图3(c)所示,可以得到所需要颜色识别的零件颜色信息。
图3 单个零件颜色识别效果图
3 基本形状的参数计算
最大多数的复杂图形都可以看成简单图形的叠加,所以在本设计中仅介绍了部分简单图形的参数计算方法以及展现了参数计算效果。
进行基本形状的参数计算步骤如图4 所示,对于所有基本图形的处理都应该截取单个所希望获得的零件图,再使用结构元素对图像进行腐蚀以得到其外部轮廓边界。由于不同图形的特征不同,所以跟踪对象的外部边界以及进行参数计算的拟合程序也不相同。对于所选择截取的图形选择对应的拟合方法进行拟合得到图形的参数并输出显示。
图4 图形进行参数计算基本流程图
3.1 椭圆的参数计算
对于椭圆的拟合采用的是最小二乘法进行椭圆拟合,采用MATLAB 的官网上所介绍的椭圆拟合子程序进行椭圆参数的计算,对于椭圆的个数可从一个到几个不等,椭圆方程如公式(1)所示,可以通过子程序的到各个自变量的系数以及倾斜角度。
通过椭圆参数计算,可以得到如图3 中的绿色椭圆的参数如表2 所示。
表2 绿色椭圆的各项参数
3.2 圆形的参数计算
对于零件图中的圆形部分,首先分布将圆形截取出来,使之成为单个的零件图。再对此单个圆形的零件图进行处理,如图4 所示,对于圆形的参数计算主要根据圆半径以及中心点的方法编写MATLAB 程序。程序的主要思路是将圆的所有点的坐标都得到,然后通过数学计算的方式的得到圆的拟合曲线以及圆的各项参数。其中的难点在于得到了圆上所有的坐标点后如何计算来得到圆的各项参数。圆拟合曲线的公式推导过程部分如下,最小二乘法拟合圆曲线:
R2=(x-A)2+(y-B)2
化简为一般形式:R2=x2-2Ax+A2+y2-2By+B2
令:
a=-2A
b=-2B
c=A2+B2-R2
转换方程可以得到圆曲线方程的另一个形式:
x2+y2+ax+by+c=0
只需要求出参数a,b,c 就可以求的圆心半径的参数[3]:
3.3 四边形的参数计算
对于零件图中的四边形部分,操作过程与圆形类似首先将四边形部分截取出来,使之成为单个的零件图。再对此单个四边形的零件图进行处理,如图4 所示编写四边形跟踪外部边界及拟合程序。首先利用filter2 函数使用梯度模板进行滤波操作为保留图中的水平或者垂直直线。其次使用Sobel 算子中的水平模板以及垂直模板获得的水平以及垂直梯度图,Sobel 算子对水平边缘和垂直边缘有较强的响应,可以得到清晰可见的水平和垂直细节。再次,创建纵向以及横向的直线结构元素对图像进行腐蚀,最后分别对四边形的四条线段进行拟合可以得到直线的斜率以及位移,再通过计算可以的到四边形各个参数。原始零件图以及提取垂直水平方向直线并计算参数拟合直线如图5所示,由于图像坐标系坐标原点在左上角,作图坐标系坐标原点在左下角,所以画出来的图像会有90°的旋转。
图5 四边形直线提取拟合示意图
4 系统结构功能的其他实现办法
在四边形的参数计算当中,选择使用梯度模板的方法来滤掉部分使用者不需要的信息。例如:在处理横向直线时的纵向直线;在处理横向直线时的纵向直线为使用者不需要的信息。处理不需要的信息而对所保留的信息进行处理是对四边形参数计算时的方法之一,像其他的方法例如:通过判断四边形四个顶点的顶点位置来进行点与点之间连线的之间参数计算,在理论上来说也可以实现,但是在实际编程中发现判断点归属的问题比较复杂,且若点不是突出在图形之外则识别点的位置较为困难,所以未采用这种办法。
5 结语
本文介绍了一种可以识别彩色工件的检测系统,可以根据使用环境、使用情况、使用者的不同自由的选择工件的检测位置、大小、形状,具有较高的检测精度,相比于传统的人工检测可以大大降低检测的成本精力并且提高检测精确性,并且此系统可以运用在各个领域。