基于图像处理的蒜头横径尺寸测量方法研究
2023-06-07高耀东
高耀东 周 涛
(内蒙古科技大学机械工程学院,内蒙古 包头 014010)
作为我国主要的经济作物,大蒜的产业历史悠久。目前我国大蒜种植和加工产业发展迅速,研究显示,我国大蒜年平均产量占全球总产量的70%以上,并占据了全球62.8%的市场份额[1]。随着大蒜相关产业的不断发展,传统的生产模式已渐渐被淘汰,全程机械化、智能化将成为大蒜生产的未来趋势[2]。
蒜头尺寸是决定其商业价值的主要因素之一,目前国内、外已研发的大蒜分级机主要分为机械式和非机械式2 种[3]。机械式分级机主要分为滚筒筛式和平面筛式,这2 种分级方式均通过不断翻转物料和往复振动的方式完成对大蒜的分级,不可避免地会造成大蒜损伤、筛孔堵塞以及窜级问题。非机械式主要以计算机视觉检测技术为主,该方式具有非接触、精度高、效率高和节省人力成本等优势。该文主要研究了一种基于图像处理的蒜头横径尺寸的测量方法,以完成对蒜头的尺寸测量和显示。
国内、外早已对运用机器视觉对蔬菜水果等农作物进行品质分级进行了大量探索。张恒等[4]以核桃坚果为研究对象,利用图像处理的方法实现了对核桃坚果的尺寸检测。应义斌[5]以水果为研究目标,通过机器视觉技术实现了对水果尺寸的测量,为建立机器视觉对水果的品质检测系统打下了基础。
该文以市场常见的大蒜为研究对象,并以农业部颁发的关于大蒜等级规格划分的最新文件为标准,对获取的图像采用灰度转换、降噪、背景分割、边缘检测及迭代计算等图像处理方法,解决了对蒜头横径的测量问题。试验结果显示,该方法能够实现对大蒜横径的检测,且能够保证较高的准确率。
1 图像分割
在目标图像的采集过程中,图像采集设备采集到的信息并非都是有效信息,图像中往往含有许多干扰信息。如果不对这些干扰信息进行处理,图像处理的结果往往不够稳定和可靠,进而影响结论的准确性。因此在对目标图像进行处理之前,应先将试验所需的目标图像从背景中分割出来,以减少图像中的干扰信息,进而提高后期图像处理的准确性。
1.1 边缘检测
如果想快速有效地分割出试验所需图像,条件合适时对目标图像进行边缘检测是比较快速的一种方法[6]。
摄像机采集的原始图像如图1 所示,黑色以外的区域在该文试验中属于干扰信息,应将其分割、舍弃。图中黑色区域边长信息为已知。
图1 原始图像
为去除干扰信息,需要对目标进行灰度转换,目的是改善画质,提高运算速度。摄像机采集的图像往往受环境干扰,图像中含有大量噪声。这些噪声会影响图像处理的结果,在进行特征提取之前,通常需要采用合适的图像预处理算法对原始图像进行预处理,以保证结果的稳定可靠。高斯滤波是对图像进行减噪时最常用的方法之一,能够去除噪声,提高边缘检测精度。因此需要使用高斯滤波函数对目标图像进行处理,以去除噪声,提高精度。
灰度变化较大的地方就是噪声。噪声很容易被识别为伪边缘,而经过高斯滤波处理后的图像,噪声大大减少,利于后续的边缘检测。与图像边缘相关的信息将被最大限度地保留下来,可利用Canny 算子对滤波后的图像进行边缘检测。
Canny 算子边缘检测结果如图2 所示。由图2 可以看出,对图像进行边缘检测的效果并不理想,检测到的边缘并不连续,具体原因可能与光源选择或成像质量有关。这样的处理结果显然会给后续的图像处理带来困难,该文采用的解决办法是对Canny 算子处理过的图像进行数学形态学中的膨胀、腐蚀操作,去除二值图像中的无用信息,增强边界,并去除细小毛刺[7],处理后的图像如图3 所示。由图3 可知,经过膨胀与腐蚀处理过的图像边缘信息更清楚,有利于后续的信息识别及处理。
图2 Canny 算子边缘检测结果
图3 膨胀与腐蚀处理过的图像
1.2 背景分割
对目标图像进行处理后,得到了图3 中的含有图像边缘信息的图像,矩形边框以内的区域含有试验所需的蒜头边缘信息,应予以保留。
以图3 为目标图像,利用OpenCV 库中的findContours轮廓提取函数对图像进行轮廓提取,将提取到的轮廓当作参数,再利用contourArea 函数计算出图中所有封闭轮廓的面积,并通过设置面积阈值的方法过滤掉不满足要求的封闭轮廓。
通过上述面积阈值过滤的方法可以得到矩形轮廓的信息,由一个Numpy 数组表示。要将矩形从背景中分割出来,就需要得到矩形轮廓的4 个顶点坐标。调用approxPolyDP 函数对提取出的轮廓进行处理,就可得到矩形轮廓的4 个顶点坐标。
得到顶点坐标后,利用透视变换的方法,将试验所需的图像信息变换至另一张图像上,创建一个新的矩阵。新矩阵的组成元素为新图像平面的4 点坐标,坐标值根据测得的黑色区域的边长数据进行设置,左上角坐标为(0,0)。利用OpenCV 库中的getPerspectiveTransform 函数求出2 个矩阵的变换矩阵,调用OpenCV 库中的warpPerspective 函数和上述求出的透视变换矩阵,即可对原始图像进行透视变换。透视变换结果如图4 所示。
图4 分割出的图像
2 横径尺寸检测
2.1 图像预处理
以图4 为目标图像,先对目标图像进行灰度转换、去除噪声等操作,过滤干扰信息,提高检测精度。再利用Canny 算子对处理后的目标图像进行边缘检测,不同检测阈值的设置得出的结果如图5 所示。
图5 不同阈值检测结果
利用Canny 算子对目标图像进行边缘检测时需要设置阈值,大于阈值的被认为是强边缘点,小于阈值的点则被抑制掉。对蒜头横径的测量需要尽可能地逼近其真实轮廓。因为每个蒜头的边缘信息都不相同,所以为提高检测精度,就需要对每个被处理的图像手动设置合适的阈值,但这显然是不现实的。该文则利用OSTU 算法解决上述问题。OTSU 算法(大津法,最大类间方差法)是一种确定图像分割阈值的算法,它被认为是图像分割中阈值选取的最佳算法,其计算简单且稳定性高,受外界因素干扰少,因此在数字图像处理领域上具有广泛应用。
通过调用OpenCV 库中的threshold 函数对目标图像进行处理,将得到2 个返回值,即阈值和二值化图像。二值化图像可极大化被测图像的有效特征与背景之间的对比度[8]。利用OSTU 算法转换得到的二值图像如图6 所示。
图6 大津阈值法二值化图像
将OSTU 算法计算得到的阈值作为Canny 算子的检测阈值,以图6 为检测对象可得蒜头的边缘信息,如图7 所示。
图7 边缘信息
2.2 迭代法确定横径尺寸
虽然得到了图7 中含有蒜头边缘信息的图像,但是图中仍然存在许多细小无用的干扰信息。重复上述过滤细小轮廓的处理步骤,可得一个组成蒜头轮廓的所有点的集合。
该文采用测量封闭轮廓的最小外接圆直径的方法来确定蒜头的尺寸,并通过迭代法对得到的轮廓点集进行处理,可以找到包裹轮廓的最小圆。利用OpenCV 库中的minEnclosingCircle 函数对获得的点集进行迭代处理,可以得到该轮廓最小外接圆的圆心坐标和半径。调用circle 和putText 函数在图像上画出最小外接圆轮廓,并标注检测到的横径尺寸。大蒜横径尺寸检测结果如图8 所示。
图8 大蒜横径尺寸检测结果显示
2.3 检测结果分析
根据农业部颁发的关于大蒜等级规格划分的最新文件,大蒜等级的划分主要根据大蒜的色泽、形状及有无机械损伤等标准,该标准将大蒜分为特级、一级与二级。蒜头横径为划分各级大蒜规格的主要指标,横径每间隔5mm为一种规格。其中规定,特级产品允许有5%的产品可以不符合该规格要求,一级和二级允许有10%的产品不符合该规格要求。
对符合一级与二级要求的不同规格的大蒜进行检测分析,结果见表1。从表1 数据可知,不同规格大蒜的测量误差虽然超过了5%,但均在10%以下,满足目前生产条件下对一级与二级大蒜产品的测量需求。
表1 蒜头横径检测结果
3 结论
为实现对蒜头横径尺寸的测量,克服传统机械式筛选存在的种种问题,该文设计了一种基于图像处理的大蒜横径尺寸测量方法。该方法采用灰度转换、滤波处理等方法对采集的图像进行预处理操作,并采用Canny 算子对经过预处理的图像进行边缘检测,利用转换矩阵对图像进行透视变换以分割出目标图像,最后通过迭代算法确定蒜头的半径,并在图像上进行标注。
测量符合一级与二级标准的不同规格的大蒜,将测得的结果与电子数显游标卡尺所测结果进行比较。结果表明,横径测量值与实际测量值最大差值为4.26mm,最大相对误差为8.3%。试验结果表明,该方法基本满足一级和二级蒜头横径的测量要求,为蒜头横径尺寸的测量提供了一种有效措施。