【图像识别】基于matlab 苹果质量检测及分级系统【含Matlab源码 519期】

一、简介

现在商业行为中,在水果出厂前都需要进行质量检测,需要将不同等级的水果进行分级包装,以保证商业利益最大化。可是传统方法都是依靠人工进行检测,效率低下,主观成分大,并不能很好客观地评价出货质量,导致工厂损失利益,增加客户投诉,从而造成品牌效率损失,造成隐形的损失。
该课题为基于MATLAB的水果分级系统。适用圆形水果,如苹果,橘子,柚子,柿子等,统计水果图片的面积,圆形度和色泽等多参数进行评价。该设计带一个GUI界面,通过设置直径和色泽,测试水果的这些参数,从而得出该水果所属等级。

二、源代码

function varargout = appletest(varargin)
% APPLETEST MATLAB code for appletest.fig
%      APPLETEST, by itself, creates a new APPLETEST or raises the existing
%      singleton*.
%
%      H = APPLETEST returns the handle to a new APPLETEST or the handle to
%      the existing singleton*.
%
%      APPLETEST('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in APPLETEST.M with the given input arguments.
%
%      APPLETEST('Property','Value',...) creates a new APPLETEST or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before appletest_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to appletest_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 appletest

% Last Modified by GUIDE v2.5 19-Oct-2019 20:28:04

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @appletest_OpeningFcn, ...
    'gui_OutputFcn',  @appletest_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 appletest is made visible.
function appletest_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 appletest (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = appletest_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 pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename,pathname]=uigetfile({
    
    '*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'},'选择图像');

image=[pathname,filename];%合成路径+文件名

im=imread(image);%读取图像

im=im2double(im);

axes(handles.axes1);

imshow(im);%在坐标axes1显示原图像

title('原始图像');

handles.X1=im;

guidata(hObject,handles);


% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{
    
    get(hObject,'Value')} returns selected item from popupmenu1
Val=get(hObject,'Value')

strl=get(hObject,'string')

switch strl{
    
    Val};
    
    case '   面积'
        
        
        x1=handles.X1;
        
        w=rgb2gray(x1);
        
        L=medfilt2(w);
        
        level=graythresh(L);
        
        bw=im2bw(L,level);
        
        bw=imfill(~bw,'holes');
        
        axes(handles.axes2);
        
        imshow(bw);
        
        title('面积图像');
        
        strNC=[num2str(bwarea(bw))];
        
        set(handles.text9,'string',strNC);
        strNC1=('一级果');
        strNC2=('二级果');
        strNC3=('三级果');
        if bwarea(bw)>30000
            set(handles.text14,'string',strNC1);
        else if bwarea(bw)>1000&&bwarea(bw)<30000
                set(handles.text14,'string',strNC2);
            else
                set(handles.text14 ,'string',strNC3);
            end
        end
        
        %     strNC1=('无');
        
        %     set(handles.text14,'string',strNC1);
    case'   颜色'
        
        
        x1=handles.X1;
        
        hv=rgb2hsv(x1);
        
        H=hv(:,:,1);
        
        S=hv(:,:,2);
        
        V=hv(:,:,3);
        
        axes(handles.axes3);
        
        imshow(H)
        
        title('H分量图像');
        
        level=graythresh(x1);
        
        apple=im2bw(x1,level);
        
        count=length(x1);
        
        for i=1:count
            
            red_ratio=length(find((H>0 & H<1/12) | H>11/12))/length(find(apple==1));
            
        end
        r=red_ratio;
        strNC=[num2str(red_ratio*100),'%'];
        
        set(handles.text10,'string',strNC);
        
        strNC1=('一级果');
        strNC2=('二级果');
        strNC3=('三级果');
        if r>1
            set(handles.text15,'string',strNC1);
        else if r>0.8&&r<1
                set(handles.text15,'string',strNC2);
            else
                set(handles.text15 ,'string',strNC3);
            end
        end
    case'   圆形度'
        
        
        x1=handles.X1;
        
        I2=rgb2gray(x1);
        
        J=im2bw(I2,0.75);
        
        I=~J;
        
        %====形态特征值计算===%
        l=bwlabel(I,8);
        
        [l,num]=bwlabel(I,8);
        
        STATS=regionprops(l,'Area');
        
        A=STATS.Area;
        
        STATS=regionprops(l,'Perimeter');
        
        L=STATS.Perimeter
        
        C=(4.*pi.*A)./(L.*L); % 计算圆度
        
        % L为周长,A为面积,C为圆形度
        
        strNC=[num2str(C)];
        
        set(handles.text12,'string',strNC);
        
        strNC1=('一级果');
        strNC2=('二级果');
        strNC3=('三级果');
        if C>0.65
            set(handles.text17,'string',strNC1);
        else if C>0.55&&C<0.65
                set(handles.text17,'string',strNC2);
            else
                set(handles.text17,'string',strNC3);
            end
        end
    case'   表面缺陷'
        
        
        x1=handles.X1;
        
        w=rgb2gray(x1);
        
        L=medfilt2(w);
        
        level=graythresh(L);
        
        bw=im2bw(L,level);
        
        
        X=imclearborder(bw,4); %去除图像与边界相连通,但更高亮的区域
        
        axes(handles.axes4);
        
        imshow(X)
        
        title('缺陷图像');
        
        Q=(bwarea(X)/bwarea(~bw)*100)
        q=num2str(bwarea(X)/bwarea(~bw)*100)
        strNC=[q,'%'];
        
        set(handles.text11,'string',strNC);
        
        strNC1=('一级果');
        strNC2=('二级果');
        strNC3=('三级果');
        if Q<0.1
            set(handles.text16,'string',strNC1);
        else if Q>0.1&&Q<0.2
                set(handles.text16,'string',strNC2);
            else
                set(handles.text16,'string',strNC3);
            end
        end
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【图像识别】基于matlab路面裂缝识别含GUI【含Matlab源码 009期】
【图像识别】基于matlab身份证号码识别【含Matlab源码 014期】
【图像压缩】基于matlab图像处理教程系列之图像压缩【含Matlab源码 024期】
【图像分割】基于matlab图像处理教程系列之图像分割(一)【含Matlab源码 025期】
【图像分割】基于matlab图像处理教程系列之图像分割(二)【含Matlab源码 026期】
【模式识别】基于matlab指纹识别【含Matlab源码 029期】
【模式识别】基于matlab银行卡号识别【含Matlab源码 030期】
【图像聚类】基于matlab FCM和改进的FCM脑部CT图像聚类【含Matlab源码 074期】
【图像评价】基于matlab CCF算法的图像质量评价【含Matlab源码 075期】
【图像增强】基于matlab局部对比度增强的CLAHE算法之直方图增强【含Matlab源码 076期】
【图像融合】基于matlab Frequency Partition之图像融合【含Matlab源码 077期】
【图像评价】基于matlab SVM之图像无参考质量评价【含Matlab源码 078期】
【图像处理】基于matlab DWT+DCT+PBFO改进图像水印隐藏提取含GUI【含Matlab源码 081期】
【图像变换】基于matalb DIBR-3D图像变换【含Matalb源码 082期】
【图像融合】基于matlab CBF算法的图像融合【含Matlab源码 083期】
【图像分割】基于matlab模糊聚类算法FCM的图像分割【含Matlab源码 084期】
【图像分割】基于形态学重建和过滤改进FCM算法(FRFCM)的的图像分割【Matlab 085期】
【图像去噪】基于matlab自适应形态学的图像去噪【含Matlab源码 086期】
【图像增强】基于matlab DEHAZENET和HWD的水下去散射图像增强【含Matlab 087期】
【图像增强】基于matlab PSO寻优ACE的图像增强【含Matlab源码 088期】
【图像增强】基于matlab区域相似变换函数和蜻蜓算法之灰度图像增强【含Matlab源码 089期】
【图像重建】基于matlab图像重建之ASTRA算法【含Matlab源码 090期】
【图像分割】基于matlab四叉树图像分割【含Matlab源码 091期】
【图像分割】基于matlab心脏中心线提取【含Matlab源码 092期】
【图像识别】基于matlab svm植物叶子疾病检测和分类【含Matlab源码 093期】
【图像识别】基于matlab模板匹配之手写数字识别系统GUI界面【含Matlab源码 094期】
【图像识别】基于matlab不变矩的数字验证码识别含GUI界面【含Matlab源码 095期】
【图像识别】基于matlab条形码识别系统【含Matlab源码 096期】
【图像识别】基于matlab RGB和BP神经网络的人民币识别系统含GUI界面【含Matlab源码 097期】
【图像识别】基于matlab cnn卷积神经网络之验证码识别【含Matlab源码 098期】
【图像直线拟合】基于matlab最小二乘法的图像直线拟合【含Matlab源码 100期】
【图像去雾】基于matlab暗通道之图像去雾【含Matlab源码 101期】
【图像分割】基于matlab直觉模糊C均值聚类的图像分割IFCM【含Matlab源码 120期】
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】
【模式识别】基于matlab银行监控系统人脸识别【含Matlab源码 125期】
【模式识别】基于matlab GUI界面的疲劳检测系统【含Matlab源码 126期】
【图像识别】基于matlab国外车牌识别【含Matlab源码 128期】
【图像分割】基于matlab蚁群优化模糊聚类的图像分割【含Matlab源码 130期】
【模式识别】基于matalb GUI界面的水果检测系统【含Matlab源码 173期】
【模式识别】基于matalb GUI界面的水果分类系统【含Matlab源码 174期】
【模式识别】基于matalb GUI界面的水果分级系统【含Matlab源码 175期】
【模式识别】基于matlab人脸识别之检测脸、眼、鼻子和嘴【含Matlab源码 178期】
基于matlab GUI界面处理录音与音频【含Matlab源码 181期】
【图像处理】基于matlab GUI界面的图像加解密【含Matlab源码 182期】
【模式识别】基于matlab GUI界面BP网络之手写体大写字母识别【含Matlab源码 183期】
【图像分割】基于matlab GUI界面医学影像分割【含Matlab源码 184期】
【图频处理】基于matlab GUI界面环图像处理与音乐播放系统【含Matlab源码 185期】
【图像隐藏】基于matlab Laguerre 变换的图像隐藏【含Matlab源码 193期】
【图像处理】基于matlab dwt函数实现二维小波变换【含Matlab源码 198期】
【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】
【图像边缘检测】基于matlab GUI界面图像边缘检测系统【含Matlab源码 203期】
【图像几何运算】基于matlab GUI界面之图像几何运算系统【含Matlab源码 206期】
【图像处理】基于matlab GUI界面之图像处理系统【含Matlab源码 207期】
【图像识别】基于matlab细胞识别和边缘检测【含Matlab源码 210期】
【模式识别】基于matlab 反馈神经Hopfield的数字识别【含Matlab源码 226期】
【模式识别】基于matlab之指纹图像细节特征提取 【含Matlab源码 227期】
【图像分割】基于matlab RGB HSV YCbCr Lab颜色空间人脸检测之图像分割【含Matlab源码 228期】
【图像压缩】基于matlab小波变换的图像压缩【含Matlab源码 229期】
【模式识别】基于matlab GUI界面的火灾检测【含Matlab源码 249期】
【模式识别】基于matlab Hough变换的答题卡识别【含Matlab源码 250期】
【模式识别】基于matlab二值膨胀差分和椒盐滤波之教室内人数识别系统【含Matlab源码 251期】
【小波变换】基于matlab GUI界面DWT与SVD算法的数字水印 【含Matlab源码 253期】
【模式识别】基于matlab差影法之三维人体姿态行为识别【含Matlab源码 277期】
【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
【图像分割】基于matlab粒子群优化指数熵图像分割【含Matlab源码 287期】
【边缘检测】基于matlab插值法亚像素边缘检测【含Matlab源码 306期】
【模式识别】基于matlab GUI贝叶斯最小错误率手写数字识别【含Matlab源码 308期】
【模式识别】基于matlab PCA手写数字识别【含Matlab源码 309期】
【模式识别】基于matlab 特征匹配的英文印刷字符识别【含Matlab源码 310期】
模式识别】基于matlab知识库的手写体数字识别【含Matlab源码 311期】
【模式识别】基于matlab之银行卡数字识别【含Matlab源码 312期】
【图像识别】基于matlab表情检测【含Matlab源码 317期】
【图像检测】基于matlab LSD直线检测【含Matlab源码 318期】
【图像融合】红外与可见光的融合与配准算法【含Matlab源码 319期】
【图像识别】基于matlab帧差法跌倒检测【含Matlab源码 320期】
【图像识别】基于matlab组合BCOSFIRE过滤器进行墙体裂缝识别【含Matlab源码 321期】
【模式识别】基于matlab中值滤波和二值化的跌倒检测【含Matlab源码 344期】
【图像隐写】基于matlab DCT的图像隐写【含Matlab源码 365期】
【图像隐写】基于matlab LSB的图像隐写提取【含Matlab源码 366期】
【图像隐写】基于matlab高斯模型的JPEG图像隐写【含Matlab源码 367期】
【图像隐写】基于matlab图像自适应隐写算法wow【含Matlab源码 368期】
【模式识别】基于matlab GUI SVM和PCA的人脸识别【含Matlab源码 369期】
【视频识别】基于matlab轨迹方法行为识别【含Matlab源码 375期】
【模式识别】基于matlab GUI HSV和RGB模型水果分类【含Matlab源码 380期】
【图像处理】基于matlab GUI数字图像处理平台【含Matlab源码 381期】
【图像分割】基于matlab的视网膜图像分割【含Matlab源码 382期】
【模式识别】基于matlab k-means聚类的手势识别【含Matlab源码 386期】
【图像处理】基于Hough变换的人眼虹膜定位【含Matlab源码 387期】
【图像处理】基于matlab Kalman滤波的目标跟踪【含Matlab源码 388期】
【图像分割】基于matlab GAC水平集方法实现图像分割【含Matlab源码 389期】
【图像分割】基于matlab 分水岭算法的图像分割【含Matlab源码 390期】
【图像去噪】基于小波变换的图像去噪【含Matlab源码 391期】
【图像融合】基于matlab小波变换的图像融合【含Matlab源码 392期】
【图像识别】基于matlab图像识别物体计数【含Matlab源码 393期】
【图像增强】基于matlab模糊集的图像增强【含Matlab源码 394期】
【图像检索】基于matlab GUI综合特征的图像检索【含Matlab源码 395期】
【图像处理】基于matlab 图像RGB三色的合成、分离【含Matlab源码 401期】
【图像处理】基于matlab鼠标画图【含Matlab源码 402期】
【图像识别】基于matlab 二值化条形码识别【含Matlab源码 403期】
【图像压缩】基于matlab 行程编码实现的图像压缩【含Matlab源码 404期】
【图像几何】基于matlab投影法测距【含Matlab源码 405期】
【图像分割】基于matlab 关键像素点的FLICM图像分割【含Matlab源码 406期】
【图像识别】基于matlab gabor滤波布匹瑕疵检测【含Matlab源码 407期】
【图像识别】基于matlab GUI车牌库识别【含Matlab源码 416期】
【图像识别】基于matlab 国内车牌识别【含Matlab源码 417期】
【图像分割】基于matlab snake模型的图像分割【含Matlab源码 418期】
【图像去噪】基于matlab全变分算法图像去噪【含Matlab源码 419期】
【图像去噪】基于matlab 非局部均值(NLM)滤波图像去噪【含Matlab源码 420期】
【图像去噪】基于matlab中值滤波图像去噪【含Matlab源码 421期】
【边缘检测】基于matlab 元胞自动机图像边缘检测【含Matlab源码 427期】
【图像识别】基于LBP+LPQ算法融合人脸表情识别【含Matlab源码 432期】
【图像识别】基于matlab OCR识别系统【含Matlab源码 438期】
【边缘检测】基于matlab拉普拉斯边缘检测与图像增强【含Matlab源码 456期】
【图像处理】基于matlab全变差图像处理【含Matlab源码 457期】
【图像处理】基于matlab直方图的医学图像处理【含Matlab源码 458期】
【图像分割】基于GMM-HMRF图像分割【含Matlab源码 459期】
【图像识别】基于matlab ksvd字典学习之人脸表情识别【含Matlab源码 460期】
【图像去噪】基于matlab curvelet变换图像去噪【含Matlab源码 461期】
【图像去噪】基于小波变换(中值、硬阙值、软阙值)的图像去噪【含Matlab源码 462期】
【图像配准】基于matlab sift图像配准【含Matlab源码 463期】
【图像识别】基于matlab扑克牌灰度二值化识别【含Matlab源码 464期】
【图像转换】基于matlab 二维图转三维图【含Matlab源码 465期】
【图像识别】基于matlab阈值的裂痕、划痕检测【含Matlab源码 467期】
【图像识别】基于matlab Hough变换形状检测【含Matlab源码 468期】
【图像识别】基于matlab车辆出入库计时系统【含Matlab源码 469期】
【图像识别】基于matlab颜色直方图的危险品识别【含Matlab源码 470期】
【图像识别】基于matlab RBF手写数字识别【含Matlab源码 471期】
【图像识别】基于matlab花朵分类【含Matlab源码 472期】
【图像增强】基于matlab拉氏滤波的图像质量提升【含Matlab源码 488期】
【边缘检测】基于matlab CNN的灰度图像边缘提取【含Matlab源码 490期】
【图像增强】基于matlab虹膜图像高斯滤波、低通滤波、巴特沃斯滤波【含Matlab源码 501期】
【视频识别】基于matlab 高斯模型视频车辆计数【含Matlab源码 503期】
【视频识别】基于matlab视频的车流量统计【含Matlab源码 504期】
【图像识别】基于matlab Fisher分类手写数字识别 【含Matlab源码 505期】
【图像去噪】基于matlab GUI小波、中值、维纳及频域上的滤波【含Matlab源码 506期】
【图像分割】基于matlab DBSCAN超像素分割【含Matlab源码 515期】
【图像分割】基于matlab RGB颜色分层图像分割【含Matlab源码 516期】
【图像拼接】基于matlab Harris角点检测的图像拼接【含Matlab源码 517期】
【图像识别】基于matlab GUI BP神经网络手写数字识别【含Matlab源码 518期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/114852950