一、简介
现在商业行为中,在水果出厂前都需要进行质量检测,需要将不同等级的水果进行分级包装,以保证商业利益最大化。可是传统方法都是依靠人工进行检测,效率低下,主观成分大,并不能很好客观地评价出货质量,导致工厂损失利益,增加客户投诉,从而造成品牌效率损失,造成隐形的损失。
该课题为基于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
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423