基于神经网络的水果自动识别(附源代码&注释)

一、实验目的和要求

1、通过基于图像特征和神经网络的水果自动识别的研究和实现,能够对数字图像处理的相关知识有了基本的认识。

2、对整个自动目标识别的全过程: 预处理( 去噪声、对比度增强)、边缘检测、分割、特征提取、目标分类有更系统的了解。

二、实验内容简介

1、水果自动识别总体框架

2、图像预处理

3、图像边缘检测与特征提取

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

三、实验步骤

1、图像去噪

Col_Image=imread('fruit01.jpg');                               %读取图像
Gray_Image=rgb2gray(Col_Image); %把彩色图像转换为成灰度图像
figure(1);imshow(Gray_Image); title('灰度图像'); 

Original_Image=im2double(Gray_Image); %将灰度图像转换为双精度
Denoi_Image=Original_Image;                             
[m,n]=size(Denoi_Image); %求Denoi Image矩阵大小,并赋值给m,n
for i=2:1:m-1
    for j=2:1:n-1
      temp=Denoi_Image(i-1:i+1,j-1:j+1);
      X=[temp(1,1),temp(1,2),temp(1,3),temp(2,1),temp(2,2),temp(2,3),temp(3,1),temp(3,2),temp(3,3)];
      temp=sort(X); %将9个灰度值按照从小到大顺序排序
      Denoi_Image(i,j)=temp(1,5);                            %找出中间的,进行中值滤波
    end
end 
figure(2);imshow(Denoi_Image);title('去噪后的图像');

2、 图像增强(反锐化掩模法)

Col_Image=imread('fruit01.jpg');                               %读取图像
Gray_Image=rgb2gray(Col_Image); %把彩色图像转换为成灰度图像
figure(1);imshow(Gray_Image); title('灰度图像'); 

Original_Image=im2double(Gray_Image); %将灰度图像转换为双精度
Denoi_Image=Original_Image;        
Sharp_Image=Denoi_Image;
Mo=1/9*[1,1,1;1,1,1;1,1,1];   %3*3模板
[m,n]=size(Sharp_Image); %求sharp Image矩阵大小,并赋值给m,n
for i=2:1:m-1
    for j=2:1:n-1
        XX=Sharp_Image(i-1:i+1,j-1:j+1);
        temp1=XX.*Mo; %将原图像中顺序取出的3*3矩阵与模板点乘
            Sharp_Image(i,j)=(temp1(1,1)+temp1(1,2)+temp1(1,3)...
           +temp1(2,1)+temp1(2,2)+temp1(2,3)+temp1(3,1)+temp1(3,2)+temp1(3,3));
      Sharp_Image(i,j)=Original_Image(i,j)+1*(Original_Image(i,j)-Sharp_Image(i,j));%反税化掩模算法
    end
end
figure(3);imshow(Sharp_Image);title('锐化后的图像')

3、 图像二值化处理

Col_Image=imread('fruit01.jpg');                               %读取图像
Gray_Image=rgb2gray(Col_Image); %把彩色图像转换为成灰度图像
figure(1);imshow(Gray_Image); title('灰度图像'); 

Original_Image=im2double(Gray_Image); %将灰度图像转换为双精度
Denoi_Image=Original_Image;        
binary_Image=Denoi_Image;
[m,n]=size(Denoi_Image);
for i=1:m
    for j=1:n
        if binary_Image(i,j)<=0.462 %设置阈值为0.462,判断灰度值大小
            binary_Image(i,j)=255;  %小于等于阈值,则被判决属于物体
        else 
            binary_Image(i,j)=0;   %大于阈值,则被判决属于背景
        end
    end
end
figure(4);imshow(binary_Image);title('二值化图像')

4、 图像边缘检测处理

Col_Image=imread('fruit01.jpg');                               %读取图像
Gray_Image=rgb2gray(Col_Image); %把彩色图像转换为成灰度图像
figure(1);imshow(Gray_Image); title('灰度图像'); 

Original_Image=im2double(Gray_Image); %将灰度图像转换为双精度
Denoi_Image=Original_Image;        
binary_Image=Denoi_Image;
ROI_edge=edge(Denoi_Image,'sobel'); %利用sobel算子提取边缘
figure(5);imshow(ROI_edge);title('边缘检测图像');
%利用OR运算结合二值化图像和边缘信息
ROI_Seg=zeros(m,n);
for i=1:m
      for j=1:n
          if (ROI_edge(i,j)==0) & (binary_Image(i,j)<=0.462)  %如果roi区域为0和二值化区域小于阈值0.462.
              ROI_Seg(i,j)=255;  %则判断判断像素属于物体
          else
              ROI_Seg(i,j)=0;    %如果不是,则判断为背景
          end
      end
end
figure(6);imshow(ROI_Seg);title('OR运算分割图像');
%去除断边
se = strel('disk',3);  %创建一个半径为3的圆盘的结构元素
Fina_Seg = imclose(ROI_Seg,se); %闭运算
%去除断边后重新再填充一下图像中的洞
Fina_Seg = imfill(Fina_Seg,4,'holes');

5、 图像标签化处理

%标记连接成分(8邻域)
[Lab_Image1 XNum]=bwlabeln(Fina_Seg,8);
Lab_Image=Lab_Image1(3:end-3,3:end-3);  %反复比较像素灰度,进行合并
[m,n]=size(Lab_Image);  %求Lab Image矩阵大小,并赋值给m,n
figure(7);imshow(Lab_Image);title('标签化图像')
Lab_Image1=Lab_Image;
%以伪彩色的形式显示标记图像
RGBX=label2rgb(Lab_Image,@jet,'k');
figure(8);imshow(RGBX);title('彩色标签化图像')

四、实验心得

 1、通过整个基于图像特征和神经网络的水果自动识别的实验,对数字图像处理的相关知识和函数有了更深的认识。对整个自动目标识别的全过程: 预处理( 去噪声、对比度增强)、边缘检测、分割、特征提取、目标分类有更系统的了解。

2、对于神经网络以及BP算法在模式识别、特征分类中的作用也有了初步的了解,通过水果识别系统的研究和开发设计,能够提高理论联系实际和根据所学知识解决实际问题的能力。

3、自动目标识别的过程:

(1)去噪,采用中值滤波法,中值滤波的原理是将模板中的变量值进行排序,然后取序列中间值作为目标像素的灰度值;然后通过反锐化掩模法对图像进行锐化,使图像得到增强,其算法表达式为

(2)图像阈值分割是最常用的图像分割技术,主要利用了图像中背景与对象之间的灰度差异⑹。只要阈值选取合适,将每个像素与之比较,进行二值化处理,就可以很好地将对象从背景中分离出来。该过程用到了binary函数:

if binary_Image(i,j)<=0.462         %阈值为0.462

binary_Image(i,j)=255;   %如果灰度值大小小于等于该阈值,那么被判断为物体

else

binary_Image(i,j)=0;     %如果灰度值大小大于该阈值,那么被判断为背景

(3)利用Sobel算子对图像进行边缘检测。

Sobel算子是一种简单常用的微分算子,它不仅能检测边缘点,而且能进 一歩抑制噪声的影响。然后再利用OR运算结合模糊分割和边缘信息,去除断边。经过图像分割后,水果和背景很明显地被区分开来,然后,需要对每种水果的特征进行提取。先对图像进行标签化,所谓图像的标签化是指对图像中互相连通的所有像素赋予同样的标号,而对于不同的连接成分则给予不同的标号。经过标签化处理就能把各个连接成分进行分离,从而可以研究它们的特征。使用了lab函数。

(4)最后采用BP神经网络对目标进行分类识别。

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

  • 27
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
《C语言课程设计——学生成绩管理系统(源代码 详细注释).zip》是一个包含有源代码和详细注释的学生成绩管理系统的压缩文件。 学生成绩管理系统是一种用于管理学生的考试成绩和相关信息的软件工具。该系统基于C语言开发,通过使用源代码和详细注释来了解其内部工作原理和实现细节。 源代码是指程序员使用C语言编写的计算机程序的文本文件。它包含一系列的指令和算法来实现特定的功能。通过查看源代码,我们可以了解程序是如何实现学生成绩管理的,例如如何读取和存储学生信息、计算和存储考试成绩等。同时,源代码中也包含了程序的各种功能和特性的具体实现细节。 详细注释是在源代码中加入的对代码的解释和说明,用于帮助程序员和读者理解代码的逻辑和功能。注释通常以特定的标记符或特殊的注释语法来标识,并且会提供对代码行为、变量、函数和算法的解释。通过详细注释,我们可以更好地理解程序的运行逻辑和实现方式,同时也帮助我们更加容易地进行修改和维护。 压缩文件(.zip)是一种常见的文件格式,可以将多个文件或文件夹压缩成一个单独的文件。通过将源代码和详细注释压缩成一个文件,可以方便地进行存储、传输和共享。 因此,对于《C语言课程设计——学生成绩管理系统(源代码 详细注释).zip》,我们可以通过解压缩该文件并查看源代码和详细注释来了解其中的实现细节和代码逻辑。这对于学习C语言编程以及了解学生成绩管理系统的设计和实现都是非常有帮助的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风吹向我吧~

欢迎投喂!!❤

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

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

打赏作者

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

抵扣说明:

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

余额充值