APP下载

挂面精计量过程中挂面根数计数研究

2022-06-30李昆祥王志山付俊辉徐雪萌孙智聪贾世豪

粮食加工 2022年3期
关键词:挂面像素点算子

李昆祥,王志山,付俊辉,徐雪萌,孙智聪,贾世豪

(1.河南工业大学机电工程学院,郑州 450001;2.登封市启明轩程控设备有限公司,河南 登封 452470)

挂面计量是挂面包装中的一道重要工序,计量的速度往往影响着整个包装过程的速度。据调研,目前市面上挂面的计量方式主要采用称重式计量,称重式计量又分为人工称量和机器自动称量。人工称量,工人拿取挂面放到计量秤上,根据目标重量值进行增减操作。机器自动称量的方法主要是二次给料方式,即粗加料和细加料。一般粗加料加到目标重量的80%~90%,不足的部分由细加料补充,直至达到目标重量值。

在称重计量过程中,挂面对秤体的冲击,会对计量的速度和精度造成影响。谭鹏飞[1]指出下料冲击、秤体的震动以及存留于空中的物料等因素会带来称重误差,采用高精度的称重模块可使以上误差得以克服。付君等[2]指出称量法的计量精度受到“落差”影响,由物料落料口与称量装置之间高度差所引起的计量误差称为“落差”,设计了伸缩板大大减少了“落差”引起的误差。苏俊明等[3]通过分析两级给料切换点对包装机包装精度和速度的影响,提出了两级给料切换点最优取值的计算方法。称重式计量由于称重传感器的滞后特性,在计量速度和精度上存在制约关系,精加料速度快时,由于空中物料增多,计量误差会变大,计量精度限制着计量速度。

根据国家质量监督检验检疫总局 《定量包装商品计量监督管理办法》[4],对于2.5 kg规格的挂面定量包装,允许短缺量为1.5%,即37.5 g。但是根据行业规定,计量误差默认为±5 g。单根挂面质量约为0.6 g,也就是说,对这种挂面计数计量误差在8根以内即符合规定,应用基于图像处理的挂面根数计数技术则可以使得计量误差符合规定。计数计量的方法不必考虑称重传感器的滞后特性,使得计量速度摆脱计量精度的限制。计数计量为挂面的计量提供了一种新思路和创新方法。对挂面包装发展而言,挂面包装设备需要与一些新兴技术结合并创新,从而推动挂面包装设备行业整体创新升级。本文即研究基于图像处理挂面计数,为高速计量提供技术基础。

1 计数系统设计

整个计量过程分为粗计量和精计量,首先进行粗计量使其逼近目标重量值,然后进行精计量,根据“缺多少补多少”的原则,把缺少的重量换算成挂面根数,以根数为单位进行精确计量。

挂面计数系统主要由计算机、工业相机、存料槽和可调支架等组成。其中软件系统以Python语言编写,以Pycharm为开发环境,软件版本为PyCharm Community Edition 2020。OpenCV是以Python开发的开源计算机视觉库,在图像处理和计算机视觉方面广泛应用,在计算机视觉的物体计数领域应用也十分广泛。本文借助OpenCV开源库实现基于距离变换的自动计数系统。系统构成如图1所示。

图1 挂面计数系统

本文采用的方法为:对采集到的图像进行预处理,使用OTSU算法[5]进行二值化处理,运用全局阈值完成图像分割;对图像运用开运算进行滤波处理以去除图像中孤立的小点和毛刺;通过距离变换解决粘连问题;边缘检测求取连通域;当仍然存在一部分粘连时,提取连通域周长信息,即连通域周长除以单个标准周长得到粘连部分挂面数量,最后基于连通域方法进行计数。

2 挂面计数过程与方法

2.1 图像预处理

图像预处理的目的是为了消除图像中无关的信息,减少干扰,恢复真实的目标信息,方便后续的图像处理[6]。常用的预处理方法有:灰度化、二值化、形态学操作等。

2.1.1 图像灰度化

灰度化处理主要是为了减少对图像处理过程中的运算量,这样能极大地提高运算的效率,提升整体的运行速度。因为采集到的图像为彩色RGB图像,所以需要进行灰度化处理。

图像灰度化的原理就是在RGB模型中,由于三个通道的值不相等,需要用统一的灰度值表征该点的亮度,灰度值的范围是0到255,一共有256级灰度值[7]。图像灰度化的方法主要有平均值法、加权平均法和最大值法,由于平均值法和最大值法在灰度化时的效果较加权平均法效果较差,所以本文采用加权平均法。

加权平均法RGB灰度化的公式为:

OpenCV提供了灰度化函数cv2.cvtColor(input_img,flat),其中的两个参数input_img和flat分别表示要处理的灰度图像和转换类型。对于RGB→灰度转换,本文使用转换类型cv2.COLOR_BGR2GRAY实现。图2和图3分别为灰度化处理前后的对比图:

图2 原始图像

图3 灰度图像

2.1.2 图像二值化

图像的二值化处理就是把图像上每一像素点的灰度值变为0或255,使得整幅图像表现出明显的黑白效果,其中0表示黑色,255表示白色[8]。即将具有256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像[9]。这样有利于在对图像做进一步处理时,图像的性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单。一个像素点在灰度化之后的灰度值怎么转化为0或者255,这涉及到阈值选取的问题。

阈值选取一般分为全局阈值和局部阈值,全局阈值指的是整幅图像使用单一的阈值。全局阈值处理的实现方式比较简单,只需对图像像素逐个进行扫描,按其灰度值大于或小于设定的阈值,把像素相应地标记为目标或背景即可实现图像分割,即灰度值大于阈值的像素设为255,小于或等于阈值的像素设为0。可以用下式表示:

其中,I(x,y)表示第x行、第y列像素的灰度值;0(x,y)表示全局阈值处理后的图像,thresh表示选取的阈值。全局阈值是最简单的阈值处理技术,适用于目标和背景的灰度值相差较大、直方图有明显谷底的情况。

局部阈值又称自适应阈值,不再像全局阈值一样,整个图像只有一个阈值,而是针对输入图像每一个位置的灰度值都设有相应的阈值。OTSU算法[10],又被称为最大类间方差法,是一种自适应的阈值选取的方法。它是按图像的灰度特性,将图像分成背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。OTSU算法原理:将一幅图像中的所有像素分为两类,即C1和C2,这两类像素的均值分别为M1和M2,整个图像的均值为M,整个图像中的每个像素被分为C1和C2的概率分别为P1和P2。图像的灰度级范围为[0,L-1],所以有:

由方差的定义,得类间方差表达式:

由此可得:

求出使得上式最大化的灰度级k就可以得到OTSU阈值,其中:

算法实现:OpenCV中提供了二值化函数cv2.threshold(src,thresh,maxval,type)

其中的4个参数src,thresh,maxval,type分别指的是源图像、阈值、像素值的最大值、阈值的类型。因为本文阈值处理使用OTSU方法,所以参数类型type使用cv2.THRESH_OTSU。经过OTSU方法二值化处理后的图像如图4所示:

图4 OTSU二值化图像

2.1.3 形态学操作开运算

形态学操作是基于形态学对图像处理的算法,即结构元在每个像素位置上与原二值化图像对应的区域进行特定的逻辑运算错误,未找到引用源。最常见的形态学操作有腐蚀和膨胀,把这两种操作进行组合还可以进行开运算和闭运算的操作[11]。

腐蚀原理:遍历原二值图像的每一个像素,如果结构元完全处于前景图像中,就将结构元中心点所对应的像素点处理成前景;如果结构元未完全处于前景中,就将结构元中心点对应的像素点处理成背景。用公式表达为:

b为所有属于结构元B的元素,(B)z表示结构元B平移z之后的集合。

那么结构元B对二值图像A腐蚀表示为:

膨胀原理:遍历原二值图像的每一个像素,如果结构元中任意一点处于前景图像中,就将对应的像素点处理成前景;如果结构元完全处于背景外,就将对应的像素点处理成背景。用公式表达为:

那么结构元B对二值图像A的膨胀表示为:

开运算的具体实现:先进行腐蚀操作,再进行膨胀操作,就可以实现。在移除小的对象时候很有用,被用来去除噪声。

算法实现:OpenCV中提供了开运算操作的函数cv2.morphologyEx(src,cv2.MORPH_OPEN,kernel,dst,iterations)可以实现开运算操作。经开运算之后的图像如图5所示:

图5 开运算操作

2.2 距离变换

距离变换的基本思想是计算一个图像中非零像素点到最近零点像素点间的距离,也就是到所有零像素点的最短距离[12]。建立距离变换图像可以方便提取目标元素。距离变换的输入图像是二值图像,变换后的结果是灰度图像。距离变换的结果图像的某一点灰度值表示该像素点与其最近的零点之间的距离。距离背景边缘越远像素点的灰度值越大。距离方法有欧式距离、棋盘距离、城市街区距离等,欧式距离变换是二维空间中两点之间最短的距离,由于欧式距离的计算精度高[13],所以选用欧式距离变换。

2.2.1 距离变换的算法原理

距离变换是针对二值图像进行处理,处理完之后的结果是一副灰度图像,核心就是求图像中非零像素点到最近零像素点间的距离。整个图像上像素点u=(i,j),像素点v=(k,l),欧式距离De表示为:

距离变换是针对二值图像的一种变换,计算整幅图像中非零像素点到最近零像素点的距离。具体的算法原理是:

(1)计算一幅图像上所有的内部点和非内部点即边缘点和孤立点,点集分别为Q1和Q2。

(2)内部点 Q1中的点(x,y),使用上式计算出该点到Q2中的最小距离,计算出所有的最小距离,这些最小距离构成集合Q3。

(3)计算出集合Q3中最大值max和最小值min。

(4)整个图像的每个内部点,转换后的灰度值G(x,y)可以用下式表示:

2.2.2 距离变换结果

距离变换的算法实现:OpenCV中提供了变换函数cv2.distanceTransform(src,distanceType,mask-Size),参数src,distanceType,maskSize分别表示源图像,距离变换类型,距离变换的掩膜模板。本文使用欧式距离变换,所以参数distanceType选择为cv2.DIST_L2;参数maskSize选择为7,即7×7掩膜模板;距离变换的结果如图6所示:

图6 距离变换结果

经过距离变换之后提取出大致的前景区域,然后通过阈值处理剥离出前景区域;距离变换之后可以解决粘连的问题,使得求取连通区域变得简单,在距离变换后通过阈值处理可以得到距离变换二值图像,如图7、图8示。最后进行腐蚀处理如图9所示。

图7 阈值处理

图8 二值图像

图9 腐蚀处理

2.3 边缘检测

求取连通区域之前先进行边缘检测,通过计算图像中像素的差值获取变化率,求导运算,变化率大的地方就是边缘点。求边缘点的梯度算子有Sobel算子、Robert算子、Prewitt算子、LoG算子及Canny算子等。

Sobel算子是一种常用的边缘检测算子[14],相比其它算子具有计算简单、运算速度快的优点。计算出水平方向导数的近似值,将Sobel算子与原始图像进行卷积运算,计算水平方向像素值的变化情况。具有很好的边缘检测性能。卷积运算实际就是对指定区域的像素灰度值进行加权求和的计算过程[15]。

Sobel算子属于一阶导数的边缘检测算子[16],在算法原理上,通过3×3模板作为该图像中的每一个像素点进行卷积运算,最后选取阈值提取出边缘。Sobel算子算法原理:

(1)计算原始图像与 Sobel算子 x方向的卷积Gx,

(2)计算原始图像与 Sobel算子 y方向的卷积Gy,

(3)利用图像上每个像素点的横向及纵向梯度值,通过下式可以计算出该点梯度值G,

另外,为了减少运算时间,提高运算效率,使用不开平方的式子代替,即

经Sobel算子边缘检测处理的图像如图10示。

图10 Sober算子边缘检测

2.4 连通域标记

经过距离变换之后解决了粘连问题,当前景图像没有发生粘连时,计数结果比较准确;当仍然存在粘连问题时,计数结果往往不准确,所以可以基于连通域周长达到计数目的。对于粘连挂面的连通域,提取其周长特征,这种方式不是基于连通域的个数实现计数,所以可以克服由粘连现象引起的误差[17]。

统计出连通域的个数,可以用A表示;由连通域可以计算出每个连通域的周长,并用B来表示其周长。经过二值化后的图像会受到噪声干扰,产生较小的连通域,为了消除噪声干扰,添加参数连通域周长阈值TB,当连通域周长小于TB的视为噪声,大于TB的连通域则视为目标区域。图像中一些较大的连通区域则是由2根及以上数目组成的,单根挂面连通域的周长记为As,以较大粘连连通域周长除以单个标准挂面周长即可得到该连通域对应挂面的根数。

由上面的分类可以得到连通域周长与此连通域所包含的挂面根数之间的关系,设连通域周长为Ak,则此连通域所包含的挂面根数为Nk,k表示各连通域的标记;Ak与Nk之间的关系如下所示:

经过连通域标记处理后得到如图11所示的结果,图片中实际挂面数量为40根,图像处理结果显示为39根,计数准确率达到了97.5%,符合挂面计量的误差要求。

图11 连通域标记

3 结语

本文基于图像处理对挂面根数计数做了相关研究分析,对粘连严重的挂面采用了先分割再计数的方法,通过距离变换提取出挂面端面的骨架信息,使得图像中挂面端面“细化”,从而解决挂面粘连的问题;通过计算连通域周长信息从而得到挂面根数,连通域周长与标准单根挂面周长的比值即为根数,有效解决了严重粘连时计数困难的问题,结果显示,计数准确率达到了97.5%,为后续的挂面高速计量奠定了技术基础。

猜你喜欢

挂面像素点算子
与由分数阶Laplace算子生成的热半群相关的微分变换算子的有界性
图像二值化处理硬件加速引擎的设计
中江挂面:银丝飘香九百年
基于局部相似性的特征匹配筛选算法
Domestication or Foreignization:A Cultural Choice
一把挂面——脱贫攻坚乡村行走4
基于像素点筛选的舰船湍流尾迹检测算法
挂面怎么煮才好吃
基于canvas的前端数据加密
“妈妈牌”挂面