首页 > 分享 > 【水果识别】基于matlab GUI阈值分类器草莓识别【含Matlab源码 653期】

【水果识别】基于matlab GUI阈值分类器草莓识别【含Matlab源码 653期】

一、获取代码方式

二、草莓识别简介

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 M-file 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 11-Jan-2013 13:05:10

% 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 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)

global im;
global str;
[filename,pathname]=uigetfile_new({'*.*'},'选择训练图片...');
str=[pathname filename];
im=imread(str);
axes(handles.axes1);
imshow(im);

% --- 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)
global im1;
global str1;
[filename,pathname]=uigetfile_new({'*.*'},'选择测试图片...');
str1=[pathname filename];
im1=imread(str1);
axes(handles.axes2);
imshow(im1);

% --- 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 im;
global im1;
global str1;
se1 = strel('disk',5);
se2 = strel('square',16);
thresh1 = 0.2;
thresh2 = 0.01;
imtra = im2double(im);
rt = imtra(:,:,1);
gt = imtra(:,:,2);
bt = imtra(:,:,3);
idxr1 = find(rt>0);
idxg1 = find(gt>0);
idxb1 = find(bt>0);

mr1 = mean(rt(idxr1));
mg1 = mean(gt(idxg1));
mb1 = mean(bt(idxb1));
function n = adjvar(im)
[row,col] = size(im);
x = ones(row+4,col+4);
x = -x;
x(3:row+2,3:col+2) = im;
idx = find(x~=-1);
y(:,1) = x(idx);
y(:,2) = x(idx-1);
y(:,3) = x(idx+1);
y(:,4) = x(idx-row-4);
y(:,5) = x(idx+row+4);
y(:,6) = x(idx-row-5);
y(:,7) = x(idx-row-3);

v = var(y,0,2);

n = imadjust(n);

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.

四、运行结果

五、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)

相关知识

【病虫害识别】SVM病虫害识别系统【含GUI Matlab源码 2429期】
MATLAB植物虫害识别
【疾病识别】SVM农作物叶子虫害识别与分类【含GUI Matlab源码 1322期】
基于Matlab花卉识别分类系统
Matlab图像处理——基于机器视觉的苹果中心花及边花识别
基于Matlab植物虫害检测(GUI,注释svm算法)
深度学习之基于Matlab GoogleNet网络的花朵分类识别
基于颜色特征的农作物病虫害检测(MATLAB程序+word报告)
基于Matlab的农作物叶子病虫害识别与分类
【疾病分类】SVM农作物叶子虫害识别与分类【含Matlab源码 624期】

网址: 【水果识别】基于matlab GUI阈值分类器草莓识别【含Matlab源码 653期】 https://m.huajiangbk.com/newsview1141727.html

所属分类:花卉
上一篇: MyBatis mapper.x
下一篇: 甘孜州几年结果一代草莓苗