一、簡(jiǎn)介
現(xiàn)在商業(yè)行為中,在水果出廠前都需要進(jìn)行質(zhì)量檢測(cè),需要將不同等級(jí)的水果進(jìn)行分級(jí)包裝,以保證商業(yè)利益最大化??墒莻鹘y(tǒng)方法都是依靠人工進(jìn)行檢測(cè),效率低下,主觀成分大,并不能很好客觀地評(píng)價(jià)出貨質(zhì)量,導(dǎo)致工廠損失利益水果檢測(cè)儀水果檢測(cè)儀,增加客戶投訴,從而造成品牌效率損失乙炔檢測(cè)儀,造成隱形的損失。
該課題為基于MATLAB的水果分級(jí)系統(tǒng)。適用圓形水果,如蘋果酒精檢測(cè)儀,橘子水果檢測(cè)儀,柚子,柿子等,統(tǒng)計(jì)水果圖片的面積,圓形度和色澤等多參數(shù)進(jìn)行評(píng)價(jià)。該設(shè)計(jì)帶一個(gè)GUI界面,通過設(shè)置直徑和色澤,測(cè)試水果的這些參數(shù),從而得出該水果所屬等級(jí)。
二、源代碼
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);%在坐標(biāo)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=('一級(jí)果');
strNC2=('二級(jí)果');
strNC3=('三級(jí)果');
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=('一級(jí)果');
strNC2=('二級(jí)果');
strNC3=('三級(jí)果');
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;
%====形態(tà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); % 計(jì)算圓度
% L為周長,A為面積,C為圓形度
strNC=[num2str(C)];
set(handles.text12,'string',strNC);
strNC1=('一級(jí)果');
strNC2=('二級(jí)果');
strNC3=('三級(jí)果');
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); %去除圖像與邊界相連通,但更高亮的區(qū)域
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=('一級(jí)果');
strNC2=('二級(jí)果');
strNC3=('三級(jí)果');
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
三、運(yùn)行結(jié)果
四、備注
版本:2014a
騰元達(dá)編輯,轉(zhuǎn)載請(qǐng)注明出處
- 2023-09-17
什么環(huán)境需要安裝氧氣檢測(cè)儀?有什么作用? - 2023-09-10
垃圾填埋場(chǎng)有毒有害氣體如何防范? - 2023-09-10
常見有毒有害氣體以及如何防范? - 2023-09-10
固定式可燃?xì)怏w探測(cè)器一般用什么氣體標(biāo)定 - 2023-08-19
密閉空間如何選擇氣體檢測(cè)儀? - 2021-09-08
二氧化氮探測(cè)器 二氧化氮NO2傳感器 - 2021-09-08
pm2.5檢測(cè)儀 歡迎##簡(jiǎn)陽PM2.5揚(yáng)塵監(jiān)測(cè)系統(tǒng)環(huán)境檢測(cè)儀##集團(tuán) - 2021-09-08
在線式二氧化碳檢測(cè)儀 - 2021-09-08
噪音檢測(cè)儀 噪聲檢測(cè)儀哪個(gè)品牌好? - 2021-09-08
pm2.5檢測(cè)儀 云南玉溪 揚(yáng)塵監(jiān)測(cè)PM10監(jiān)測(cè)PM2.5監(jiān)測(cè)TSP檢測(cè)儀揚(yáng)塵監(jiān)測(cè)儀