摘 要: 面粉麸星的多少是评价面粉质量的一种重要指标,传统的面粉麸星检测都是依靠人工感官方式,即操作人员利用放大镜(5倍或5倍以上)查找统计视野中能见的麸星。由于麸星的数量多且面积小,因此,靠人工感官检测方式得到的数据结果往往达不到精度要求。针对这一问题提出了一种基于计算机图像处理技术的面粉麸星检测方法,利用该方法可以快速准确地检测出面粉的麸星个数、麸星面积以及面积百分比等指标。
关键词: 面粉麸星; 图像处理; 计算机检测
面粉麸星是指成品面粉中肉眼可见的、颜色明显深于面粉的斑点,其主要成分是小麦加工成面粉过程中未分离出去的小麦麸皮,也有未清理干净的荞麦皮、草籽皮,甚至还有大小、比重与小麦相近的黑石块、煤渣等[1]。面粉麸星的面积大小和数量多少不但影响面粉的纯度与白度,也将影响面粉生产工艺过程中其他相关指标,例如:出粉率、粉中含麸率、面粉等级等,更可衡量面粉生产过程中清理是否干净、磨粉机搭配调整是否得当、筛理匹配是否合理等。从中还可得出小麦制粉工艺及设备是否先进、操作是否正确等[2]。
传统的人工检测方法就是操作人员利用放大镜(5倍或5倍以上)直接查找视野范围内能见的麸星并统计个数。由于面粉质量不同、操作人员视觉疲劳、光线能见度低等原因,依靠这种方式检测出的面粉麸星个数只能对面粉等级做出定性判定,无法给出准确的定量判断。全国各地的面粉厂和面粉检验机构都是由国家粮食检验方面的专家每年(或半年)凭感官评出的等级面粉小样与被检测的面粉进行比较,给出某种面粉麸星是否超标而标定出该面粉的质量和等级,这种标定方法主观性太强、误差较大[3-6]。针对以上所存在的问题,本文提出了一种基于计算机图像处理技术来检测麸星的方法,通过此方法可以实现对面粉麸星的准确定量检测。
1 麸星检测的基本原理
基于图像处理的麸星检测过程是:首先对面粉拍照,然后将图片输入到计算机,再利用麸星识别系统进行检测。对于计算机而言图片实际上是一个像素的二维数组,典型情况下,颜色的每个组分都用1个字节来表示,这样每种颜色组分只有256个级别,区分度和对比度都不高;数字摄像头所拍摄的面粉图片为真彩图片,其中每个像素的颜色由红(R)、绿(G)、蓝(B)3种基本色的分量来表示。这种方法每个像素使用3个字节,允许达到256×256×256=167 772 16或1 600万种RGB值(颜色)[7]。与面粉相比麸星的颜色较深,也就是说面粉颜色的RGB值小于麸星颜色的RGB值,基于此,可以利用麸星点的像素值与面粉图片背景的像素值存在的差异将其检测出来。
2 麸星检测的实现
2.1 图片的预处理
因为图片在绘制过程中或输入到计算机的过程中可能引入噪声,因此,对面粉图片进行操作之前需进行必要的预处理,这是计算机进行图片处理时必不可少的。通常的预处理过程包括灰度化处理、二值化处理、平滑、滤波等等[8]。
(1)图像的灰度化。一般情况下,彩色图片中每一个像素的R、G、B值都不尽相同,如果直接将面粉颜色的像素与麸星颜色的像素进行比较所得到的检测结果精度往往不高,且每次检测的面粉质量都有所不同,拍出的图片彩色程度亦有所不同,这会导致检测结果的稳定性较差,因此需将图片进行灰度处理。灰度处理的方法有很多,如:最大值转换法、平均值转换法、黄金权重转换法等。本文在进行灰度处理时采用的是最大亮度转换法,其公式如下:
R1=G1=B1=max(R,G,B)
式中,R1、G1、B1为转换后的像素值;R、G、B为转换前的像素值。灰度处理后的图片每一个像素的RGB值都是相同的,其范围从(0,0,0)、(1,1,1)一直到(255,255,255),(0,0,0)为纯黑色,(255,255,255)纯白色,中间的是不同级别的灰色,这样图片就以亮度信息为主要信息,彩色信息为次要信息,十分便于比较区分。
(2)图像的二值化。图像的二值化就是指将灰度图中的背景与有效区域变为黑白分明的2种颜色。本文所使用的并不是这种传统意义上的二值化方法,而是一种“非典型二值化”方法。它并没有将面粉图片变为黑白图片,只是加强了面粉背景颜色与麸星点颜色的区分度,这样更有利于麸星点坐标的识别与提取,同时增强了视觉观察度。针对麸星检测的特点采用最大熵法二值化进行处理,最大熵法是一种动态全局阈值选取法,其优点是可以针对不同图片的不同情况选取相应的阈值,使得该麸星检测系统的检测精度和推广性很高[9]。该方法最早由Pun提出,其目的就是将图像的灰度直方图分成独立的类,使得各类的总熵最大。设S是潜在的分割阈值点, p0, p1, p2,…,pL是图像灰度级的概率分布,现将其分为如下2个概率分布:
(3)图像的平滑及滤波。去除图像中噪声的运算在图像处理中称为图像的平滑,主要是利用噪声高频、孤立、大偏差的特点进行的,本文采用邻域平均的方法进行去噪。邻域平均即是指将每个像素的灰度值用它所在邻域内像素的平均值来代替,从而达到去噪的效果。其优点是算法简单、计算速度快。常用的邻域平均的窗口有2种:3×3邻域中的5点邻域和9点邻域,其模板如图1所示,它们的衰减因子分别为5、9。由图1可知,平滑模板内各因子之和除以相应的衰减因子的结果为1,其物理意义是平滑处理后图像的平均亮度不变。
2.2 面粉麸星识别过程的设计
利用C语言编程处理图像的思路来说明麸星识别的基本过程:(1)根据阈值找出符合麸星点判别条件的所有像素点的坐标并存储到相应的数组中(横坐标和纵坐标分别存在2个数组中); (2)对这些坐标值进行分类,找出归属于同一个麸星的像素点的坐标统计出麸星的个数。本文在对这些坐标进行归一化处理时采用的是“圆心赋零”的编程思想,即以数组(横坐标和纵坐标同时使用)的第1个点为起始点(即“圆心”),逐个检测后面的点看是否有起始点周围的点,如果有则停止检测并将“圆心”赋零,然后再以第2个点为起始点继续检测,如此重复一直到全部检测完毕。但这其中还存在一个问题,即如何判定哪些点是“圆心”周围的点。由于数组中存放的是像素点的坐标值,因此采用邻域判别法进行判断即可。例如:起始点为(3,3),则只需看数组中剩下的坐标值中是否有(2,2)、(2,3)、(2,4)、(3,2)、(3,4)、(4,2)、(4,3)、(4,4)即可(根据大量检测试验,判断“原点”周围2圈的点已够用,如果想提高精度可扩大范围),如果有,即存在周围的点,反之亦然,如图2所示。为了提高识别的速度可以在主函数外编写1个小的判断函数,然后在主函数中反复调用即可。用“圆心赋零”法对数组处理完毕后,数组中只剩下属于每个麸星的最右下方的像素点的坐标值,其余全部为零,接下来只需重新扫描数组统计其中不为零的点的个数即为麸星的个数。
需要指出的是,为了拍摄方便,需将面粉制成面片,在这个过程中可能会因为压面机滚轴生锈等原因在面片表面留下颜色较深的斑点,这些“干扰点”会使得检测出的麸星个数存在误差。通过大量的实验数据分析可知,一般一个麸星点只包括几个到十几个像素点,而“干扰点”往往包括几十个像素点,因此,可利用麸星面积远小于“干扰点”的面积来判断出这些“干扰点”并将它们去除,最终得到准确的麸星个数。在计算麸星面积时,本文采用的是“圆心统计”法,即以1个点为圆心统计出其周围有多少个点。首先在统计麸星个数的同时将横坐标数组和纵坐标数组中不为零的数统一存放在2个新的数组中,然后以新的数组中的第1个点为“圆心”点,对旧的数组(存放所有麸星像素点的数组)中的点逐个判断是否为“圆心”周围的点,如果是则累加。然后再以新的数组中的第2个点为“圆心”继续检测,直到所有的麸星面积都统计完毕。在这个过程中仍然使用上述的麸星识别的基本过程判断程序,不过判断范围要扩大到“圆心”周围5圈(根据具体情况范围可自定)。
在计算麸星个数和面积的同时,如果有需要还可计算出麸星面积的百分比、麸星位置等数据。
3 应用分析
根据上面所述的基本原理和编程思想,利用C++ Builder 编写了1款麸星检测应用软件如图3所示(图中的小白点)[10-11]。选取了龙福97-0189、龙麦26、格来尼等品种小麦面粉样品进行精度测试,具体的比较结果如表1所示(检测结果为每平方厘米所含麸星个数)。以龙福97-0189为例,人工检测的麸星个数的结果为18个,由于左上角的2个麸星的面积很小,因此人工检测时被遗漏掉了,而软件检测的结果为20个,将遗漏的那2个点也检测了出来。其他样品的检测试验也具有相似的结果,基本上都能够将人工检测时遗漏的点检测出来,或将多数的点排除出去。由此可见,与以往的经验数据相比,该软件的检测精度更高,而且可以大幅度提高操作人员的工作效率。
与传统的人工检测方法相比,本文所提出的基于计算机图像处理的面粉麸星检测方法可以很好地检测出面粉麸星的个数、面积、面积百分比等指标。其优点是检测精度高、检测速度快,在很大程度上克服了传统的人工检测方法精度差、费时费力等缺点。此外,由于该检测系统使用了先进的动态全局阈值选取法,因此其推广性和适应性非常好,避免了反复修改检测灵敏度的麻烦。
通过大量实验证明,该检测系统的实用性强,非常适用于实验室、农科院等相关部门。
参考文献
[1] 刘兴信.关于我国小麦粉质量标准问题的探讨[J]. 中国粮油学报, 2002,5(1):1-6.
[2] 范璐, 周展明, 汤坚. 图像分析测定红麦硬度方法的研究[J]. 中国粮油学报, 2002,6(7):28-30.
[3] GB1355 - 1986小麦粉国家标准[S].
[4] 粮食食品检验编写组. 粮食食品检验[J]. 北京:中国财经出版社,1992,4(5):13-27.
[5] 李同强. 面粉麸星的计算机检测[J]. 中国粮油学报, 2005,4(2):26-29.
[6] 傅德成, 孙英. 食品质量感官鉴别指南[J].北京:中国标准出版社,1994,2(8):21-25.
[7] 刘光. C++ Builder 程序设计导学[M]. 北京: 清华大学出版社, 2002:210-211.
[8] 陆宗骐. C/C++图像处理编程[M]. 北京: 清华大学出版社, 2005.
[9] 黄春艳, 杨国胜, 侯艳丽. 基于熵的图像二值化方法比较研究[J]. 河南大学学报,2005,6(2):76-78.
[10] 罗斌. C++ Builder 精彩编程实例集锦[M]. 北京: 中国水利水电出版社, 2005:238-240.
[11] 蒙祖强, 龚涛. C++ Builder 程序员成长攻略[M].北京: 中国水利水电出版社, 2007:369-37.