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