基于机器视觉的球状农产品分拣机的探索研究

2022-05-14 04:09
南方农机 2022年10期
关键词:数组编码器亮度

王 雷

(山东省平邑县农机发展促进中心,山东 临沂 273300)

随着人民生活水平的提高,对水果等农产品品质的要求也提高了,对于产品的大小、形状、颜色、损伤腐烂程度、成熟度等指标有了更高的要求。这就需要按指标要求对产品进行分类分拣。其中大部分指标依靠纯机械的装置是难以实现的,计算机视觉技术的发展,使得过去由纯机械无法完成的工作,通过计算机及传感器与机械的结合能够得以完成。笔者对基于计算机视觉识别技术进行坏果去除的球状农产品分拣机进行了研究探索。

1 系统整体结构

第一,机械部分完成产品的取料、输送、翻转、分拣动作。翻转动作是为了实现对产品表面的全面图像采集,本方案机械部分通过对产品进行翻滚操作来实现,比较适合对圆球状农产品的识别。

第二,PLC(Programmable Logic Controller)[1]现场控制单元,接收来自计算机的数据,完成对机械部分输送分拣装置的控制,并把部分现场信息(主要是运行位置信息)反馈给计算机。

第三,计算机及摄像采集装置周期性地进行图像采集、识别处理,生成分拣控制数据传输给第二部分PLC现场控制单元。

本方案需要完成好三个部分的功能及相互之间的数据传输协调配合。自动分拣机械结构示意图如图1所示。

图1 自动分拣机械结构示意图

2 机械结构原理

如图1 所示,机械部分主体采用输送链结构,横向外部两侧为两条输送链条[2]。横撑固定在两侧链条上,间距相等。链条运转在三条链轮轴上,其中中间的轴安装在较高的位置,链条按图示顺时针方向运转形成先高后低的走势。左边和中间的轴的内侧还设有支撑带,与外侧链条同速运转,支撑住产品的同时还尽量减少产品的磨损。中间和右侧轴之间下坡面上设有滚动板,表面采用软质材料,增加摩擦的同时减少产品损伤。在横撑上方垂直于横撑方向上还固定有分隔条,以防止产品滚动下落的过程中发生横向窜动。料斗中的产品在横撑的带动下,先爬坡上升,多余产品自由下落,避免产生堆叠,以利于分拣。产品继续前行越过中间轴后进入下坡段,落到滚动板上,摄像头[3]安装在正对滚动板的位置,对下落的产品进行拍摄。滚动板有一定倾角,产品在重力作用下会自动滚落,并在横撑的阻挡下与横撑同步向下滚落。产品滚动到右侧轴上方,将要下落的位置处。在滚动板尾端平行于横撑的方向开设有一排喷气孔,这些喷气孔都经过相应的电磁阀连接着压缩空气,当链条周期性运转到喷气孔正对产品的位置时,PLC 现场控制器会控制坏果下方的若干喷气孔对应的电磁阀打开一小段时间,坏果会被压缩空气推入坏果收集斗。合格的产品会滚落进入合格品收集斗,以供进一步加工处理。一般情况下,坏果的比例较小,采用压缩空气喷吹的方式喷吹时间可调,只要达到正常分离效果就可以,所以相应用气量和能耗不会太高。而且这种结构简单可靠,易于维护,对产品的损伤小。

3 PLC控制原理

PLC 可编程控制器是如何控制坏果对应喷气孔进行喷吹的呢?首先,在PLC 内部,为滚动板上成排成列的产品设置对应的二维变量数组,每一行数组对应滚动板上的一排空间,数组的元素存储了坏果对应的喷气孔位置号。每一排产品坏果数量不确定,数组的列数可以比实际坏果对应的喷气孔数大一些。PLC和计算机之间通过modbus(一种串行通信协议)[4]串口通信连接,计算机可以根据识别的坏果的坐标计算出其对应的一个或多个喷气孔位置号,写入PLC 的对应数组。然后,PLC 就根据数组元素的值确定打开哪个喷气孔的电磁阀。这些数组的地址是固定的,可以通过设定指针循环使用它们。设定一个喷吹位置指针,每转到一个喷吹位置该指针就指向那一行数组,扫描该数组,并根据其数值执行喷吹动作。当某一排产品经过喷吹位置后,这排产品对应的一行数组就可以被清空释放,以备再次使用。喷吹定位位置可以由链轮轴编码器值或限位开关来确定。

指针的循环移动和链条的转动是同步的,而摄像头的拍摄节拍和喷吹位置指针移动的节拍是不同步的,因为拍摄间隔距离和横撑的间隔距离不同。计算机是如何确定摄像头拍摄的产品对应PLC 的哪一行数组的呢?如下所述。

4 计算机图像处理识别原理

4.1 图像采集

首先,本方案中摄像头图像采集机制:摄像头采用带外部触发功能的摄像头,由PLC 发送拍摄命令信号控制拍摄时间点。摄像头拍摄滚动板上的产品要根据产品平均尺寸,按产品滚动180°即一半周长的距离拍两张照片,也就是一个产品至少拍两张照片,才能全面不遗漏地采集产品图像信息。那摄像头拍摄的间隔距离就是产品平均周长的一半。当然考虑到产品直径的差异,可以采用旋转一周拍摄三张或更多作为一组,以减少或避免漏拍产品缺陷信息。通过更大的拍摄密度、冗余的图像采集提高可靠性也是可以的,只要计算机能够在规定时间内完成图像处理就可以。

假设产品平均直径为d,摄像头取景覆盖m 个拍摄间隔,每m 个间隔需要拍摄p 张照片,p 张照片每两张相邻照片拍摄的间隔距离为D。

在链条移动方向上,摄像头拍摄范围的上下两端p-1 个间隔距离的那几排产品是刚进入或将要走出拍摄范围的部分,在这一组p 张照片拍摄的总范围中,这一部分达不到p 张照片的要求。达到要求的是中间m-2(p-1)个间隔的区域,如图2 所示。为了便于计算,减少复杂度,不参考上下两组的图像,仅通过本组照片就获取完全的产品图像信息,实际的拍摄密度:每m-2(p-1)个间隔拍摄p 张照片为一组。在这一组中,我们采用最开始的p-1 个间隔拍摄p 张照片,剩余的间隔空闲时间不拍照,剩余间隔长度为m-2(p-1)-(p-1)=m-3(p-1),如图3 所示。在这段时间里,计算机可以接收这p 张照片进行图像识别处理。由于拍摄照片的指令是PLC 发出的,它会同时将这p 张照片拍摄时的编码器值和最近的上一次喷吹时的编码器值记录下来,以供计算机读取。喷吹编码器值的更新逻辑是在这p 张照片拍摄的连续拍摄期间不更新。

图2 摄像头分组取像示意图(图示为其中一个分组)

图3 完全拍摄区域的时间分配示意图

这一组拍摄第一张时的编码器值:B1。

这一组拍摄第p张时的编码器值:T。

最近的上一次喷吹时的编码器值:B0。

第一张照片相对上次喷吹移动的编码器值:ΔB=B1-B0。

第p 张照片相对上次喷吹移动的编码器值:ΔT=T-B0。

链轮每圈n1个齿,两个横撑之间有a 个链节。

每个链节节距:p1。

编码器链轮每转一圈编码器有k个脉冲。

链条移动单位长度编码器脉冲:q=k/(n1p1)。

移动一个横撑间隔的脉冲数:f=ak/n1。

拍摄照片中单位像素对应实际拍摄物长度:u。

拍摄照片中两相邻横撑相距的像素数g=ap1/u。

单位像素脉冲数:r=qu=ku/(n1p1)。

上一次喷吹到拍摄第一张照片移动的像素值:L1=ΔB/r=ΔBn1p1/(ku)。

上一次喷吹到拍摄第p 张照片移动的像素值:Lp=ΔT/r=ΔTn1p1/(ku)。这是实际测量值,理论上Lp=L1+πd。

由于链条节距固定,摄像头位置固定,当不计链条节距误差,每次链条运转到喷吹位置时,与喷吹位置相距固定距离的横撑总是出现在照片中的相同位置,可以选取其中一根作为参考点,在机器安装调试好以后,将它在照片中的像素坐标作为已知数记入程序中。参考点横撑上那一排产品对应PLC 中二位数组的行数也是固定的。假设喷吹位置是第一排,对应第一行数组,参考点就是第h 排,对应第h 行数组。由于第一张照片中的横撑的运行位置是刚从参考点位置移动过来的,所以如图4 所示,第一张照片中在链条运行方向上,距离参考点为L1像素长度的横撑就是第h 排,其对应PLC 第h 行数组。距离参考点为L1+g 像素长度的横撑就是第h-1 排,其对应PLC 第h-1 行数组,依此类推,第二张照片到第p 张照片代入相应L值进行计算即可。这样计算机就可以将摄像头中拍摄的产品图像与PLC 中的数据对应起来,进而与实际机器上的产品对应起来。

图4 分组内各张照片的像素位置偏移示意图

4.2 产品图像分割提取

计算机图像识别部分采用OpenCV(Open Source Computer Vision Library)[5]来进行图像处理,这是一个跨平台的计算机视觉库。对产品缺陷的识别部分,不同种类的产品、不同的缺陷类型识别时的参数设置甚至是算法步骤都有很大的不同,为使系统具有更广泛的适应性,应针对不同产品和缺陷提供不同的算法和参数设置,以达到不同应用要求,这里对常见的水果黑斑烂果的识别提出一种解决的思路方法。

因为要对缺陷产品进行喷吹操作,为使喷吹力的作用点尽量靠近质心位置,所以要找到产品的质心位置。产品缺陷是包含于产品外轮廓线内的,所以还需要找到外轮廓线。识别出产品的外轮廓有利于排除背景干扰,还可以得到产品大小和形状信息。在产品外轮廓内按照黑斑烂果缺陷区域的HSV(Hue-Saturation-Value)色彩模型[6]颜色或灰度值范围找到缺陷区域,同时还要避免将果梗/花萼部分误识别为缺陷[7]。

首先要得到单个产品的外轮廓,按照产品颜色或灰度与背景的差异,进行图像二值化处理。按照灰度生成二值图的方法:先将原图像转为单通道灰度图像,这种图像是将一个代表明暗的数值作为一个像素的黑白图像,然后再用一个设定的阈值来划分图像区域[8],将大于等于这个值的区域设为像素单元的最大值,小于这个值的区域设为最小值。按照颜色提取目标图的方法:先将原图像转为HSV 三通道图像,每个像素都由代表色度、饱和度、亮度的三个值来表示。每种颜色的这三个值对应的取值范围不同,只要三个值都落入这种颜色的对应取值范围,这个像素点的颜色就是这种颜色。产品可能具有多种颜色,我们可以将多种颜色提取的图像区域合并,只要与背景颜色不同,我们就可以将产品按照颜色不同与背景区分开来。第二种方式的适应性和准确性更好一些。

然后再对生成的二值图进行腐蚀、膨胀、形态学[9]等操作去除噪点的干扰,利用圆形检测[10]先找到每个产品的近似圆心和半径,再以每个圆心为中心,在二值图中进行圆周辐射扫描检测,扫描半径按圆形检测获取半径乘以1.5 倍左右系数适当加大。延辐射线向外检测,当图像像素由白点变黑点(最大值变为最小值)时,记录该白点为轮廓点。当达到最大扫描半径都是白点,则该辐射线不记录轮廓点。

最后得到单个产品的外轮廓线。对于相接触的两个产品或与横撑、分隔条接触的产品,如果直接用findContours 函数(OpenCV 中获取轮廓线的函数),那么生成的轮廓线是连在一起的,非独立的,不便于将它们分开。而本方案的这种算法获取的轮廓线不但可以将互相接触的产品物体分开,而且还可以自动地将横撑或分隔条这种非圆物体从目标中剔除。

4.3 图像识别

接下来就是查找分析坏果区域:坏果缺陷或腐烂区域及果梗/花萼处的颜色与正常产品表面颜色不同,在上述按照产品HSV 颜色特征生成的二值图中,这些区域应该会被提取出来。但在实际应用中,因为光照或拍摄角度不同,某些小面积的缺陷不能被正常识别,并且这种方法很难将缺陷与果梗/花萼区分开来。冯斌、汪懋华[7]对目标灰度剖面形状进行分析,来区分二者,所提取的剖面线特征信息量太少,实际应用准确性堪忧。缺陷与果梗/花萼的区分识别成为坏果识别分拣的技术难点与要点。

笔者对产品HSV 图像的亮度通道进行了研究,先对它进行高斯去噪平滑处理,然后按照亮度高低进行梯度分层,绘制每层的亮度等高线。为了便于观察,采用红、黄、绿、青、蓝的颜色来绘制亮度由高到低的每一层然后叠加,形成如图5(b)所示的亮度值效果图,对应图5(a)的原图,可以看到腐烂处与果梗/花萼处都形成了亮度“凹坑”。将每一层梯度的外轮廓标记为青色,形成亮度的“凸台”,将内轮廓标记为绿色,形成亮度“凹坑”,各层叠加后形成如图5(c)所示的亮度等高线图。发现果梗/花萼处的绿色“凹坑”标记的底层和高层等高线圆圈的质心是按照一个方向偏移的,偏移方向就是光照反方向,而较小面积的腐烂处的内外层等高线圈的质心基本不会偏移。因为产品果梗/花萼处与缺陷处的基本不同在于,前者大多是喇叭口状较深的“凹坑”,与后者相比较,表面较为平整。所以在某个方向的光线照射下,前者在凹陷处会留下偏向光照方向的阴影,由于阴影的存在,背阴侧亮度变化较平缓,向阳侧亮度高低变化较陡峭,而光线照射方向对后者亮度等高线影响较小。再者,腐烂处清晰的边界线经过高斯去噪处理后原本陡峭的亮度梯度变得平滑,再经过亮度分层后形成等距变化的圆圈,不会产生质心偏移的现象。所以在基本光照条件下,偏向一侧的不均匀光照有利于这种方式的识别。通过分析亮度等高线,还发现果梗/花萼处的亮度等高线的长度及距离变化是比较均匀的,而较大面积缺陷的边缘处等高线分布密集均匀而内部稀疏不规则,体现在等高线圈的长度变化上是不均匀的,在某两个相邻的等高线圈间,他们的长度会出现陡然的跳变。因此,通过亮度等高线法不仅可以准确找出缺陷处与果梗/花萼处的大小和位置,而且还可以将它们区分开来,从而实现坏果的剔除。

图5 亮度等高线图像处理效果图

5 结论

通过综合协同运用计算机、PLC 和机械机构,找到了一种高效全自动化去除坏果的方法,并且在计算机视觉识别坏果方面提出了利用HSV 亮度等高线特征的方法来识别缺陷与果梗/花萼,效果明确,复杂度较低,可以完成过去只有通过人工才能完成的工作。同时,该系统提供了一种基于计算机视觉识别的农产品检测分拣的系统框架,它的功能不局限于去除坏果,也不局限于检测一种产品。它可以根据对产品颜色、大小、形状等不同视觉特征指标的要求,在计算机中输入或选择相应识别程序完成相应分拣任务,它还可以采用多级喷吹机构或其他分拣执行机构扩展其功能,实现多级分拣。

猜你喜欢
数组编码器亮度
用于遥感影像亮度均衡的亮度补偿方法
融合CNN和Transformer编码器的变声语音鉴别与还原
JAVA稀疏矩阵算法
设定多圈绝对值编码器当前圈数的方法
远不止DCI色域,轻量级机身中更蕴含强悍的亮度表现 光峰(Appptronics)C800
转炉系统常用编码器选型及调试
舞台机械技术与设备系列谈(二)
——编码器
JAVA玩转数学之二维数组排序
亮度调色多面手
更高效用好 Excel的数组公式