水果识别基于灰度直方图水果识别matlab源码含 GUI

Posted Matlab走起

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了水果识别基于灰度直方图水果识别matlab源码含 GUI相关的知识,希望对你有一定的参考价值。

一、简介

基于matlab GUI 灰度、二值化、腐蚀、直方图处理之水果识别

二、源代码

function varargout = untitled(varargin)
% UNTITLED MATLAB code for untitled.fig
%      UNTITLED, by itself, creates a new UNTITLED or raises the existing
%      singleton*.
%
%      H = UNTITLED returns the handle to a new UNTITLED or the handle to
%      the existing singleton*.
%
%      UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in UNTITLED.M with the given input arguments.
%
%      UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before untitled_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to untitled_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled

% Last Modified by GUIDE v2.5 15-Jan-2017 01:03:42

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to untitled (see VARARGIN)

% Choose default command line output for untitled
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global I FilledLabel HSV MeanHue  Ecllipseratio Label num Premeter Area
 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');  %填充打过标记的边界线中间围成的图形区域
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) = 4*pi*Area(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
%识别菠胡萝卜

%构建胡萝卜的分类器,在二维特征空间对各个图像进行类别区分
huluobo=1;
mazarea=Area(1);
for i=1:num
    if(mazarea<Area(i))%分类器识别桃的准则:判断各个图形中面积最大的为胡萝卜
        mazarea=Area(i);
        huluobo=i;
    end
end
%对分出来的类别分别构建相应的图像掩膜,并用对原图的亮度图像进行掩膜操作
huluoboHSV=HSV;
        for j = 1 : row
            for k = 1 : col
                if(FilledLabel(j,k) ~=huluobo)
                       %huluoboHSV(j,k,2)=0;
                       huluoboHSV(j,k,3)=0;
                end
            end
        end
%变换生成最终的结果图像,图像中显示的结果即对应分类器中指定的类别
huluobomatrix = hsv2rgb(huluoboHSV);%转换为RGB彩图,彩图中已经滤去了其余水果,只剩下胡萝卜
subplot(2,2,4),imshow(huluobomatrix);




% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global I Area FilledLabel HSV MeanHue  Ecllipseratio Label num Premeter
%计算各个图形单元的周长   用连接像素点或数边界像素点个数的方法   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

%计算各个图形单元的面积
FilledLabel=imfill(Label,'holes');  %填充打过标记的边界线中间围成的图形区域
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

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1575304183

以上是关于水果识别基于灰度直方图水果识别matlab源码含 GUI的主要内容,如果未能解决你的问题,请参考以下文章

水果识别基于灰度直方图水果识别matlab源码含 GUI

水果识别基于matlab GUI灰度二值化草莓识别含Matlab源码 653期

水果识别基于matlab GUI形态学水果识别含Matlab源码 907期

水果蔬菜识别基于matlab GUI形态学水果蔬菜识别含Matlab源码 919期

水果识别基于matlab GUI形态学水果大小识别含Matlab源码 030期

水果蔬菜识别基于matlab GUI形态学水果蔬菜识别含Matlab源码 006期