您好,欢迎访问三七文档
《数字图像处理》课程论文题目:瓶子灌装流水线是否灌装满瓶体的检测姓名学院专业班级学号指导教师日期2015年6月10日瓶子灌装流水线是否灌装满瓶体的检测摘要:使用数字图像处理方法分析图像中液面高度来检测瓶中的液体体积是否符合要求。通过对瓶子中装满液体的区域进行提取,以此区域的大小作为判断的依据。首先对采集的实际图像进行RGB三种颜色分量的提取,将其中的两种分量作差,除去背景,接下来将作差后的图像采用大津法计算阈值并二值化,再通过腐蚀、膨胀等运算去除躁声点。最后标记连通域、计算各连通域的面积,判断出未装满的瓶子,将其标注出来,同时统计瓶子总数及未装满的个数。所有处理过程通过matlab编程实现。关键词:数字图像处理;液体体积检测0引言随着消费水平的提高,相关法律法规的完善,在食品(饮料、调料)和医药等行业中,产品的质量变得越来越重要。而产品的重量符合要求正是产品质量的基本要求之一。但现在,这些行业的生产规模日益扩大,生产现代化水平日益提高。采用传统手段对大规模现代化生产线上的产品灌装后的液体体积进行逐一检测,已经是很困难的了。在固定的同一种瓶中,其液体的液位变化直接反应了所装液体体积的变化,所以对液位的检测实际上就是对灌装液体体积的检测。本文利用数字图像处理技术对灌装后瓶内液位进行检测的算法,能满足对液体体积进行快速在线检测的要求。在当前市面上液面的检测是基于传感器等芯片实现的,结构复杂。而基于数字图像处理的算法只能处理一些简单的理想的图片,事实上流水线由于空气浮沉、机械振动等的影响根本无法采集到躁点少,杂波低的理想图片。本算法利用作差法实现了去噪,又运用了图像增强法实现了对目标图像的提取,克服了传统算法的缺点。1检测原理在瓶子灌装流水线上要实现对液体是否灌装满瓶体的检测,可以有下面三种方法:(1)以液面的高度作为判断依据。将刚好装满时的液位高度作为标准,若液面高度低于此标准,则认为未装满。(2)以瓶口处未装满的体积作为判断依据。由于同一流水线上的瓶子的尺寸和规格都是一样的,所以当瓶口处未装满的体积大于标准值时则认为未装满。而实际通过摄像头采集的图像是二维的,无法计算体积,于是有面积代替。(3)以瓶子装满的体积作为判断依据。由于同一流水线上的瓶子的尺寸和规格都是一样的,所以当瓶子装满的体积小于标准值时则认为未装满。而实际通过摄像头采集的图像是二维的,无法计算体积,于是用面积代替。考虑到算法的简便性,本文采用了第三种方法。图像处理的流程如下:图(1)图像处理流程图2去背景由于我们最终要提取的是瓶子装满区域的面积,所以我们感兴趣的部分就是瓶子装满液体的区域,其他部分则为背景。去除背景的干扰才能便于后续的面积提取。例如模拟瓶子灌装流水线上的初始图像如图所示:图(2)初始图像其中瓶子本身为无色透明的,所装液体为橙黄色,瓶后的挡板为白色(由于采集光线所致,挡板略显粉红)。若直接进行灰度变换(如图3),所得图像难以将装满区域提取。去背景二值化去噪生计算装满区图像的面积比较判断是否装满并标记统计总数并计算不合格率图(3)直接进行灰度变换后图像应用matlab编写程序为:clearcloseallI=imread('E:\图像处理\6.png');figure,imshow(I)I=rgb2gray(I);figure,imshow(I)因此不能直接进行灰度变换,只能考虑先对彩色图像进行处理。首先将彩色图像的RGB三个彩色分量提取出来。应用matlab编写程序为:fR=I(:,:,1);%获取图像的红色分量fG=I(:,:,2);%获取图像的绿色分量fB=I(:,:,3);%获取图像的蓝色分量figure,imshow(fR)%分别显示图像figure,imshow(fG)figure,imshow(fB)图(4)红色分量图像图(5)绿色分量图像图(6)蓝色分量图像将RGB三个色彩分量的图形进行分析可发现,在每一种分量的图像中瓶子装满区域与其他部分的差别不大不易提取,但将三种分量的图像进行对比可以发现瓶子已灌装液体的区域与未装满的在分量图像中各有差异,因此可以采用图像代数运算中的图像减法来实现图像装满区域的提取,即图像的去背景。图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理工作的准备步骤。例如,可以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。对原始图像分析可得到如下特征:(1)瓶后的挡板为白色,RGB三种分量的灰度值都接近255,因此任意两种分量的图像做减法运算均可以去掉挡板。(2)瓶中液体为橙黄色,瓶子本身为无色,因此:红色分量减去蓝色分量可提取出瓶中装有液体的区域:图(7)红色分量减去蓝色分量后的图像图(8)红色分量减去绿色分量后的图像显然,对液体区域的提取红色分量减去绿色分量没有没有红色分量减去蓝色分量的清晰。图(9)绿色分量减去红色分量后的图像图(10)绿色分量减去蓝色分量后的图像图(11)蓝色分量减去红色分量后的图像图(12)蓝色分量减去绿色分量后的图像经过对以上处理方法所得结果进行对比,决定给采用红色分量减去蓝色分量来提取瓶子中装满液体区域的方法。此方法可有效提取液体区域,且噪点少,便于后续的二值化等处理。综上可得,用不同颜色分量做作差去背景的方法十分灵活,可根据瓶子的颜色及瓶中液体的颜色来选择不同的作差方式。尤其适用于瓶子颜色与所装液体颜色不同情况下。以上处理应用matlab编写的程序为:fR_B=fR-fB;%红色分量减去蓝色分量figure,imshow(fR_B)fR_G=fR-fG;%红色分量减去绿色分量figure,imshow(fR_G)fG_R=fG-fR;%绿色分量减去红色分量figure,imshow(fG_R)fG_B=fG-fB;%绿色分量减去蓝色分量figure,imshow(fG_B)fB_R=fB-fR;%蓝色分量减去红色分量figure,imshow(fB_R)fB_G=fB-fG;%蓝色分量减去绿色分量figure,imshow(fB_G)3二值化图像的二值化处理就是将图像上的点的灰度置为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。利于再对图像做进一步处理时,图像的几何性质只与像素值为0或255的点的位置有关,不在涉及像素的多级值,使处理变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。图像二值化的具体实现方法就是将所有灰度大于或等于阈值的像素判定为属于特定物体,其灰度值为255表示,而其他的像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的区域。因此图像二值化的选择十分关键,根据其对像素的处理方式,主要分为三类:(1)全局阈值法:是指整个图像采用单一阈值(全局阈值)T进行图像二值化。一般有图像的直方图或灰度的空间分布确定一个全局阈值T,将图像的每个像素的灰度值与T进行比较。若大于T,则取为前景色;否则取为背景色;典型的全局阈值法有Ostu法、最大熵法等。(2)局部阈值法:由当前像素灰度值与该像素周围点局部灰度特征来确定像素的阈值。通过定义考察点的邻域,并由邻域计算模板实现考察点灰度与邻域点的比较。典型的局部阈值法有Bernsen法、Nilblack法等。(3)动态阈值法:当光照不均匀、或者背景灰度变化较大等情况时,必须根据图像的坐标位置关系自动确定不同阈值,实施动态的阈值确定。该法的阈值选择不仅取决与该像素及周围像素的灰度值。而且还与该像素的坐标位置有关。邻域均值法是较为常见的一种动态阈值确定技术。对去背景后的图像(图(7))分析得到,图像整体光照均匀,适合用全局阈值法,这里我们采用Ostu法(最大类间方差法,又称大津法)来选取阈值。应用MATLAB进行图像处理时使用函数level=graythresh(I)来计算全局阈值(level).处理后图像如图(13)。图(13)采用Ostu法选取阈值并将进行二值化的图像二值化后的图像基本可以,已能将瓶中装满液体的区域提取。应用matlab编写程序为:bw1=im2bw(fG_B,level);%二值化figure,imshow(bw1)四滤波通常,由于噪声的影响,图像在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声,背景区域上散布着一些小的噪声物体。连续的开和闭运算可以有效地改善这种情况。有时需要经过多次腐蚀之后在加上相同次数的膨胀,才可以产生比较好的效果。开运算:先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。闭运算:先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空间、连接邻近物体、平滑其边界的同时并不明显改变其面积。腐蚀:腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。膨胀:膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填充物体中的空洞。经过二值化后的图像虽然能基本提取所需区域,但扔存在一些纤细处分离的物体类噪声点。我们要将这些噪声点去掉,对于每一个瓶子的位置只保留一个连通的区域来计算面积,所以采用开运算的方法来消除噪声。由于噪声点不是很多,可进行一次开运算便得到了很好的效果(如图(14))。如果小物体类噪声点较大可采用多次腐蚀后在经相同次数的膨胀来完成。图(14)经开运算后的图像应用matlab编写程序为:%SE1=strel('arbitrary',eye(5));%设置腐蚀结构元素%bw2=imerode(bw1,SE1);%腐蚀%figure,imshow(bw2)bw3=bwmorph(bw1,'open');%开运算figure,imshow(bw3)%bw3=bwmorph(bw2,'open');%开运算%figure,imshow(bw3));五装满区域面积的计算对瓶中装满液体区域面积的计算实际就是对目标所占像素数的计算。经过开运算后,每个装满的区域都成了一个连通的区域,为计算每一个区域的面积首先要各个区域进行标记,可以利用matlab中的bwlabel函数来实现;然后计算被标记的各区域的大小,可以利用matlab中的regionprops来实现;Bwlabel的作用是在二值图像中标记连通区域,用法如下:L=bwlabel(BW,n)返回一个和BW大小相同的L矩阵,包含标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是按8连通寻找区域。[L,num]=bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。regionprops,它的用途是getthepropertiesofregion,即用来度量图像区域属性的函数。用法如下:TATS=regionprops(L,properties)测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素等于对应区域2;以此类推。返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。Properties可以是由逗号分隔的字符串列表、包含字符串的单元数组、单个字符串’all’或者’basic’。如果properties没有指定或者等于’basic’,则属性:’Area’,’Centroid’和’BoundingBox’将被计算。在这里我们要得到的是’Area’属性,即面积属性。Matlab代码为:[L,n]=bwlabel(bw3,8);%STATS=regionprops(L,'Area');%计算连通域大小stats=regionprops(L);Cen=cat(1,stats.Centroid);S=cat(1,stats.Area);经上述处理后图像中4个装满区域的面积分别为:128
本文标题:图像处理课程报告
链接地址:https://www.777doc.com/doc-4121352 .html