APP下载

基于机器视觉的干鱼片长度检测技术*

2022-06-08龚伟东黄锦华朱健业

南方农机 2022年11期
关键词:鱼片孔洞矩形

吴 狄 ,龚伟东 ,黄锦华 ,朱健业

(广州大学,广东 广州 511400)

0 引言

目前,机器视觉技术飞速发展,在工业生产方面的检测应用日趋成熟[1],同时在食品生产领域得到了较为广泛的研究[2]。在食品生产过程中,由于各种原因,可能会出现破损、瑕疵等质量问题。因此,在包装前对食品进行严格的检验可以最大程度地保护消费者的合法权益[3]。且机器视觉检测比传统人工检测具备两个很大的优势:1)非接触测量,机器视觉系统可以实现非接触检测,不会对被测物体造成任何损伤和改变,从而提高系统可靠性;2)系统稳定性和连续性好,机器视觉检测不会因工作时间长、环境恶劣而影响检测精度和工作效率[4-6]。

为此,本文设计出了一种基于机器视觉的干鱼片长度检测方案。通过使用阈值分割、孔洞填充、特征提取等一系列算法实现对干鱼片长度的检测。该技术可以代替人工检测,减少人工检测带来的误差,以提高生产效率与准确率。

1 干鱼片长度检测处理算法

本研究要实现对干鱼片长度的检测,需要对所采集的干鱼片图像进行多步处理,减少或消除无用信息,以保证图像的高质量,从而确保检测结果的准确性。干鱼片长度检测算法的步骤如图1所示。

图1 干鱼片长度检测算法流程

在获得图像数据后,最终目的是判断所生产出的干鱼片长度是否满足生产要求如图2所示,本文设计的算法核心就在于检测干鱼片区域的任意方向最小外接矩形的长度是否达到目标尺寸,如果达到,则该被测干鱼片满足生产要求,反之则不满足。

图2 采集的单个干鱼片图像

1.1 阈值分割

阈值分割是一种按图像像素灰度进行分割的方法,即先将图像的灰度划分为不同的等级,然后使用设置灰度阈值的方法来确定目标区域[7-9]。阈值分割有两个难点,一是在图像分割之前,无法确定图像分割生成区域的数目;二是阈值的确定,因为阈值的选择直接影响分割的精度及对分割后的图像进行描述分析的正确性[10-11]。对于灰度图像中只有背景和目标两类对象的情况来说,如果阈值选取过高,则容易把大量的目标误识别为背景;如果阈值选取过低,则容易把大量的背景误识别为目标。通常,阈值分割有三个步骤:1)确定阈值;2)将阈值与像素灰度值进行比较;3)对像素进行分类。

1.2 根据直方图谷底确定阈值法

根据直方图谷底确定阈值法是一种常见的阈值分割方法。若处于图像中前景的物体内部和图像的背景区域的灰度值分布都较为均匀,此时该图像的灰度直方图将会具有明显的双峰,从而可以选择两峰之间的谷底对应的灰度值T作为图像分割的阈值[12],T值选取如图3所示,这种方法称为根据直方图谷底确定阈值法。

图3 根据直方图谷底确定阈值

按式(1)进行二值化,就可将目标从图像中分割出来。

式(1)中,g(x)为阈值运算后的二值图像。计算图像中所有像素的灰度值,根据图像的灰度直方图确定阈值T,当像素点的灰度值小于T时,设置子像素点的灰度值为0;当该值大于或等于T时,设置该像素的灰度值为255。

1.3 区域处理算法

通过阈值分割后,可以定位到大致的目标区域,但由于在实际检测过程当中,为了保证检测效率,我们并非是对单个干鱼片进行逐个检测,而是一次同时对多个对象进行检测,如图4所示。因此,需要利用算子确定给定输入区域的连通分量,并将这些连通分量分割为各自独立的区域,以便进行后续操作。

图4 采集的多个干鱼片图像

另外,由于不同干鱼片间存在的质地差异,从而会导致不同干鱼片所对应区域的灰度值分布的均匀程度也会有所差异。因此,在完成阈值分割后,可能会发现有的区域当中会存在孔洞。为了保证后续检测的准确性,在完成区域分割后,需要对区域进行孔洞填充。

一个孔洞可以定义为由前景像素相连接的边界所包围的背景区域。设A表示一个集合,要对A中的孔洞进行填充,先求出A的补集AC为备用,其次所用到的结构元素B,如图5(c)所示。A的元素是八连通的边界,每个边界包围一个背景区域(即一个孔洞),给定每一个孔洞中一个点,然后从该点开始填充整个边界包围的区域,下述为具体公式。

孔洞填充的过程如下:首先构建图像X0,如图5(d)所示,其次利用B对X0进行膨胀运算,由于其膨胀的结果会超过孔洞的大小,于是利用上述构造的AC,对其求交集,可将结果限制在孔洞内(此处因为结构元素B是一个四连通元素,每一次膨胀其边界不会超出一个像素点,同时由于AC的四周都是一个像素的沟壑,因此求交集刚好能限制膨胀过界的像素)。开始迭代运算,当Xk=Xk-1,则算法在第k步迭代结束,最终得到X8的填充图像,再与A求并集,可刚好填充原图像的孔洞。孔洞填充全过程如图5所示。

图5 孔洞填充过程

2 实验验证

2.1 定位目标区域

该检测技术采用Halcon软件作为测试环境,实验验证上述算法。首先,图像采集需要调用Halcon库中的read_image()算子,将由摄像头采集到的干鱼片灰度图像读取到界面当中,如图6所示。为获取目标区域,采用根据直方图谷底确定阈值法进行阈值分割,利用threshold()算子可以提取图像中干鱼片对应的大致区域。其次,用connection()算子确定给定输入区域的连通分量,并将这些连通分量分割为各自独立的区域,如图7所示。

图6 采集的干鱼片图像

由于不同干鱼片间存在质地的差异,可以从图7观察到区域中存在孔洞,因此需要用fill_up()算子对区域进行孔洞填充,以便后续得到准确的目标区域。

图7 阈值分割后的区域

完成孔洞填充后,图像中还存在一些杂质,如图8所示,会对后续的检测产生影响,可以利用算子select_shape()来选择有特定特征的区域,以消除杂质。由于图中的杂质均为一些小面积点状区域,此处可将面积设置为特征,同时设定合适的面积区间,从而过滤掉杂质,最终获得如图9所示的目标区域。

图8 图像中的杂质

图9 目标区域

2.2 区域处理

由于本文设计的算法核心就在于检测干鱼片区域的任意方向最小外接矩形的长度是否达到目标长度,所以当得到如图9所示的目标区域后,需要确定图中四个干鱼片所对应区域的最小外接矩形,即包含该区域的所有矩形中面积最小的矩形。此处通过利用smallest_rectangle2()算子计算出区域对应的最小外接矩形的长度、宽度及角度数据。再利用gen_rectangle2()算子自动绘制出对应的矩形,最终得到如图10所示的区域。

图10 目标区域对应的最小外接矩形

在完成上述的流程后,可以提取出图像中各个干鱼片对应最小外接矩形的长度和宽度数据。在本文中将由软件计算得出矩形长度的数据设为l,根据公式L=l×2×0.0373(单位:cm)可得到每个干鱼片的实际长度,并与目标尺寸进行比较(在本研究中L需要满足的范围是:8.8 cm≤L≤9.8 cm)。最终在软件界面显示出结果,通过图11可以观察到,满足目标长度的干鱼片区域显示为绿色(浅色),而不满足要求的区域则显示为红色(深色)。

图11 检测结果

3 实验结果分析

本文共设置100张测试图像,其中每张图像包含4个干鱼片,实验设定每5张图像包含一个不满足目标尺寸的干鱼片,最终实验结果如表1所示。

表1 实验检测结果

通过表1的实验检测结果可知,该方案的检测准确性极高,且检测速度很快,能够满足干鱼片生产流水线的检测要求,并取代人工检测,在降低生产成本的同时,大幅度提高生产效率。

4 总结

本研究采用机器视觉技术,基于Halcon软件平台,设计了一种干鱼片长度的检测方法,使用机器视觉代替人工检测。通过采用阈值分割、孔洞填充、特征提取等一系列算法实现了对干鱼片是否满足生产所要求的长度的检测。由实验结果可以看出,这种检测技术算法相对简单,且检测准确性高,有较强的实用性,能够减小人工检测带来的误差,并提高检测的效率。

猜你喜欢

鱼片孔洞矩形
扩散与幂率蠕变联合控制的孔洞受约束长大模型研究
一种面向孔洞修复的三角网格复杂孔洞分割方法
矩形面积的特殊求法
走路时,我们会踩死细菌吗
从矩形内一点说起
下厨记
煲鱼汤高招
巧用矩形一性质,妙解一类题
糟溜鱼片
铝合金薄板在疲劳载荷下孔洞聚合试验中的材料损失