【水果识别】形态学水果识别(含识别率)【含GUI Matlab源码 907期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、水果识别简介

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

% Last Modified by GUIDE

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @fruit_OpeningFcn, …
‘gui_OutputFcn’, @fruit_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 fruit is made visible.
function fruit_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 fruit (see VARARGIN)
set(handles.axes1,‘xtick’,[]);
set(handles.axes1,‘ytick’,[]);
set(handles.axes1,‘box’,‘on’);
set(handles.axes2,‘xtick’,[]);
set(handles.axes2,‘ytick’,[]);
set(handles.axes2,‘box’,‘on’);
% Choose default command line output for fruit
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

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

% — Outputs from this function are returned to the command line.
function varargout = fruit_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)
str=uigetfile({‘.gif’;'.png’;‘.bmp’;'.jpg’},‘读取图像’);
%str=handles.b;
I = imread(str);
axes(handles.axes1)

%在axes1上作图
imshow(I);
handles.a=I;
guidata(hObject,handles)

% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
img=handles.a;
R=img(:,:,1); %获取彩色图像的r值。
G=img(:,:,2); %获取彩色图像的g值。
B=img(:,:,3); %获取彩色图像的b值。
I2=rgb2gray(img); %将图像灰度化。
%figure,imshow(I2),title(‘灰度图像’);
BW=im2bw(I2,0.9); %将图像二值化。

SE=strel(‘rectangle’,[40 30]); % 结构定义
J2=imopen(BW,SE);
axes(handles.axes2)% 进行开运算去除噪声和平滑边界
imshow(J2);
handles.b=J2;
guidata(hObject,handles)

% — 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)
J2=handles.b;
img=handles.a;
SE=strel(‘square’,3); % 定义3×3腐蚀结构元素
J=imerode(~J2,SE); %对图像进行腐蚀操作。
BW2=(~J2)-J; % 检测边缘

%填充了已有的检测的连续形状边界
B = imfill(BW2,‘holes’); %对图像填充孔洞。
B = bwmorph(B,‘remove’); %获得图像中区域边界。

%将不同的图形进行分别标记,num表示连接的图形对象的个数
[Label,num] = bwlabel(B); %进行标记。
for i = 1 : num
Area(i) = 0;
end
Label = imfill(Label,‘holes’); %填充打过标记的边界线中间围成的图形区域

%计算各个图像的hsv颜色(色度)

HSV = rgb2hsv(img); %转换为HSV颜色模型。

[row,col] = size(Label); %统计填充后的图形中各块图形所含像素的个数的多少
MeanHue = zeros(1,num); %初始化
for i = 1 : num
Hue = zeros(Area(i),1); %初始化
nPoint = 0; %初始化
for j = 1 : row
for k = 1 : col
if(Label(j,k) == i)
nPoint = nPoint + 1; %对于是连通区域中的点npoint+1.
Hue(nPoint,1) = HSV(j,k,1); %把hsv的值赋给Hue数组。
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);     %将hsv(i)的值赋给MeanHue(i)
    end
    MeanHue(i) = MeanHue(i) / (0.8*nPoint);     %计算出平均的色度值
end

%调用regionprops函数获得各个联通区域的属性值(中心点坐标,外接椭圆的长短轴长度,面积)。
[L,num]=bwlabel(BW2); %重新进行区域标记。
stats= regionprops(L, ‘ALL’); %调用regionprops函数。
for i= 1:num
longth(i)=stats(i).MajorAxisLength; %获得外接椭圆的长轴长度
width(i)=stats(i).MinorAxisLength; %获得外接椭圆的短轴长度
end
%初始化。
R2=0;
G2=0;
B2=0;
x=0;
y=0;
%求出似圆性。
for i=1:num
r(i)=0;
g(i)=0;
b(i)=0;
yuan(i)=longth(i)/width(i);%长轴长度/短轴长度为似圆性特征。
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]杜俊波,李文正.基于阈值分类器的水果识别系统设计[J].物联网技术. 2020,10(12)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值