APP下载

基于最大类间方差自适应阈值的五花肉肥瘦自动识别方法

2018-11-06何秋蓉何子亮古万荣钟南孙远明

现代食品科技 2018年10期
关键词:瘦肉五花肉直方图

何秋蓉,何子亮,古万荣,钟南,4,孙远明,4

(1.华南农业大学食品学院,广东广州 510642)

(2.华南农业大学工程学院,广东广州 510642)(3.华南农业大学数学与信息学院,广东广州 510642)

(4.广东省食品质量安全重点实验室,广东广州 510642)

随着计算机技术的发展,计算机视觉技术在农业中的应用越来越重要。但对农产品的检测,大多数仍然依赖于化学检测,大多数外观检测仍然依赖于人工方式。在我国,猪肉是主要的食用肉类,是人民群众最常食用的肉类之一。五花肉是猪肉腹部和腹肋部位肥瘦相间的肉,深受人们群众喜爱。伴随着人们生活质量的日益提升,人们对食物的要求也越来越高。但是根据每个人口味的不同,对五花肉的肥瘦程度有不同的喜好。因此本文尝试测定五花肉中瘦肉占比及瘦肉条数,为将来开发五花肉综合品质检测系统打下基础。而计算机视觉技术作为一种近年来兴起的无损检测技术,本身带有高效,客观,准确等优点,在许多行业之中已经被广泛使用,因此本研究将使用计算机视觉技术对猪肉的瘦肉占比及瘦肉条数进行测定。

使用计算机视觉技术对肉类品质进行检测在国内外已经早有先例,且技术也越来成熟,大概从 20世纪 90年代开始,该技术已经被应用在肉类的检测上。尤其是近几年,随着计算机应用的越来越广泛,该类工作越发引起了相关的注意。2010年伍学千对五花肉图像提取了瘦肉总条数、颜色和肥瘦均匀性等三个特征指标。其中,利用图像处理得到的瘦肉总条数与实际条数之间的吻合度88.29%;对颜色指标提取了R,G,B分量的均值,判定的正确率87.88%。肥瘦均匀性指标,判定的正确率83.33%[1]。2012年赵松玮等人建立猪肉瘦肉率和背膘厚度在线检测系统,利用图像处理技术设计屠宰线上猪胭体无损等级评定系统,实现对猪肉品质的在线分级,证明了猪胭体无损等级评定系统对于实时检测评估猪肉品质具有很大的潜力[2]。2015年曾山等人以基于高光谱图像技术的冷鲜肉、解冻肉和变质肉的分类为研究对象,针对特征维数过高的问题,构建了一种基于流形模糊聚类算法的分类模型。实验得出,该模型能准确地区分冷鲜肉、解冻肉和变质肉[3]。文献4利用提取猪肉颜色,对猪肉新鲜度与颜色空间进行相关性研究,采用BP神经网络和RBF神经网络方法对猪肉新鲜度进行模式识别,并比较模式识别效果,建立一种基于机器视觉的猪肉新鲜度无损检测方法[4]。文献5使用手机拍摄猪肉,利用Otsu算法分割出图像中的猪肉部分和背景,然后用颜色因子|R-G|+|R-B|的值对图像进行彩色分层,计算出颜色区域比值,建立了用猪肉的色泽、黏度、弹性、氨气、硫化氢、表面菌落总数和颜色区域比等7个特征为输入的BP网络分类模型。试验结果表明,该方法能够较好地对猪肉新鲜度进行检测[5]。文献6和7使用了光谱图像技术对肉品非接触检测方法,借助光谱图像中所包含的反映待测对象特征的空间分布信息与光谱特征信息,对肉品品质的多个指标(含水率、水活性、挥发性盐基氮含量、肉色、微生物计数、酸价、pH值)进行分别或综合评估,评估结果按照具体指标在被测目标内的空间分布情况以图像的方式给出[6~8]。

此外,如利用图像识别技术进行食品种类鉴别和食品安全把关[9~11],利用深度学习方法对肉质和肉种类进行区分研究[12~15],也有些文献专门针对瘦肉的品质进行评价和快速区分研究[16~19],还有非常多新近工作对相关相近研究热点进行研究[20]。根据本文调研,虽然近似研究和相关技术手段层出不穷,但国内外尚比较缺乏针对五花肉的肥瘦识别和计数的相关研究。因此,本文在应用方向上,即对五花肉进行肥瘦识别和计数研究方面做了初步尝试。

1 基于最大类间方差自适应阈值法

本文的处理流程如图1所示。

图1 肥瘦识别的处理流程Fig.1 Recognition process of fat and lean meat

1.1 图像滤波

由于手机拍摄出来的猪肉图像的像素较大,达1280×960像素。而根据MATLAB处理图像正是通过像素点处理的,像素点过多,运行时间会很长。考虑到实际情况,所以对图像进行按比例缩放0.5倍。这样既可以保留大部分的图像特征,又可以加快程序运行。本研究中使用的图像缩放算法为最近邻插值法。就是将目标图像各点的像素值设为源图像中与其最近的点。在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素[8]。

因为在图像的采集过程中,往往受环境的影响(如猪肉身上有残留污渍)导致图像中存在噪声污染。如果忽视这些噪声会对后期的识别过程造成不可估量的影响,因此必须先消除。目前常用的有均值滤波,中值滤波,高斯滤波三种滤波方式。

均值滤波是利用卷积运算,对图像邻域进行灰度级平均处理,能对颗粒噪声进行有效消除。该算法表示对于图像的每个点(x, y),取其领域S,取其邻域内所有像素灰度值的平均值所为该点的灰度值。虽然该方法能有效消除杂点噪声,但会使区域的边界模糊,并不适合该研究。

高斯滤波原理类似均值滤波,但对象点的领域内不同点采取不同的权值,越接近对象点,权值则越高,如3×3的高斯模板:

这种方式达到图像模糊的同时,可以更多地保存图像的细节。与均值滤波相比,高斯滤波平滑效率低,消除颗粒噪声效果不如均值滤波,但可以更好地保存图像的总体特征。

相对于前两种线性滤波,中值滤波是一种非线性滤波,它是对象点邻域内奇数个像素点灰度值的中间值作为该点的灰度值,这种滤波方式不仅对孤立奇点效果显著,而且对密集程度较大的噪声也有明显效果,并相对与前两种滤波,它能更好保护图像边缘,故本研究选择该方式消除噪声。

1.2 图像背景分离

图2 RGB模型的直方图Fig.2 Histogram of RGB model

采集的五花肉图像大概分为背景区域和五花肉目标区域,为了防止背景区域对图像特征提取的影响,需先分离图像的黑色背景。由于新鲜猪肉多显鲜红色,故可考虑在图像的RGB模型中的R基色进行背景分离。

从下面图2的R,G,B直方图中可以看出,在R基色中相对于其它基色双峰现象更显著,而直方图是一幅图像中各像素灰度值出现次数或频数的统计结果,它反映该图像中不同灰度值出现的次数或频数,双峰现象更明显则代表R计算较其他两种基色在某一灰度值具有更高的频数。由于R基色图层直方图中双峰现象比较明显,因此可以在图像R基色中使用最大类间方差自适应阈值法(OTSU)进行阈值分割,从而达到背景分离的目的。该算法是在图像灰度直方图的基础上根据最小二乘法的原理推导出来的,是具有统计意义的最佳分割。它的基本原理是根据得到的最佳阈值把图像灰度值分割成两部分,让两者之间的方差最大,该算法的具体过程为:

(1)设灰度级为i在分辨率为M*N的图像中的像素个数f(i),则第i级灰度出现的概率为:

由于 R基色图像是 8位的灰度值图像,所以i=0,1,……255,且:

(2)设一灰度阈值k,根据阈值k将图像灰度级分为两类,即背景C0和目标猪肉区域C1,其中背景C0的灰度级为0~k,目标C1的灰度级为k~255。则背景C0部分出现的概率为:

目标C1部分出现的概率为:

其中:S0+S1=1。

(3)背景C0的平均灰度值为:

目标C1的平均灰度值为:

而图像的总平均灰度值为:

(4)图像中背景和目标的类间方差为Q(k)=S0(U-U0)2+S1(U-U1)2,令K的取值从0~255间变化,计算不同K值情况下的方差Q值,使得Q最大的K值即为最佳阈值。在MATLAB中有封装好的OTSU函数的调用,为K=graythresh(image);其中返回值K即为最佳阈值,括号内为输入图像,得到K值后再二值化图像即可,代码为 image=im2bw(image,K),其中要输入的第一个参数为要二值化的图像,第二个参数为分割阈值,返回值为二值化后的图像。实验效果如图3所示,其中的白色区域即为五花肉区域。

图3 猪肉图像背景分离后的效果图Fig.3 Image of pork image after background separation

1.3 特征提取

品质优秀的五花肉通常肥瘦适中,半肥半瘦则最佳,即瘦肉占比45%~55%。因此需要对背景分离后得到的白色目标区域内再进行阈值分割,分离出瘦肉肥肉区域。但五花肉瘦肉区域中通常有很多“精夹肥”,这些并不算是肥肉,所以计算瘦肉占比前需对图像进行孔洞填充。

因为在不同光照强度下原始图像中肥肉与瘦肉中的颜色差别不同,很多时候肥瘦差别不够明显,因此需在肥瘦分离前增大瘦肉与肥肉之间的对比度。本研究中使用对比度自适应直方图算法来增大两者之间的对比度。自适应直方图均衡化是用来提升图像的对比度的一种计算机图像处理技术。与常用来图像增强的直方图均衡的算法不同,自适应直方图均衡化算法通过计算图像的局部直方图,然后重新分布亮度来改变图像对比度。普通的直方图均衡算法对于整幅图像的像素使用相同的直方图变换,对于那些像素值分布比较均衡的图像来说,算法的效果很好。然而,如果图像中包括明显比图像其它区域暗或者亮的部分,在这些部分的对比度将得不到有效的增强。但自适应直方图均衡化算法则可以通过对局部区域执行响应的直方图均衡来改变上述问题。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。

1.4 肥瘦分离

图像增强后肥瘦区域对比度则比较明显,因此可以对目标区域再用一次OTSU阈值分割法将五花肉的肥瘦分离出来。但由于OTSU算法函数的对象是整幅图像,而此时只需要对目标区域(即五花肉区域)计算最佳阈值,并不包含背景区域,所以在这里需要修改OTSU的算法,具体内容如下所示:

(1)设灰度级为i在分辨率为M*N的图像中的像素个数f(i),但此时i不包含0,设图像中灰度值为0的像素数为L,则第i级灰度出现的概率为:

其中:i=1,2,……255,且:

(2)设一灰度阈值k,根据阈值k将图像灰度级分为两类,即瘦肉区域C0和肥肉区域C1,其中瘦肉C0的灰度级为1~k,肥肉C1的灰度级为k~255。则背景C0部分出现的概率为:

目标C1部分出现的概率为:

其中:S0+S1=1。

(3)瘦肉区域C0的平均灰度值为:

肥瘦区域C1的平均灰度值为:

图像的总平均灰度值为:

(4)图像中瘦肉和肥肉的类间方差为Q(k)=S0(U-U0)2+S1(U-U1)2,令K的取值从1~255间变化,计算不同K值情况下的方差Q值,使得Q最大的K值即为最佳阈值。

在MATLAB中没有封装好的局域的OTSU函数,因此本研究中在修改了OSTU的函数的代码并将其重新定义了一个函数,修改的代码为 num_bins=256;counts=imhist(I, num_bins);counts(1,1)=0;其中counts(1,1)=0是修改的部分,imhist(I, num_bins)函数是计算和显示图像I的直方图,返回值是一个数组,num_bins为指定的灰度级数目,而在这里只需把返回值counts数组里的第一个数(即灰度值为0)的个数清零,即可实现在不包含灰度值为 0的像素下运用OTSU算法计算最佳阈值,结果如图4所示,其中灰色区域为瘦肉,白色为肥肉。

图4 肥瘦分离的过程和效果图Fig.4 The process and effect of fat and lean separation

由于五花肉最上部分的猪皮呈红色的部分在肥瘦分离时会被认为是瘦肉,且猪肉的边界部分通常比较暗而也被误认为是瘦肉,因此需要膨胀背景把这些错误的部分大致消除,形态学中膨胀是指用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素进行“与”操作,若都为 0,则该像素为0,否则为1。但由于膨胀只能用于二值图像,因此膨胀前需把灰色瘦肉区域置成白色并把图像转成二值图像,背景膨胀后再把其中的瘦肉区域还原成灰色,处理效果如图5所示。

图5 猪肉图像膨胀处理的效果Fig.5 The process effect of image inflation

五花肉肥瘦分离后灰色瘦肉区域内有许多白色孔洞,一部分是阈值分割的误差,另一部分是瘦肉中的“精夹肥”,无论哪一种,都是瘦肉区域的一部分,需对其进行填充。但由于 MATLAB中孔洞填充算法的作用对象也是二值图像,因此在进行孔洞填充前需把灰色瘦肉区域置成白色,将白色肥肉区域置成黑色,再二值化图像,然后进行孔洞填充,处理效果如图 6所示。

图6 猪肉图像二值化孔洞填充效果Fig.6 The effect of pork image binarization

孔洞填充后,从图6中可以看出,图像中仍残有一些落单的瘦肉(白色)区域,这些多为阈值分割的误差或者猪皮中的深色区域,需在计算瘦肉占比前将其除去。由于这些多为小面积的落单区域,因此本研究中先计算每个瘦肉区域的面积,若单个瘦肉区域面积少于目标区域(五花肉区域)面积的六十分之一,则把这个区域内所有像素点的灰度值置成 0,运行结果如图4所示。然后需把图像中的肥肉区域还原,本研究中将图6(b)中的白色瘦肉区域还原成灰色,再与图4(c)作对比,若图像中任意像素点属于图 4(c)中的五花肉区域,却不属于图6(b)中的白色区域,则该像素点是属于肥肉区域,并把该点的灰度值置成255(即白色),处理效果如图7所示。

图7 综合计算的效果Fig.7 The overall effect

1.5 瘦肉占比计算

在除去残余灰色区域后,瘦肉区域即是图5中的灰色区域,此时只要遍历整幅图像,算出灰色区域的像素点个数,再计算图5的五花肉区域的像素点个数,设灰色像素点个数为b,五花肉区域像素点个数为m,则瘦肉占比p=b/m,在此图中,由MATLAB算出结果为0.44,即该五花肉大致有44%为瘦肉。

一块优质的五花肉通常由五层组成,第一层为猪皮,第二层为猪油,第三次为薄薄的猪瘦肉,第四次为猪油,第五层为深层的猪瘦肉。所以好的五花肉的瘦肉条数一般为两条,因此可提取瘦肉条数特征从而判断五花肉品质。在本研究中,我们通过计算肥瘦分离并填充后的图像的灰色连通区域个数,即可算出五花肉中瘦肉条数,但在此之前需对图像灰色区域进行闭操作,保证同一瘦肉区域间的灰色区域连通。

(1)由于光照不均匀等误差可能会导致肥瘦分离后图像中某些灰色区域并没有连通在一起,如图 8,所以在计算瘦肉条数前,需对图像进行闭操作,保证其连通,闭操作在数学上是先膨胀后腐蚀的结果,膨胀的原理上文已经介绍过了,而腐蚀的原理则与膨胀相反,用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,若都为1,则该像素为1,否则为0。只要有一个点不是白点,那么该点就被腐蚀成黑点。闭操作能填充物体内细小空洞,连接邻近物体和平滑边界,因此它能连通相近的灰色区域。闭操作前如图8(a)所示,图中白色区域为瘦肉区域,闭操作后如图8(b)所示,可见相近瘦肉区域已经连通起来。

闭操作后,瘦肉条数即为图8(b)中白色区域个数,为防止有误差影响,因此在计算白色连通区域个数时需加判断,当白色连通区域面积大于一定值时才认为是一个瘦肉条,经过反复实验,最终阈值定为目标区域面积的三十分之一,然后标记出每一个瘦肉条,如图9所示,其中每一个红色方框代表一个瘦肉条。

图8 闭操作前后的图像Fig.8 The image before and after processing

图9 瘦肉标记Fig.9 Lean indicator

由图9可知,这个样例图像共有2条瘦肉。

2 结果与讨论

按照上文方法处理2343个样本,得到2343个肥瘦分离图像,并与我们感官评定相比较即人工标注作为本文实验的金标准,并根据难易程度,分为3组,分别是困难组(531张)、普通组(1169张)和容易组(643张)。本论文还仿真了ChengJin Du等[7]人(实验中简称Du方法),伍学千等[1]人的方法(实验中简称伍方法),赵松玮等人的方法[2](实验中简称赵方法)。实验结果如下表1所示。

表1 肥瘦自动识别的实验结果对比Table 1 The comparison of recognition fat and lean

通过分析实验结果可知:

(1)本文方法在困难组和普通组获得比较好的优势。说明本文通过基于最大类间方差自适应阈值可以较好的区分肥瘦区域,符合人类人工判断预期。

(2)本文方法在容易组的识别准确度没有获得最好结果,但容易组普遍都已经接近满分。

(3)通过三个不同的分组,可以看出,困难组的识别准确率差距较大,普通组次之,容易组差距很小。

通过对图像本身进行观测和分析,本文还发现,采集图像时反光或者光照强度过大会导致肥瘦分离出现错误,另外猪皮太红也会导致阈值分割时阈值产生偏差。

3 结论

本文使用视觉图像技术对五花肉的瘦肉占比与瘦肉条数进行测定。提出了适用于分离五花肉中瘦肉与肥肉的方法,该方法先采用有限对比度自适应直方图函数来增强瘦肉区域,使五花肉图像中的肥肉与瘦肉区域对比度加大,接着使用最大类间方差自适应阈值法对图像的目标区域中的肥肉与瘦肉进行分割。接着使用孔洞填充算法对瘦肉区域中的孔洞进行填补,然后根据连通域面积除去多余的瘦肉区域。通过对比与分析该方法能有效地分离出五花肉的瘦肉与肥肉区域,从而为后面的特征提取操作提供了可靠得而保障。对五花肉图像提取了瘦肉占比与瘦肉条数两个特征。瘦肉占比是通过计算图像中瘦肉区域的面积与目标区域的总面积的比例得到的,实验结果表明,本文方法比传统方法具有更高的准确度。在将来的工作中,为了提高特征自动识别和学习能力,将尝试使用 GPU进行深度学习模型训练,进一步提高识别准确率。

猜你喜欢

瘦肉五花肉直方图
符合差分隐私的流数据统计直方图发布
补气补阴就吃黄精炖瘦肉
基于FPGA的直方图均衡图像增强算法设计及实现
5 个小窍门做出满口溢香的红烧肉
用直方图控制画面影调
跟踪导练(三)
要肥肉还是瘦肉
中考频数分布直方图题型展示
五花肉先煸再炖,不腻
五花肉