Matlab水果识别

本文介绍了一种基于形态学处理、边缘检测和特征参数的水果识别系统,通过RGB和HSV颜色模式、形状参数和面积分析,实现了对常见水果的90%识别率。系统通过MATLAB实现,旨在提升水果分拣效率和减少人工成本。
摘要由CSDN通过智能技术生成

【摘要】为了提高水果分拣及水果品级分类的智能化水平,提出一种基于阈值分类器的水果识别系统。水果识别系统中,先对待识别水果图像进行二值化处理、形态学处理、边缘检测和水果图像填充等一系列预处理工作。在此基础上,提取水果形状特征参数,通过GUI界面,将每张水果图像的形状参数直观地展现到界面上,通过设定以色彩、似圆性、面积之比三个形状参数阈值分类器,对水果种类进行识别,并将识别结果通过文字和语言进行展示。实验结果表明,所提系统能够识别一些常见的水果,并且水果识别率在90%左右。
【关键词】图像分割 边缘提取 图像降噪
一.实验目的
目前,水果市场基本是通过人工拣选的方式进行水果分类,这种方式虽然成本低廉,但是劳动量大、生产率低。机械拣选具有短时、高效的特点,本设计通过对水果进行分类识别,来提高生产率、降低劳动力。同时通过设计此系统,能够提高学生的动手能力,熟悉掌握数字图像处理相关理论知识以及MATLAB的使用。
二.实验过程
1、图像采集
自己拍摄图片:01.bmp、02.bmp、03.bmp、04.bmp(通过小米手机与实物相隔15厘米、平视进行拍摄)
网上下载的图片:3 -副本.bmp(蛇果)、4.bmp(红富士)、5. bmp(油桃)、9.bmp(黄桃)、92.bmp(菠萝)、96.bmp(鸭梨)、945.bmp(香蕉)
2、算法分析
2.1 图像预处理
(1)首先将彩色图像转化为灰度图I=rgb2gray(i);
(2)灰度图像二值化,图像二值化im2bw();
(3)图像分割像。
开运算用来对灰度图像进行形态学开运算,即使用同样的结构元素对图像先进性腐蚀操作后进行膨胀操作。腐蚀运算用来消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。 然后提取图像水果的边界用于标记各个区域。获得连通区域的属性 ,使用图像分析函数regionprops,即用来度量图像区域属性的函数。
2.2 获取特征并判别函数
根据水果在图像中表现出来的特点,从面积特征、似圆形特征,颜色(rgb值和hsv值)特征对图像中的梨子、苹果、桃子、香蕉和菠萝进行特征提取,最后按照筛选出来的特征对水果进行识别。
2.3 算法实现
(1)对图片进行灰度处理
最大值法:使R,G,B的值等于3值中最大的一个,R=G=B=max(R,G,B),最大值法会形成亮度很高的灰度图像。平均值法:是R,G,B的值求出平均值,R=G=B=(R+G+B)/3,平均值法会形成较柔和的灰度图像。加权平均值法:根据重要性或其他指标给R,G,B赋予不同的权值,并使R,G,B的值加权平均,R=G=B=WR+VG+UB,W,V,U分别表示权重,研究表明,人对绿色的敏感度最高,对红色次之,对蓝色的敏感度最低,因此W>V>U,实验和理论证明当W=0.30,V=0.59,U=0.11时,能得到最合理的灰度图像。
(2)对图片进行二值化处理
在matlab中的函数名为im2bw()。其格式为:I=im2bw(i,level) 式中level为阈值,取值从0到1.本设计考虑到图片背景颜色为白色,亮度较大,因此选取level=0.9来实现二值化。
(3)图片进行边缘提取
边缘检测的思想首先是利用边缘增强算子,突出图像中的局部边缘,然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。几种常用的边缘检测算法有微分算子法、Sobel算子、robert算子、prewitt算子,而这几种算子我们的代码都没有使用,我们用的是bwmorph函数是对图像进行指定的形态学操作,其调用格式为:I=bwmorph(i,‘remove’),remove’即代表如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来。
(4)获取特征并进行判断[1,2,3,4]
颜色的提取本文使用两种计量方式来测得水果的颜色值。Rgb颜色模式:对于彩色图像,可分解为rgb三幅单色图像。每一副图像中的像素分布情况都代表了改颜色的程度信息。根据常识可知上述6种水果中苹果和桃子的红色含量要比其他水果丰富的多,西瓜的红色含量最小。
Hsv颜色模式:这个模型中颜色的参数分别是:色彩(H),纯度(S),明度(V)。HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。面积经过标签化的不同区域的面积,可以用该区域像素数量来计算。对整幅图像进行扫描,计算所有连通区域的面积。根据常识可知:西瓜在上述6个水果中面积是最大的一个,菠萝其次。
似圆性:似圆性是在计算出每块连通区域的外接椭圆的短轴长度和长轴长度,来测量水果形状的似圆性。我们用长轴长度除以短轴长度得到一个比例。这个值与1越接近,说明水果与圆越相似。同理,该值越比1大,说明水果越不像圆。根据常识可知,上述6个水果中西瓜,苹果,桃子似圆性很高,而香蕉,菠萝似圆性最低。从复杂环境中提取对象物,要求对复杂的环境干扰有较好的处理,本次实验发现,在提取苹果时,苹果、叶子本身是差异很大的红绿两色,但是因为所使用的图片中,苹果有高亮反光,在采用灰度图和提取色彩分量完成阈值分割时都未得到好的分割图像。苹果采摘机器人要求实时识别,既要适应不断变化的环境光影响。
实验结果:
在这里插入图片描述

中值滤波是在"最小绝对误差"准则下的最优滤波[8.9]。
在实际应用中,随着所选用窗口长度的增加,滤波的计算量将会迅速增加。因此,寻求中值滤波的快速算法,是中值滤波理论的一个重要研究内容。中值滤波的快速算法,一般采用下述三种方式:①直方图数据修正法;②样本值二进制表示逻辑判断法;③数字和模拟的选择网络法。
对中值滤波的理论研究,还集中于统计特性分析和根序列的描述方面。当一个信号序列经一特定窗口长度的中值滤波反复处理后,它会收敛于某一个不再变化的序列,这个序列称为中值滤波的根序列。根序列是描述中值滤波特性的一个重要概念。通过对根序列结构的研究,可以确定原信号序列中,哪些成分可以经中值滤波后保留下来,哪些成分将被抑制。这对确定中值滤波器的窗口长度,提供了重要依据。用VLSI实现的中值滤波器芯片,可供实时处理中应用。
在这里插入图片描述
Robert算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感。
Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。
LOG滤波器方法通过检测二阶导数过零点来判断边缘点。LOG滤波器中的a正比于低通滤波器的宽度,a越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。
讨论和比较了几种常用的边缘检测算子。梯度算子计算简单,但精度不高,只能检测出图像大致的轮廓,而对于比较细的边缘可能会忽略。Prewitt 和Sobel 算子比Roberts 效果要好一些。LOG 滤波器和Canny 算子的检测效果优于梯度算子,能够检测出图像较细的边缘部分。不同的系统,针对不同的环境条件和要求,选择合适的算子来对图像进行边缘检测[5,6,7]。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总的来说,本设计的水果识别效果良好,识别较为准确。只是算法执行需要一定的时间。对于颜色和外形差不多的图片会识别错误,因为识别水果使用的是对hsv模型和rgb模型的判断,因此图片的背景颜色不能太复杂,只能是白色的背景,水果中也不能存在阴影部分,因为存在阴影部分的话会影响似圆性的判断。
大部分的结果还算是可以的,只是对于苹果和桃子这部分的结果还存在一定的误差,因为苹果和桃子在似圆性的值太相似,似圆性和1很接近说明符合苹果和桃子的判断条件,红色素接近桃子的值0.7,所有苹果会出错判断成为桃子。
数据分析如表1所示:
表1 数据分析表
图片 名字 r g b Hsv值 面积 似圆性 是否准确
5.bmp 桃子 1.05 0.61 0.34 0.28 2072 1.03 是
4.bmp 苹果 0.74 0.23 0.35 0.63 1276 1.03 否

三、出错处理
1.出错信息
(1)边缘提取的时候提取不出来;
(2)苹果和桃子的识别容易出错。
2.出错处理方法及补救措施
(1)进行边缘提取的时候首先要先将图片变成二值图像,包括图片中的水果也要变成黑色的,运用BW=im2bw(I2,0.9);其中的0.9是用来将水果先变成黑色的,然后再对图片腐蚀。
(2)通过选择颜色外形差距比较大的图片来解决此类问题。
【参考文献】
[1]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].北京:清华大学出版社,2013.
[2]胡学龙.数字图像处理(第三版) [M].北京:电子工业出版社,2004.
[3]于万波.基于MATLAB的图像处理[M]. 北京:清华大学出版社,2008.
[4]阮秋琦.数字图像处理学[M].北京:电子工业出版社,2001.
[5] 张红霞,王 灿,刘 鑫,等.图像边缘检测算法研究新进展 [J].计算机工程与应用,2018,54(14):11-18.
[6] 曹 麟,鲁红英,程 琳.基于改进的 DOG 算子在图像边缘提取中的应用研究 [J].电脑知识与技术,2018,14(6):139-142.
[7] 段振云,单紫薇,赵文辉,等.数字图像边缘的快速提取算法研究 [J].组合机床与自动化加工技术,2017(12):12-14,20.
[8]一种基于双边滤波的红外图像细节增强方法[J]. 杨静,李争. 激光与红外. 2016(04)
[9]基于双边滤波与非局部均值的图像去噪研究[J]. 梁广顺,汪日伟,温显斌. 光电子·激光. 2015(11)

1.BW2=(~J2)-J;   %检测
2.获取连通区域属性:
[L,num]=bwlabel(BW2);                              
stats= regionprops(L, 'ALL');   
3.获取特征:
颜色特征
[row,col] = size(Label);          
MeanHue = zeros(1,num);             
    for i = 1 : num
        Hue = zeros(Area(i),1);    
        nPoint = 0;                
        for j = 1 : row
            for k = 1 : col
                if(Label(j,k) == i)
                    nPoint = nPoint + 1;          
                    Hue(nPoint,1) = HSV(j,k,1);    
                end
            end
        end
        Hue(:,i) = sort(Hue(:,1));
        for j = floor(nPoint*0.1) : floor(nPoint*0.9)
            MeanHue(i) = MeanHue(i) + Hue(j,1);  
        end
        MeanHue(i) = MeanHue(i) / (0.8*nPoint);
    end
4.圆性特征
for i= 1:num
longth(i)=stats(i).MajorAxisLength;    width(i)=stats(i).MinorAxisLength;     
end 
R2=0;
G2=0;
B2=0;
x=0;
y=0;
for i=1:num	
    r(i)=0;
    g(i)=0;
    b(i)=0;
yuan(i)=longth(i)/width(i);
end
5.面积特征
  for i=1:num
    if(stats(i,1).Area>x)
        x=stats(i,1).Area;
    end
end
6.水果识别:
for i=1:num
  if(MeanHue(i)<0.6 && yuan(i)<1.25 && r(i)>0.7 &&b(i)>0.1&&a==0)
text(stats(i).Centroid(1),stats(i).Centroid(2),'桃子','color','g','fontsize',16);       
a=1;
 end
End

7.边缘检测算法
I=imread('92.bmp');%  提取图像
I=rgb2gray(I);
BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测
BW2=edge(I,'roberts');%用Roberts算子进行边缘检测
BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测
BW4=edge(I,'log'); %用log算子进行边缘检测
BW5=edge(I,'canny'); %用canny算子进行边缘检测
%h=fspecial('gaussian',5);
BW6=edge(I,'canny');
figure(1);
subplot(2,3,1), imshow(BW1);
title('sobel edge check');
subplot(2,3,2), imshow(BW2);
title('roberts edge check');
subplot(2,3,3), imshow(BW3);
title('prewitt edge check');
subplot(2,3,4), imshow(BW4);
title('log edge check');
subplot(2,3,5), imshow(BW5);
title('canny edge check');
subplot(2,3,6), imshow(BW6);
title('gasussian&canny edge check');%此为用高斯滤波后Canny算子边缘检测结果
figure(2);
%Egray = uint8(edge(I,'canny'));
%for i = 1:300
%    for j = 1:300
%        if Egray(i,j)==0
%            I(i,j)=0;
%        end
%    end
%%end
%imshow(I);


8滤波
I=imread('92.bmp');%读取图像
J1=imnoise(I,'gaussian',0,0.0005);%加入均值为0,方差为0.005的高斯噪声
J=rgb2gray(J1);
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2); imshow(J);
title('加入高斯噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K1=filter2(fspecial('average',1),J)/255; %模板尺寸为1
K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5
K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7
K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,3,3);imshow(K1);
title('改进后的图像1');
subplot(2,3,4); imshow(K2);
title('改进后的图像2');
subplot(2,3,5);imshow(K3);
title('改进后的图像3');
subplot(2,3,6);imshow(K4);
title('改进后的图像4'); 

  • 19
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值