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

一、课题实现的功能

1 原理分析

由于数字图像是唯一的特征标识符号,在经营管理中具有不可替代的作用,因此数字图像识别系统应具有很高的识别正确率,对环境光照条件、拍摄位置等因素的影响应有较大的容阈,并且要求满足实时性要求。


区域搜索与分割

图像分割

归一化

图像特征提取

图像识别

图像输入

预处理

图2-1 水果特征识别系统原理图

该系统是计算机图像处理与特征识别技术在智能化经营管理系统中的应用,它主要由水果图像的采集和预处理、水果区域的定位和提取、图像的分割和识别等几个部分组成,如图1所示。其基本工作过程如下:

(1)图像的采集;

(2)数字图像的图像通视频卡输入计算机进行预处理,图像预处理包括图像转换、图像增强、滤波和水平矫正等;

(3)由检索模块进行搜索与检测,定位并分割出包含水果特征的矩形区域;

(4)对水果特征进行二值化并分割出单个图像,经归一化后输入单个图像识别系统进行识别。

二、 总体设计方案

数字图像识别整个系统主要是由图像定位和特征识别两部分组成,其中图像定位又可以分为图像预处理及边缘提取模块和水果的定位及分割模块;特征识别可以分为特征分割与特征提取和单个特征识别两个模块。

为了用于水果的分割和水果特征的识别,原始图像应具有适当的亮度,较大的对比度和清晰可辩的水果图像。但由于该系统的摄像部分工作于开放的户外环境,加之数字图像的整洁度、自然光照条件、拍摄时摄像机与水果的距离和角度等因素的影响,水果图像可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图像进行识别前的预处理。

水果的定位和分割是水果识别系统的关键技术之一,其主要目的是在经图像预处理后的原始灰度图像中确定水果的具体位置,并将包含水果特征的一块子图像从整个图像中分割出来,供特征识别子系统识别之用,分割的准确与否直接关系到整个水果特征识别系统的识别率。

由于拍摄时的光照条件、水果的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成水果特征的边界模糊、细节不清、笔划断开或粗细不均,加上水果上的污斑等缺陷,致使特征提取困难,进而影响特征识别的准确性。因此,需要对特征在识别之前再进行一次针对性的处理。


三 具体技术路线

(1)图像预处理及边缘提取

图像预处理技术可最大限度提高图像正确识别率,这些图像预处理包括图像灰度化、平滑、倾斜校正、灰度修正等。

输入水果图像

灰度校正

平滑处理

提取边缘










图3-1 预处理及边缘提取流程图

1、图像的采集与转换

考虑到现有水果的特征与背景的颜色搭配一般有多种,利用不同的色彩通道就可以将区域与背景明显地区分出来,因为蓝色(255,0,0)与白色(255,255,255)在通道中并无区分,而在G、R 通道或是灰度图像中并无此便利。原图、灰度图及其直方图见图2与图3。对于将彩色图像转换成灰度图像时,图像灰度值可由下面的公式计算:

(3-1)

(3-2)

2、边缘提取

边缘是指图像局部亮度变化显著的部分,是图像风、纹理特征提取和形状特征提取等图像分析的重要基础。所以在此我们要对图像进行边缘检测。图象增强处理对图象的可辨认度的改善和简化后续的水果特征定位和分割的难度都是很有必要的。增强图象对比度度的方法有:灰度线性变换、图象平滑处理等。

(1)灰度校正

由于水果图像在拍摄时受到种种条件的限制和干扰,图像的灰度值往往与实际景物不完全匹配,这将直接影响到图像的后续处理。如果造成这种影响的原因主要是由于被摄物体的远近不同,使得图像中央区域和边缘区域的灰度失衡,或是由于摄像头在扫描时各点的灵敏度有较大的差异而产生图像灰度失真,或是由于曝光不足而使得图像的灰度变化范围很窄。这时就可以采用灰度校正的方法来处理,增强灰度的变化范围、丰富灰度层次,以达到增强图像的对比度和分辨率。

(3)平滑处理

对于受噪声干扰严重的图像,由于噪声点多在频域中映射为高频分量,因此可以在通过低

通滤波器来滤除噪声,但实际中为了简化算法,也可以直接在空域中用求邻域平均值的方法来削弱噪声的影响,这种方法称为图象平滑处理。

图 3-5 邻域及其邻域模板


816b055c9b7676ba6ef8b7c417d99672.png


3 图像的定位与分割

图像定位对图像识别系统来说至关重要,目前已经提出了很多图像定位的方法,这些方法都具有一个共同的出发点,即通过水果区域的特征来判断水果。根据不同的实现方法,大致可以把现有的定位方法分为直接法和间接法两类。

1)直接法。利用图像的尺寸、特征间距、特征特征等纹理特征定位图像。利用图像部分垂直高频丰富的特点先利用小波提取图像的垂直高频信息,然后利用数学形态学方法对小波分解后的细节图像进行一系列的形态运算,进一步消除无用的信息和噪声,以定位图像。

2)间接法。主要是指利用神经网络法或者遗传算法定位图像的方法。利用遗传算法对图像进行优化搜索,结合区域特征矢量构造的适应度函数,最终寻找到图像的水果区域的最佳定位参量。

对图像进行腐蚀

去除杂质

通过形态学方法进行水果主要部分的定位


裁剪水果区域

对分割出的水果做进一步处理

图3-8 水果定位于分割流程图

(1)水果区域的定位

水果图像经过了以上的处理后,水果区域已经十分明显,而且其边缘得到了勾勒和加强。此时可进一步确定水果在整幅图像中的准确位置。这里选用的是数学形态学的方法,其基本思想是用具有一定形态的机构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的应用可以简化图像数据,保持它们基本的形态特征,并除去不相干的结构。在本程序中用到了膨胀和闭合这两个基本运算,最后还用了bwareaopen来去除对象中不相干的小对象。

(2)水果区域的分割

对图像的分割可以有很多种方法,本程序是利用图像的彩色信息的彩色分割方法。根据图像底色等有关的先验知识,采用彩色像素点统计的方法分割出合理的图像区域,确定图像底色蓝色RGB对应的各自灰度范围,然后行方向统计在此颜色范围内的像素点数量,设定合理的阈值,确定图像在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝色像素点的数量,最终确定完整的图像区域。

(3)图像进一步处理

经过上述方法分割出来的图像图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群,即对图像二值化。

4 特征的分割与归一化

(1)特征分割

在汽车水果自动识别过程中,特征分割有承前启后的作用。它在前期水果定位的基础上进行特征的分割,然后再利用分割的结果进行特征识别。


c181caae09d70da0dc885d1fb2e089c8.png


图 3-13 分割出来的5个特征图像

(2)特征归一化

一般分割出来的特征要进行进一步的处理,以满足下一步特征识别的需要。但是对于图像的识别,并不需要太多的处理就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。

587a98a6e50965625063d737a998de19.png


图 3-14 归一化处理后的七个特征图像

5 特征的识别

目前,特征识别方法主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先把待识别特征二值化并将其尺寸大小缩放为特征数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。由于这种匹配算法稳定性较差、时间花费也较大,因此,在此基础上提出了基于关键点的匹配算法。此算法先对识别特征进行关键点提取,然后对关键点去噪,最后再确定特征的分类。这种匹配算法只利用了特征的关键点进行匹配,因此,提高了识别速度又具有较高的识别率。基于人工神经网络的算法主要有两种:一种是先对待识别特征进行特征提取,然后用所获得的特征来训练神经网络分类器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。前一种方法识别结果与特征提取有关,而特征提取比较耗时,因此,特征提取是关键。后一种方法无须特征提取和模板匹配,随着相关技术的进步,这种方法更实用。

(1)神经网络

人工神经网络(ANNs)也称为神经网络或连接模型,是对人脑或自然神经网络若干基本特性的抽象和模拟。但是人工神经网络是近现代才提出来的一种新型技术,所以还有一些缺点,不过它的优点却是非常明显的:①它可以充分逼近任意复杂的非线性关系。②所有定量或定性的信息都等势分布于网络内的各神经元,故有很强的鲁棒性和容错性;采用并行分布的处理方法,使得快速地进行大量运算成为可能。③可学习和自适应不知道或不确定的系统。④能够同时处理定量、定性知识。⑤具有联想和存储功能。⑥具有高速寻找优化解的能力。它能够处理一些环境信息十分复杂、背景不清晰、有磨损、残缺等方面的问题的情况。

(2) BP神经网络

BP神经网络(Back Propagation Neural Net.work,简称BP神经网络)即反向传输神经网络。BP神经网络可以应付各种数据和能够模拟一种复杂的决定系统。BP神经网络主要是通过一种模拟的方式对对象进行识别,它可以像人认识事物过程一样,逐渐地认清事物从而去模拟实现它。

BP神经网络由1024个输入节点、20个隐层节点、6个输出节点组成。每个节点的激活函数采用O.1函数,输出节点的输出值为0,1二值。训练以后,节点权值保存在配置文件中。在MATLAB工具箱中已经有了BP神经识别的函数,这里使用newlin函数adapt函数,使用这些函数需要输入预期的待学目标的输入范围,指定一个延迟输入信号和一个有延迟输入信号以及学习速度的参数,这样特征就能很好地在MATLAB中得到识别。

BP网络结构:

基于BP算法的多层前馈型网络将神经元按功能和顺序的不同分为输出层、中间层(隐层)、输出层。输入层各神经元负责接收来自外界的输入信息,并传给中间各隐层神经元;隐层是神经网络的内部信息处理层,负责信息变换。根据需要可设计为一层或多层;最后一个隐层将信息传递给输出层神经元经进一步处理后向外界输出信息处理结果。同层节点中没有任何耦合,每一层节点的输出只影响下一层节点的输出。网络的学习过程由正向和反向传播两部分组成。反向传播其节点单元特征通常为Sigmoid型{f(X)=1/[1+exp(一Bx)],B>0}。在网络训练阶段用准备好的样本数据依次通过输入层、隐层和输出层。比较输出结果和期望值,若没有达到要求的误差程度或者训练次数,即经过输出层、隐层和输入层,来调节权值,以便使网络成为一定适应能力的模型。

用matlab 神经网络工具箱,用BP神经网络生成网络函数,部分程序如下:

net=newff(pr,[25 1],{'logsig' 'purelin'}, 'traingdx', 'learngdm');
net.trainParam.epochs=3000;
net.trainParam.goal=0.001;
net.trainParam.show=10;
net.trainParam.lr=0.05;
net=train(net,p,t)
即创建和训练神经网络。其中权值函数为“logsig”,学习函数为:“purelin”.运行后,可在matlab上得到:
LOADING......
ans =

LOAD OK.

TRAINGDX, Epoch 0/3000, MSE 18.0267/0.001, Gradient 19.9528/1e-006
TRAINGDX, Epoch 10/3000, MSE 6.55309/0.001, Gradient 1.92177/1e-006
TRAINGDX, Epoch 20/3000, MSE 5.08303/0.001, Gradient 1.59205/1e-006
TRAINGDX, Epoch 30/3000, MSE 3.32551/0.001, Gradient 1.35881/1e-006
TRAINGDX, Epoch 40/3000, MSE 1.70977/0.001, Gradient 0.830963/1e-006
TRAINGDX, Epoch 50/3000, MSE 0.808399/0.001, Gradient 0.588341/1e-006
TRAINGDX, Epoch 60/3000, MSE 0.255181/0.001, Gradient 0.301763/1e-006
TRAINGDX, Epoch 70/3000, MSE 0.0629529/0.001, Gradient 0.146848/1e-006
TRAINGDX, Epoch 80/3000, MSE 0.0175261/0.001, Gradient 0.0906425/1e-006
TRAINGDX, Epoch 90/3000, MSE 0.0146519/0.001, Gradient 0.364925/1e-006
TRAINGDX, Epoch 100/3000, MSE 0.0122441/0.001, Gradient 0.238192/1e-006
TRAINGDX, Epoch 110/3000, MSE 0.010538/0.001, Gradient 0.158065/1e-006
TRAINGDX, Epoch 120/3000, MSE 0.00900871/0.001, Gradient 0.0498804/1e-006
TRAINGDX, Epoch 130/3000, MSE 0.00778895/0.001, Gradient 0.0471643/1e-006
TRAINGDX, Epoch 140/3000, MSE 0.00642256/0.001, Gradient 0.0267898/1e-006
TRAINGDX, Epoch 150/3000, MSE 0.00506427/0.001, Gradient 0.0207391/1e-006
TRAINGDX, Epoch 160/3000, MSE 0.00378743/0.001, Gradient 0.0155848/1e-006
TRAINGDX, Epoch 170/3000, MSE 0.00259925/0.001, Gradient 0.012315/1e-006
TRAINGDX, Epoch 180/3000, MSE 0.00149217/0.001, Gradient 0.0137463/1e-006
TRAINGDX, Epoch 190/3000, MSE 0.00134022/0.001, Gradient 0.0518653/1e-006
TRAINGDX, Epoch 200/3000, MSE 0.00132563/0.001, Gradient 0.0549096/1e-006
TRAINGDX, Epoch 210/3000, MSE 0.00125472/0.001, Gradient 0.0293791/1e-006
TRAINGDX, Epoch 220/3000, MSE 0.00120414/0.001, Gradient 0.0082813/1e-006
TRAINGDX, Epoch 230/3000, MSE 0.00115466/0.001, Gradient 0.00760885/1e-006
TRAINGDX, Epoch 240/3000, MSE 0.00108049/0.001, Gradient 0.00798138/1e-006
TRAINGDX, Epoch 248/3000, MSE 0.000995008/0.001, Gradient 0.00708329/1e-006
TRAINGDX, Performance goal met.

即神经网络训练过程。误差曲线即测试样例经训练后的实际输出结果和期望输出的差值情况。其变化如图21,图22。


d21a842d8d3f01206a6dc2302aa0cedb.png




966aab8918ebeee65a9581a29cae8d20.png


图 3-15 训练过程中误差曲线变化




1a52057545430c594f71e1722d4b63dd.png





ccc32bd31b59ef69aaf6e7a1de5392d2.png


图 3-16 训练结束时误差曲线

可见,当神经网络训练完成后,其样本得出的输出结果和期望输出结果完全相同,即误差为零。

识别结果如下:
FileName:D:\test
a =
     3
答案正确。
训练后神经网络以及权重结果信息为:
net =

    Neural Network object:

    architecture:

         numInputs: 1
         numLayers: 2
       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]
     targetConnect: [0 1]

        numOutputs: 1  (read-only)
        numTargets: 1  (read-only)
    numInputDelays: 0  (read-only)
    numLayerDelays: 0  (read-only)

    subobject structures:

            inputs: {1x1 cell} of inputs
            layers: {2x1 cell} of layers
           outputs: {1x2 cell} containing 1 output
           targets: {1x2 cell} containing 1 target
            biases: {2x1 cell} containing 2 biases
      inputWeights: {2x1 cell} containing 1 input weight
      layerWeights: {2x2 cell} containing 1 layer weight

    functions:

          adaptFcn: 'trains'
           initFcn: 'initlay'
        performFcn: 'mse'
          trainFcn: 'traingdx'

    parameters:

        adaptParam: .passes
         initParam: (none)
      performParam: (none)
        trainParam: .epochs, .goal, .lr, .lr_dec, 
                    .lr_inc, .max_fail, .max_perf_inc, .mc, 
                    .min_grad, .show, .time

    weight and bias values:

                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors

    other:

          userdata: (user stuff)

由此可见,程序可满足期望要求。当然,也经常有识别错误的情况发生。对于识别错误情况的分析可知,主要原因:一是水果自身的污渍等影响了图像的质量;二是水果特征的分割失败导致的识别错误;再就是部分特征的形状相似性,比如,B 和8;A 和4 等特征识别结果可能发生混淆的情况。

总之,尽管目前水果特征的识别率还不理想,但是只要在分割出的特征的大小、位置的归一化,以及尝试提取分类识别能力更好的特征值和设计分类器等环节上再完善,进一步提高识别率是完全可行的。

  • 2
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的matlab大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值