• 大小: 2.22M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-04-17
  • 语言: Matlab
  • 标签: MATLAB  水果识别  

资源简介

matlab水果识别程序,可测试多幅图片,可用。配有完整代码,报告,图片。

资源截图

代码片段和文件信息

clear;clc;close all;
%%%%%%%%%%%%%%%%% 读取原图,并处理成二值图像 %%%%%%%%%%%%%%%%%%%%%%%
%I=imread(‘梨2.jpg‘);
%I=imread(‘桃子2.jpg‘);
%I=imread(‘苹果2.jpg‘);
%I=imread(‘香蕉.jpg‘);
%I=imread(‘青椒.jpg‘);
I=imread(‘test4.jpg‘);

I2=rgb2gray(I);
BW=im2bw(I20.9);
figure(1)subplot(131)imshow(I)title(‘原始图像‘);
subplot(132)imshow(I2)title(‘灰度图像‘);
subplot(133)imshow(BW)title(‘二值图像‘);

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

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

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

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

%%%%%%%%%%%%%%%%%%%计算各个图形单元边界像素点数%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i = 1 : num
        Premeter(i) = 0;
    end

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

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

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

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

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

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

[rowcol] = size(FilledLabel);   %统计填充后的图形中各块图形所含像素的个数的多少
MeanHue = zeros(1num);
    for i = 1 : num
        Hue = zeros(Area(i)1);
        nPoint = 0;
        for j = 1 : row
            for k = 1 : col
                if(FilledLabel(jk) == i)
                    nPoint = nPoint + 1;
                    Hue(nPoint1) = HSV(jk1);
                end
            end
        end
        
        Hue(:i) = sort(Hue(:1));
        for j = floor(nPoint*0.1) : floor(nPoint*0.9)
            MeanHue(i) = MeanHue(i) + Hue(j1);
        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(jk) ~=pear)
                   pearHSV(jk3)=0;
            

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-05-04 11:04  大设计\
     文件        5191  2014-05-03 21:10  大设计\final.m
     文件       23733  2014-05-03 10:27  大设计\test1.jpg
     文件       20824  2014-05-02 22:48  大设计\test2.jpg
     文件       18189  2014-05-03 09:11  大设计\test3.jpg
     文件       81877  2014-05-03 10:35  大设计\test4.jpg
     文件     1401421  2014-05-04 10:54  大设计\大设计报告.docx
     文件      923905  2014-05-04 10:56  大设计\大设计报告.pdf
     文件        5776  2014-05-02 14:52  大设计\无.png
     文件       17213  2014-05-03 10:10  大设计\桃子1.jpg
     文件       14903  2014-05-03 09:37  大设计\桃子2.jpg
     文件        6996  2012-10-25 08:59  大设计\梨1.jpg
     文件       22336  2014-05-03 10:15  大设计\梨2.jpg
     文件        9356  2014-05-02 16:41  大设计\苹果1.jpg
     文件       19645  2014-05-02 16:44  大设计\苹果2.jpg
     文件       12359  2014-05-02 21:00  大设计\青椒.jpg
     文件       35508  2012-10-24 18:25  大设计\香蕉.jpg

评论

共有 条评论