matlab水果识别

小编 2026-06-24 阅读:1351 评论:0
clear;clc;close all; %%%%%%%%%%%%%%%%% 读取原图,并处理成二值图像 %%%%%%%%%%%%%%%%%%%%%%% I=imread(‘tao.png’)...

clear;clc;close all;
%%%%%%%%%%%%%%%%% 读取原图,并处理成二值图像 %%%%%%%%%%%%%%%%%%%%%%%
I=imread(‘tao.png’);

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

%%%%%%%%%%%%%%%% 进行边缘检测 得到不连续的图形边界 %%%%%%%%%%%%%%%%%%%%%%
%得到各个图形的连续边界
SE=strel(‘rectangle’,[40 30]); % 结构定义
J2=imopen(BW,SE); % 开运算
figure(2),imshow(J2),title(‘对二值图像进行开运算’);

SE=strel(‘square’,5); % 采用方形结构元素进行腐蚀
J=imerode(~J2,SE);
BW2=(~J2)-J; % 检测边缘
figure(3),imshow(BW2),title(‘边缘检测’);

%填充了已有的检测的连续形状边界
B = imfill(BW2,‘holes’);%图像填充
B = bwmorph(B,‘remove’);%移除内部像素
figure(4),imshow(B),title(‘提取出的边界图像’);

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

%%%%%%%%%%%%%%%%%%%计算各个图形单元边界像素点数%%%%%%%%%%%%%%%%%%%%%%%%%%%
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 

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

[row,col] = size(FilledLabel);
for i = 1 : row
for j = 1 : col
if(FilledLabel(i,j) > 0)
Area(FilledLabel(i,j)) = Area(FilledLabel(i,j)) + 1; %通过统计像素点个数的方式来求各形状的面积
end
end
end

%%%%%%%%%%%%%%%%%% 计算各个图形单元的圆度 %%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1 : num
Ecllipseratio(i) = 4piArea(i)/Premeter(i)^2;
end

%%%%%%%%%%%%%%%%%%%% 计算各个图像的色度 %%%%%%%%%%%%%%%%%%%%%

HSV = rgb2hsv(I); %转换为HSV,为后面的色度元素的提取做准备

[row,col] = size(FilledLabel); %统计填充后的图形中各块图形所含像素的个数的多少
MeanHue = zeros(1,num);
for i = 1 : num
Hue = zeros(Area(i),1);
nPoint = 0;
for j = 1 : row
for k = 1 : col
if(FilledLabel(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 

%%%%%%%%%%%%%%%%%%%%%%%% 各种水果识别 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%识别梨,在二维特征空间对各个图像进行类别区分
pear=0;result1=0;
for i=1:num
if(MeanHue(i)<0.125) %判断各个图形中平均色度值小于0.125的为梨
pear=i;
result1=1;
end
end
%对分出来的梨构建相应的图像掩膜,并用对原图的亮度图像进行掩膜操作
pearHSV=HSV;
for j = 1 : row
for k = 1 : col
if(FilledLabel(j,k) ~=pear)
pearHSV(j,k,3)=0;
end
end
end
%变换生成最终的结果图像
pearmatrix = hsv2rgb(pearHSV);%转换为RGB彩图,彩图中已经滤去了其余水果,只剩下梨
if(result1==1)
figure,imshow(pearmatrix);title(‘梨’);
end

%%%%%%%%%识别桃,在二维特征空间对各个图像进行类别区分
pitch=0;result2=0;
for i=1:num
if(MeanHue(i)>0.5) %判断各个图形中平均色度值大于0.5的为桃
pitch=i;
result2=1;
end
end
%对分别出来的桃构建相应的图像掩膜,并用对原图的亮度图像进行掩膜操作
pitchHSV=HSV;
[row,col] = size(FilledLabel); %统计填充后的图形中各块图形所含像素的个数的多少
for j = 1 : row
for k = 1 : col
if(FilledLabel(j,k) ~=pitch)
pitchHSV(j,k,3)=0;
end
end
end
%变换生成最终的结果图像
pitchmatrix = hsv2rgb(pitchHSV); %转换为RGB彩图,彩图中已经滤去了其余水果,只剩下桃
if(result2==1)
figure,imshow(pitchmatrix);title(‘桃子’);
end

%%%%%%%识别苹果,在二维特征空间对各个图像进行类别区分
apple=0;result3=0;
for i=1:num
if((Ecllipseratio(i)<1.25)&&(Ecllipseratio(i)>1.0)) %判断各个图形中圆度居于1.0与1.25之间的的为苹果
apple=i;
result3=1;
end
end
%对分出来的苹果构建相应的图像掩膜,并用对原图的亮度图像进行掩膜操作
appleHSV=HSV;
for j = 1 : row
for k = 1 : col
if(FilledLabel(j,k) ~=apple)
appleHSV(j,k,3)=0;
end
end
end
%变换生成最终的结果图像
applematrix = hsv2rgb(appleHSV); %转换为RGB彩图,彩图中已经滤去了其余水果,只剩下苹果
if(result3==1)
figure,imshow(applematrix);title(‘苹果’);
end

%%%%%%当没有梨,桃子,苹果,出现时
if(result10&&result20&&result3==0)
figure,imshow(‘无.png’);
end

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表