【水果蔬菜识别】基于matlab GUI灰度+二值化+腐蚀+直方图处理水果蔬菜识别【含Matlab源码 1052期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【水果蔬菜识别】基于matlab GUI灰度+二值化+腐蚀+直方图处理水果蔬菜识别【含Matlab源码 1052期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、水果蔬菜识别简介
0 引 言
随着计算机技术的发展,图像识别技术被应用到各大领域。在农业领域中,图像识别技术的应用也较为广泛。例如,农作物虫害图像识别,农产品自动分拣及品质分级等等。我国是水果大国,对于水果图像识别的研究尤为重要。水果图像识别能对不同水果进行识别分类,有利于水果的自动分拣及水果品质分级。在西方的发达国家,已经开始对水果行业智能化、规模化,在选果包装车间中,已经普遍采用无损伤检测手段。因此,水果图像识别技术具有很大的效益潜力。
20世纪80年代初,国内外学者开始对水果识别分类进行研究,包括研究水果的计算机自动识别分类等。但是传统的水果识别仅仅基于水果的轮廓曲线特征或者颜色特征,识别精度不高,分类效果较差。近年来,随着计算机技术的提升和新型算法的提出,出现了一些基于模式识别算法的较新方法,比如基于卷积神经网络的水果识别系统和基于深度学习的水果图像识别系统。
最初,深度学习是为了解决图像识别问题而提出的;如今,深度学习已经在图像、语音等方面取得了重大突破。目前,深度学习技术已经广泛应用到图像识别中,主要应用于图像的分类识别、图像的目标检测、图像修复和图像分割等领域。
鉴于图像识别技术的发展及国内外研究现状,本文提出一种基于阈值分类器的水果识别系统。水果图像识别的研究将有利于水果分拣实现智能化,同时,也给其他图像识别领域提供了一定的参考。
1 水果识别系统构成
1.1 水果识别流程图
一个基本的图像识别系统主要由图像采集、图像预处理、图像特征提取、图像识别算法等步骤组成。每一步骤都会对图像识别的精度起着至关重要的作用,但是根据研究的不同,可以适当的侧重其中一个流程。本文水果系统识别流程如图1所示。
图1 水果识别流程
1.2 水果图像预处理
在分析和使用图像之前,需要对图像进行预处理,包括水果图像二值化、形态学处理,水果图像填充和水果图像边缘检测。
水果图像二值化处理一般采用OTSU算法。水果图像经二值化处理后仍然有一些独立的小白点,而且边缘有许多毛刺,整体二值化图像不圆润,不是很光滑,于是对二值化的图像进行形态学处理,并对二值化图像进行开运算。开运算处理之后,再对图像进行边缘检测、水果图像填充。
2 水果特征提取
特征是一个对物体进行描述的量,任何识别算法都需要选取一个好的特征,这是确保算法有效的关键。为了识别不同种类的水果,采集到的水果图像经预处理后,还需要进行特征提取。水果较为明显的特征包括:颜色特征、形状特征及纹理[7]。就本研究而言,主要考虑的是水果的形状特征。水果形状特征是识别水果种类的要重依据,水果形状特征比较多,主要包括水果的大小、水果的周长、水果的面积、水果的圆度、水果的离心率等等。
在水果识别中,桃子和苹果的形状更加圆滑,也更加接近圆形;香蕉形状比较长,它是属于条形的;而像菠萝则类似一个矩形。对水果整体区域进行填充时,可以通过图像像素的个数求出的水果面积S,也可以根据边缘检测求出水果的周长L。用圆度t来表示与圆形的近似程度,则有:
式中:π是圆周率;S是图像面积;L是图像的周长。
水果识别中,先求出圆度t,圆度越趋近于1,说明水果形状越近似为圆形,圆度越趋近于0,说明水果形状偏离圆形。除了圆度t,还设置了其他形状参数,比如离心率e,长轴和短轴之比f等。本文选择不同水果图像,对其形状特征参数进行比对,见表1所列。通过表1可以看出,水果的种类不同,其形状特征参数差别比较大,就圆度而言,桃子的圆度接近为1,故其形状与圆相近;菠萝的圆度最小,接近为0,其形状与圆形差别比较大,与实际情况大致相符。
3 阈值分类器
图像的精准识别是一个比较困难的研究课题,图像识别技术是模式识别技术的一个重要分支。基于图像的模式识别流程如图3所示。
图3 模式识别流程
从图3可以看出,模式识别主要包括训练和测试两个方面,其中,图像的训练尤为重要。在训练数据时,训练算法起至关重要的作用。识别分类算法即对提取的特征进行训练测试,是水果识别系统核心。
三、部分源代码
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]杜俊波,李文正.基于阈值分类器的水果识别系统设计[J].物联网技术. 2020,10(12)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/115387680
- 点赞
- 收藏
- 关注作者
评论(0)