我国是水果生产与消费大国,我国水果不但品种丰富,而且以水果为原料的食品如罐头、果冻等加工产业也颇具规模。然而,在水果果料的加工过程中可能会不经意地混入诸如毛发、纤维丝、纸屑、金属、油漆等异物,从而对产品质量和消费者心理造成不良影响。目前大多数食品生产企业还是采用人工裸眼检测加工过程中在制品是否沾染异物,存在效率低、漏检率高、劳动量大等缺点。

人们吃到甚或看到食品中有异物总是很恶心,为此而向销售、生产商索赔的事件不时发生。生产商为确保食品中无异物,需要在生产中设置多道检测工位,绝大多数是人工裸眼目检。人的眼脑手配合具有高度智能和柔性,能够识别和提出各种异物缺陷,然而视觉疲劳、生理和主观因素会带来工作质量的差异和效率低下。利用机器视觉技术来代替人工检测,是现代化生产的发展趋势。

随着提高产品质量的要求和劳动力成本日益升高的形势,企业迫切希望应用机器视觉技术实现工业生产自动化检测。但是在农产品质量和食品加工质量方面,国内外原有研究成果主要只针对完整且表面相对干燥的果体进行大小、形状、成熟度、表面损伤与缺陷等的检测与分级,而在异物检测方面,只有针对单一品种果料如桔瓣上的某种异物进行检测的研究。

本文针对多种水果混合的图像,利用Matlab软件,对水果的识别进行研究。根据水果与背景灰度值的差别选取阈值,对去噪、增强对比度后的图像进行二值化处理。分割出目标后,由于原始图像中灰度分布不均匀和光照等的影响,可能同一类水果中会出现空洞或个别边缘处出现断裂情况等,因此要对图像进行边缘检测。然后标签化处理图像,区分水果,再提取不同水果的颜色、形状、边界不规则等特征,用多幅图像训练BP神经网络,建立水果特征库,利于快速识别水果,从而实现对水果的正确分拣。

1水果图像的增强和分割

在计算机上,图像由像素逐点描述,每个像素点具有一个明确的位置和色彩数值。用Matlab软件读取图像,以矩阵的形式存放图像数据,其扫描规则是从左向右,从上到下。为处理方便,把原始的彩色图像转换为灰度图像,如图1(a)所示。

采用中值滤波法对灰度图像进行去噪处理。中值滤波是抑制噪声的非线性处理方法,本文用中值滤波法处理3×3像素的局域图像,把9个灰度值按从小到大的顺序排序后,以第5个(即中央)序号的灰度值作为目标像素的灰度值。中值滤波对于滤除图像中的椒盐噪声非常有效[5],去噪后的图像如图1(b)所示。

为了得到更清晰的图像,再对图像进行锐化处理,采用反锐化掩模的方法。反锐化掩模法是一种常用的图像锐化方法,其算法表达式为:

式中,f(x,y)为处理前的图像;f′(x,y)为用人为方法将f(x,y)模糊以后得到的图像;g(x,y)为锐化处理后的图像;c(c>1)为比例常数,根据具体情况选定。反锐化掩模法有效地提高了高频成分,使模糊呆板的图像变得具有清晰感和生动感[6],图1(c)是锐化后的结果。

经过去噪和对比度增强,就可以对图像目标进行提取分割。图像阈值分割是最常用的图像分割技术,主要利用了图像中背景与对象之间的灰度差异[6]。只要阈值选取合适,将每个像素与之比较,进行二值化处理,就可以很好地将对象从背景中分离出来。取阈值为0.34,图2(a)是二值化后的结果。从图2(a)中可以发现水果中有很多空洞,且水果的边缘处有断裂现象,所以采用边缘提取以弥补断裂的边缘部分,然后基于数学形态学算子对图像进行去除断边、图像填充等必要的后续处理。

索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。Sobel算子另一种形式是各向同性Sobel(IsotropicSobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。

利用Sobel算子进行边缘检测。Sobel算子是一种简单常用的微分算子,它不仅能检测边缘点,而且能进一步抑制噪声的影响。Sobel算子对数字图像f(x,y)的每个像素考查其相邻点像素灰度的加权差,即

利用Sobel算子进行边缘检测的结果如图2(b)所示,水果的边缘清晰地显示出来。再利用OR运算结合模糊分割和边缘信息,去除断边如图2(c)所示;利用数学形态学重新填充一下图像中的洞,最终处理后的图像符合本文的要求,其效果如图2(d)所示。

2水果的特征提取

经过图像分割后,水果和背景很明显地被区分开来,然后需要对每种水果的特征进行提取。先对图像进行标签化,所谓图像的标签化是指对图像中互相连通的所有像素赋予同样的标号,而对于不同的连接成分则给予不同的标号。经过标签化处理就能把各个连接成分进行分离,从而可以研究它们的特征。

区域分割(标签化)最基本的方法是区域扩张法。本文采用8邻域法,由于是二值图像,因此差值可以定义为“0”。为了能够看到明显的效果,程序以不同的颜色来突出显示标签化后的图像,其效果分别如图3(a)和图3(b)所示。

本文根据水果在图像中表现出来的特点,从面积、周长、弧度、颜色四个方面对图像中的桔子、苹果、香蕉进行特征提取,最后采用BP神经网络对目标进行分类识别。

2.1面积特征

经过标签化的不同区域像素值分别为1、2、3。所以用物体所包含的像素数量来计算面积,S1对应像素值为1的区域,当从左到右,从上到下地对图像进行扫描时,发现像素值为1的,则计数器S1就加1,整幅图像扫描完毕,即得区域1的面积。类似地,可以求出S2和S3,只是对应的S(n)需要除以n。

2.2周长特征

计算周长只要计算出物体轮廓线上的像素数,但在斜方向上会产生数字化图形特有的误差,故应以其2倍的数量加以补正。当从左到右、从上到下地扫描图像时,发现像素值为1的,且它的相邻像素值(8领域)有与它不同的,计数器L1加1,整幅图像扫描完毕,即得区域1的周长。类似可以求出L2和L3。

2.3弧度特征

弧度是在面积、周长的基础上,测量物体形状的复杂程度的特征量。有弧度计算公式:弧度=4π(面积)/(周长)2。通过对三种弧度的比较,可以将图中三种水果弧度最小的香蕉识别出来。

2.4颜色特征

本文采用颜色直方图法提取水果图像颜色特征。所谓颜色直方图是颜色信息的函数,它表示图像中具有同颜色级别的像素的个数,其横坐标是颜色级别(各个像素的灰度级),纵坐标是该颜色出现的频率(像素的个数)。

图像的颜色有多种表示方式,本文采用RGB颜色模式。对于彩色图像,可分解为R、G、B三幅单色图像,因此相应的便有三幅不同通道的直方图,每幅直方图中的像素分布情况都代表了这一通道中的特定颜色的程度信息。从肉眼即可分辨出苹果的红色含量要比桔子和香蕉丰富得多,所以苹果红颜色的信息量在红、绿、蓝三种颜色中所占的比例也应该是三者中最高的,即N红:N绿:N黄的值也是最大的。所以,本文采用N红/(N绿+N黄)的算法来比较三种水果各自红色信息所占比例,从而将苹果特有的特征量提取出来,达到识别苹果的目的。

经Matlab软件编程测试得图像中三种水果的特征参数如表1所示。

由表1可以看出:

(1)香蕉是周长最长、弧度最小的水果;

(2)在三种水果中,苹果的R通道直方图中固定区域(100~170像素)中像素数量与其G通道和B通道直方图中固定区域中像素数量和的比值为三者中最大的,即苹果的红色信息量(ratio_x)是最多的。利用这种计算像素比值的方法便可以将苹果与其他两种红色信息量相对较少的水果区分出来。

3基于BP神经网络的识别

3.1BP神经网络简介

神经网络是由简单结构和规则复合而成的高级复杂的非线性系统,它在不同程度和层次上模拟人脑神经系统的信息处理、存储及检索功能,具有并行结构和并行处理、自适应性、知识的分布存储、较强的容错性、本质的非线性系统等特性[12]。通过网络训练,可以建立数据库信息的非线性模型,并从中提取出相应的规则,能够实现目前基于计算机理论层次上的模式识别理论无法完成的模式信息处理工作。基于神经网络的模式识别法相对于其他方法来说,其优势在于:(1)它要求对问题的了解较少;(2)它可以实现特征空间较复杂的划分;(3)它宜用高速并行处理系统实现[5]。

BP神经网络是目前应用最为广泛的一种神经网络模型,它采用多层前向网络的反向传播算法,具有逼近任意连续函数和非线性映射的能力[12],大量应用在函数逼近、模式识别、故障诊断、智能控制、信号处理等领域。

BP神经网络的实质是把一组样本输入、输出问题转化为一个非线性优化问题,并通过梯度算法进行迭代运算求解权值问题。在BP神经网络结构确定后,就可利用输入输出样本对网络进行训练,即对网络的权值和阈值进行学习和调整,使网络实现给定的输入输出映射关系。其训练模型如图4所示。

3.2基于BP神经网络的水果识别

多层BP网络不仅有输入、输出节点,而且还有一层或多层隐含节点。本系统采用三层BP神经网络,即网络由输入层、隐含层和输出层组成[13-15]。对于水果图例中的桔子、苹果、香蕉三种水果,本系统需要训练网络通过识别弧度、颜色两个特征量来区分这三种水果,所以共需要2个输入端,3个输出端。输出端分别对应[100]、[010]、[001][16]。

隐含层节点数目的选择是一个十分复杂的问题,到目前为止,还没有用数学公式来明确表示应该怎样确定隐含层的节点数目。事实上,节点数太少,可能训练不出来,或者训练出的网络不强壮,不能识别以前没有看到过的样本,容错性较差;但隐含层节点太多又会使学习训练时间太长,误差也不一定最佳[17]。参照经验公式和实验测试效果,这里选择有19个隐含层节点的网络。

综上所述,本文所建立的网络是一个具有2个输入端、19个隐含节点、3个输出节点的三层BP神经网络。其网络结构如图5所示。

对于BP网络的实现,本系统用到了网络初始化指令init(net)、网络创建指令newff(PR,[S1S2…SN],{TF1TF2…TFN},BTF,BLF,PF)、网络仿真指令sim(net,p)、网络训练指令train(net,p,t)、竞争转换指令compet(y)。在隐含层确定后,运用传输函数sigmoid,把一个取值范围为无穷大的输入变量压缩到一个取值范围有限的输出变量中,方便得出输出层的结果。

将多组图片采集到的桔子、香蕉和苹果各自的弧度及颜色数据分别作为训练样本和测试样本,设定目标输出分别为1、2、3(1表示桔子,2表示香蕉,3表示苹果)。本实验中用200幅水果图像提取水果特征构造训练样本和测试样本,训练样本150个,测试样本50个。经过对BP网络的初始化、训练、仿真、竞争、转换等操作,最终实现其对特征数据的正确识别,从而达到能够自动识别水果的目的。

4实验结果分析

BP网络的训练性能曲线如图6所示,上面的曲线是训练性能曲线,下面曲线是目标性能曲线,训练的目标是达到0.001,性能为0.000903996。

经150个包含桔子、苹果、香蕉三种水果的图像训练样本训练使BP神经网络的识别正确率达100%,且从图6中可以看出BP神经网络收敛,说明训练成功,将此网络保存,用来进行样本测试。

对50个测试样本经BP神经网络验证,香蕉的识别正确率达100%,桔子和苹果的识别正确率是98%,进一步证明了特征提取和BP神经网络识别水果的有效性,BP网络已经能够正确识别桔子、苹果、香蕉三种水果各自的特征量并将其准确地区分出来(1表示桔子,2表示香蕉,3表示苹果)。表2所示为水果识别率统计表,可见水果数据库建立成功,BP网络的训练也达到了比较准确的程度,基本上达到了水果识别的目的。

训练时BP神经网络识别正确率能达到100%,但用测试样本对BP神经网络测试时,桔子和苹果的正确率无法达到100%,主要原因有:

(1)由于采集图片时光线强弱不同,水果的阴影深浅不同,影响了对水果的轮廓识别;

(2)同种水果品质不同使颜色有差异,带红色元素较多的桔子和带黄色元素较多的苹果放在一起时易造成误判。

实验结果表明,基于BP神经网络的水果识别系统具有较强的适应能力,识别效率高,是一种有效的检测方法。利用水果自身的特征对水果图像进行分类识别是计算机视觉技术在农业自动化[18]应用中的重要前提条件。近年来,随着计算机视觉技术的发展,图像分类识别在各行各业的应用愈加广泛。通过图像的外观特征对图像进行分类识别,是一种及时便捷、切实有效的方法。本系统对水果的识别正确率高,具有非常重要的经济和实用价值,其应用前景十分广阔。

matlab水果定位与分割,利用Matlab软件和BP神经网络快速识别水果实现分拣相关推荐

  1. MATLAB如何用循环分割,利用Matlab进行分割提取浮游生物

    我试图从扫描图像中提取浮游生物. 大纲也不错,但是,现在我不知道如何提取图像,因此可以单独保存每个浮游生物.我尝试使用标签,但是有很多噪音,它标出了每一个规格.我想知道是否有更好的方法来做到这一点. ...

  2. bp神经网络数字识别matlab,matlab神经网络字母识别

    MATLAB平台下的汉字识别 . <Visual+C++_MATLAB图像处理与识别实用案例精选>程序代码说明P0201:MATLAB赋值P0202:MATLAB中的for循环P0203: ...

  3. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板+语音播报)【含Matlab源码 1220期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  4. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板)【含Matlab源码 790期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  5. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  6. 【Matlab风电功率预测】粒子群算法优化BP神经网络风电功率预测【含源码 347期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]粒子群算法优化BP神经网络风电功率预测[含源码 347期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  7. bp神经网络车牌识别matlab源代码,BP神经网络车牌识别

    [实例简介]利用GUI搭建车牌识别 [实例截图] [核心代码] bp神经网络车牌识别 ├── bp.m ├── bpnet.mat ├── getword.m ├── lpr.m ├── lpr_GU ...

  8. C++毕业设计——基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码)——车牌定位和识别系统

    基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现,文章末尾附有本毕业设 ...

  9. 用matlab求解信号的DFT,利用MATLAB实现信号DFT的计算

    07级电信(2)班 刘坤洋 24 实验一 利用MATLAB 实现信号DFT 的计算 一.实验目的: 1.熟悉利用MATLAB 计算信号DFT 的方法 2.掌握利用MATLAB 实现由DFT 计算线性卷 ...

最新文章

  1. ACMNO.43 C语言-成绩排序 利用结构体解决,是一个进步啦!
  2. Flutter(一):用BottomNavigationBar实现常规的底部导航
  3. MySQL表的key怎么设置为yes_MySQL 修改账号密码方法
  4. 解决浏览器保存密码自动填充问题
  5. 5-5 用TSNE进行数据降维并展示聚类结果
  6. 如何判断当面的网页加载完成?
  7. Spring Boot 笔记汇总
  8. 微软Azure Services Bus中的工作流
  9. 给定任意字符串,返回所有叠字的数组
  10. python超清壁纸_Python爬取5K分辨率超清唯美壁纸
  11. 明源云客微信抢房技巧_微信抢房软件开发 - heartdong - OSCHINA - 中文开源技术交流社区...
  12. 阳春三月,激情飞扬,c/c++0313就业班开班啦!
  13. UVa 815 Flooded
  14. oracle HTTP Server安装和配置为集群代理(linux)
  15. 12/22从东京到布里斯班
  16. AJAX教程系列一:环境安装及第一个ajax程序
  17. Educode--头歌 《软件工程》实验作业2
  18. R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用scale_x_continuous函数指定X轴坐标轴的取值范围(起始值和终止值)
  19. centos7限制cpu使用_CentOS7中CPU频率调整问题
  20. 信息安全-访问控制技术原理与应用

热门文章

  1. mysql终端输入密码后闪退的解决方法
  2. 全球及中国坐式冲浪皮划艇市场产销渠道及竞争格局展望报告2022-2027年
  3. 【k8s】实现服务自动伸缩
  4. 深入理解计算机系统(第三版)
  5. QAQ……#define INF 0x3f3f3f3f 原来是定义成无穷大
  6. CDN与DNS原理和应用
  7. 数据库接口层PDO(PHP)
  8. HTML5基础小结(二)——标签小例
  9. Spring boot 实用又冷门的注解
  10. HG532固件路由器仿真——QEMU