0


毕业设计-基于BP神经网络的水果识别系统-matlab

前言

 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯基于BP神经网络的水果识别系统-matlab

课题背景和意义

我国地域广阔、水果资源丰富,随着科技发展和社会需求 的加大,水果的种植规模也在不断增大;同时也出现了复合型 果园。在复合型果园场景中,借助水果识别系统配合机械化设 备可以完成自动采摘、分拣等操作;尽管人工同样能实现相同 的操作,但是效率不高、需要的劳动力也较大。而且,随着劳动 力结构的转变,从事农业的劳动力也在不断减少。所以将其应 用到生产当中可以代替大量的劳动力,可以达到高效、方便的 特点。 在当前,国内外对水果识别以及神经算法的研究已经取得 了不错的成绩;在实际应用中也是不断地得到完善和提高。基 于社会的发展和科技水平的不断提升,人民的需求也在不断变 化,从而让物体识别技术也在不断发生改变。水果分类在水果产业和社会经济发展中具有重要意义.当前,水果分类方法主要有人工分类和机器分类等.人工分类不仅浪费大量人力物力而且效率低,而机器分类的性能有待提高.随着人工智能和机器视觉的迅速发展,研究基于深度学习的水果分类方法对于提高水果分类准确率和效率具有重要的意义和广泛的应用价值。在5G热潮的推 动下,应用于各种场景的水果识别的技术一定会具有更高的精 度、应用场景更加的普及。

实现技术思路

一、图像识别基本理论

数字图像识别主要是在计算机视觉的基础上,通过收集图像的轮廓、特征、色彩、纹理等信息来进行识别。一般的图像识别流程如图所示。

其中,预处理主要是灰度化、二值化、滤波等操作,目的是减少计算量,突出图像中目标区域的信息。图像分割则是将图像中的背景与目标区域分割开,使目标区域更好的显示出来。特征提取步骤常用的特征值有:纹理特征、颜色特征、形状特征等;之后将特征值输入到识别器中进行训练识别。选择数字图像作为处理对象,是因为相对于模拟图像,数字图像具有存储,传输方便可压缩、传输过程中不易失真、处理方便等巨大优势,这些都为图像识别技术的发展提供了强大的动力以及良好的基础。

二、水果识别器的设计

水果识别的设计主要分为六大步骤,具体的流程图如图所示

样本库的建立

以苹果、香蕉、橘子的数字图像作为对象进行研究。但是研究的初始阶段因为缺少图像样本库,所以需要自建样本库来实现目标。

在CSDN、PUDN、百度图片、互联网搜索等方式来获得不同环境下(光照、角度、背景)下的水果原始图像,构建水果图像样本库共299张格式为JPEG的彩色图像。

图像的目标分割

在读取图像并完成尺寸变化后,为减少计算量,灰度化是不可缺少的一项处理。图像在进行特征识别前,由于图像在获取时的角度、光线以及图像背景等问题的存在,直接进行特征提取往往效果不佳。所以要事先对图像进行目标分割,将图像与背景相分离,将水果区域凸显出来,然后进行图像填充、标记等方式将目标与背景完全分割开。

图像特征提取

(1)颜色特征提取

数字图像的颜色特征包括颜色直方图 、颜色矩、颜色相关图和颜色聚合向量等。本次采用的是颜色矩来进行颜色特征的提取,在图像中颜色的分布信息主要是集中在低阶矩中,所以采用颜色的一阶矩、二阶矩、三阶矩就足够表达颜色的分布;相比于颜色直方图优点在于无须向量化,颜色矩一共是提取9个分量(RGB三个分量,每个分量三个低阶矩),所以相对于其他的颜色特征来说更为简洁。

(2)纹理特征提取

纹理特征是一种反映图像表面相同性质的特征,它体现了物体的表面具有缓慢变化或者周期变化的结构排列属性。纹理可以认为是灰度分布在空间位置上的反复出现而形成的,在图像中相隔距离的两个像素之间会存在一定的灰度关系,也就是灰度相关性。所以本次采用灰度共生矩阵来进行纹理特征的提取。

灰度共生矩阵就是一种通过灰度的空间相关性来描述纹理的常用方法。它是根据像素的距离和角度形成的矩阵函数,通过计算图像中距离和方向的两点灰度之间的相关性,来反映图像在方向、间隔等方面的综合信息。

(3)形状特征提取

物体和区域的形状是图像表达和图像检索中的另一重要的特征。但不同于颜色或纹理等底层特征,形状特征的表达必须以图像中物体或区域的划分为基础。形状特征的提取有:傅立叶形状描述法、几何参数法、形状不变矩法。本次设计选用几何参数法进行形状特征提取。

水果分类器的建立

BP神经网络是一种按照误差逆向传播数据算法来训练的多层前馈神经网络。前馈神经网络的基本特点是,节点按照一定的层次排列,信号的传输只有单一的方向从上层节点传输到下层节点,网络的连接部分是单向的。

BP神经网络的结构可以大致分为三层即输入层、隐含层、输出层。其中隐含层就是处于输入层和输出层中间的层,一个神经网络中可以有一个或者多个隐含层;有多少隐含层就称为几层前馈神经网络。并且,隐含层和输出层都是具有激活函数的功能神经元。

第一、神经网络隐含层的第i个节点的输入变量neti:

第二、神经网络隐含层的第i个节点的输出变量yi:

第三、神经网络输出层的第k个节点的输入变量netk:

第四、神经网络输出层第k个节点的输出变量ok:

三、仿真结果及分析

水果图像的训练及识别

本次仿真都是在64 位WIN10操作系统下,采用MATLAB2019a软件进行仿真测试。采用OSTU法进行二值化处理后用Canny算子进行边缘检测,并对其进行闭运算,最后进行填充和标签化。其结果如图。

在训练前将数据集进行数据归一化,选用模式识别函数patternnet来搭建识别分类器所需的识别网络。隐含层的层数很大程度上影响着识别率,隐含层中的神经元的多少同样也会对识别率有影响。在测试中神经元并不是越多越好,本次采用四层隐含层的神经网络,不同隐含层对应的识别率如表所示:

在表中可以很明显地看出来,在隐含层增加到第4层后,识别率不仅没有提高,反而在不断降低,所以本次网络建立选择的隐含层数为3层。经过测试,隐含层中的神经元个数为[20,50,91]时识别率最高也最稳定在93.18%。识别网络图,训练曲线分别如图:

神经网络训练曲线:

图中有三条曲线,分别为:Train曲线(表示训练集在训练过程中误差的下降程度)、Validation曲线(表示验证集的训练过程中的误差下降程度)、Test曲线(是输入的测试集的训练曲线)。本次训练的迭代次数为38次,即所有训练样本通过了神经网络训练一次(一个正向传递和一个反向传递)。

系统测试

在神经网络训练过程中,将识别率达到最高时的网络模型保存下来为一个net.mat文件。该文件作为后续系统中的识别模块使用,根据测试集的误差输出显示,该模型的最大精度为93.18%;符合要求,可以作为识别模块使用。

1)GUI界面展示

本次借助Matlab软件中的GUI设计功能,设计了一个水果识别系统界面。该界面可以实现优秀的人机交互功能。本次设计制作了三个按钮、两个图像显示界面、一个静态文本界面。三个按钮分别实现:输入图像、识别图像、清除图像三种功能。水果识别GUI 界面如图所示。

2)水果识别系统的测试

将训练好的模型输入到GUI中后,随机提取样本库中的苹果、香蕉、橘子三张图像作为识别对象,测试结果如图所示。

部分源代码

%1读取原图,并处理成二值图像
I=imread('水果分类实验图像.jpg');

I2=rgb2gray(I);
BW=im2bw(I2,0.9);
total=bwarea(~BW)
figure,subplot(1,3,1),imshow(I),title('原始图像');
subplot(1,3,2),imshow(I2),title('灰度图像');
subplot(1,3,3),imshow(BW),title('二值图像');

%2进行边缘检测 得到了不连续的图形边界(采用sobel算子或区域增长)

%3得到各个图形的连续边界

SE=strel('rectangle',[40 30]);  % 结构定义
J2=imopen(BW,SE);            % 开启运算
figure,imshow(J2),title('对二值图像进行开运算后的结果图像');

SE=strel('square',5); % 定义3×3腐蚀结构元素
J=imerode(~J2,SE);
BW2=(~J2)-J;        % 检测边缘
figure,imshow(BW2),title('3*3腐蚀运算后的图像边界轮廓');

%填充了已有的检测的连续形状边界
B = imfill(BW2,'holes');
B = bwmorph(B,'remove');
figure,imshow(B),title('提取出的边界图像');

%3-2将不同的图形进行分别标记,num表示连接的图形对象的个数
[Label,num] = bwlabel(B,8);

%得到各个图像的边界像素的数组

%4计算各个图形单元的周长   用连接像素点或数边界像素点个数的方法   numPoints数组表示各个图形边界的像素个数(即用个数来表示周长)
 %num = max(max(Label));

    for i = 1 : num
        Premeter(i) = 0;
    end

    [row,col] = size(Label);
    for i = 1 : row
        for j = 1 : col
            if(Label(i,j) > 0)
                Premeter(Label(i,j)) = Premeter(Label(i,j)) + 1;    %计算标记后的各块图形边界中像素的个数的总数
            end
        end
    end

%5计算各个图形单元的面积
FilledLabel = imfill(Label,'holes');  %填充打过标记的边界线中间围成的图形区域
figure,imshow(FilledLabel),title('打过标记后并已被填充的结果图像');
for i = 1 : num
    Area(i) = 0;
end

实现效果图样例

水果识别系统

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后


本文转载自: https://blog.csdn.net/qq_37340229/article/details/128592655
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。

“毕业设计-基于BP神经网络的水果识别系统-matlab”的评论:

还没有评论