破损识别基于matlab GUI机器视觉+SVM玉米种子破损识别(带面板)含Matlab源码 1651期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了破损识别基于matlab GUI机器视觉+SVM玉米种子破损识别(带面板)含Matlab源码 1651期相关的知识,希望对你有一定的参考价值。

一、简介

1 玉米种粒图像获取及预处理
1.1 图像获取
玉米种粒的图像采集均在玉米种粒图像获取装置上进行共采集破损玉米种粒图像与完整玉米种粒图像各100幅,用来进行图像预处理、特征提取、对SVM进行训练及识别效果检测等工作。

1.2 图像预处理
在进行玉米种粒特征提取之前,需要将采集到的玉米种粒图像进行预处理。图像预处理能很好地改善在图像的获取、传输、变换过程中因失真、噪声、曝光不足或过量等因素与原图像产生的差异,以便进行后续图像识别等工作。首先,将采集到的玉米种粒图像进行灰度化处理,判断噪声类型,选择适当的方法对图像进行降噪;图像降噪完成后,进行玉米种粒图像的分割,通过忽略目标区域外的其他区域得到待检图像,以便进行特征提取。

1.2.1 图像降噪
灰度化后的玉米种粒图像如图2所示。由图2可知:采集到的玉米种粒图像存在噪点及细小杂质点,噪声种类人工初步判断为椒盐噪声。采用差影法对采集到的玉米种粒图像进行噪声分析,在采集环境完全相同的前提下(即保证采集对象、采集设备、采集角度、光源光照强度等都相同),连续采集2幅玉米种粒的图像,将获得的2幅连续采集的图像作减法运算,得到的分析结果如图3所示。由图3可以清晰地看出噪声类型为椒盐噪声,据此判断采集到的玉米种粒图像噪声类型为椒盐噪声[5]。用上述方法对另外两组连续采集的玉米种粒图像进行差影法分析,得出一致结论。

查阅资料可知,去除椒盐噪声效果比较好的方法是中值滤波法,故本文对玉米种粒图像采用中值滤波法进行图像降噪。经中值滤波降噪处理过的玉米种粒图像噪点大大减少(见图4),适合对图像进行下一步处理。

1.2.2 图像分割
对经过降噪处理的玉米种粒图像进行图像分割。玉米种粒的拍摄背景选择与玉米种粒颜色反差较大的黑色,由于同一品种的不同玉米种粒在外观、颜色等方面区别不大,其灰度直方图峰值相似,故本文采用灰度阈值法中的二值化处理来对玉米种粒图像进行分割。图像二值化处理即选择一个合适阈值,将图像转化为黑白二值图像,从而完成目标图像和背景图像的分割。二值化分割具体定义为

式中T—阈值。

通过观察分析采集到的玉米种粒图像的灰度直方图,可以快速、准确地找出合适的图像分割阈值约为20,如图5(a)所示。图5(b)为用此阈值分割后的玉米种粒图像,可以看出分割后的玉米种粒图像还存在部分大的噪点或者杂质点,所以本文将所有闭合区域的像素数最小值设为100,把图像中像素数小于100的目标区域设置为背景。处理后的图像如图5©所示。此方法可以有效地去除图像中较大的噪点和杂质点,得到的图像中玉米种粒轮廓明显,适合进行下一步的玉米种粒特征值提取工作。

2 玉米种粒图像特征提取
在玉米种粒的图像识别系统中,玉米种粒的特征参数的选用和提取直接关系到玉米种粒的识别精度。图像的特征种类包括颜色特征、几何特征、形状特征及纹理特征等。由于玉米种粒的破损部分主要集中在胚部分,破损部分与完整玉米种粒颜色特征对比不明显,所以本文不采用玉米种粒的颜色特征,只从几何特征与形状特征中提取特征参数作为玉米种粒破损的检测指标[6,7,8]。

2.1 几何特征提取
破损玉米种粒的外在形状与完整玉米种粒差异较为明显,所以本文选择提取玉米种粒的部分形状特征作为检测指标。根据玉米种粒的形态特征,分别提取玉米种粒的周长、面积、周长面积比、长轴长、短轴长及长宽比6个几何特征[9]。玉米种粒的几何、外观特征示意图如图6所示。

图6 玉米种粒几何及外观特征示意图
图6中,L为周长;Pab为长轴长度;Pcd为短轴长度;S为面积;S1为最小外接矩形面积;S2为最小外接圆面积。几何特征及参数如表1所示。

表1 玉米种粒几何特征及参数

2.2 形状特征提取
除上述6个几何特征之外,还提取了玉米种粒的10个形状特征,其中包括玉米种粒的矩形度(S/S1)、圆形度(4πS/L2)、紧凑度(S2/Lab),如表2所示。

除此之外,还包含7个彼此独立的Hu不变矩特征量。矩在其数学定义中可以表征随机量的分布情况,如果把灰度或者二值图像看作一个二维密度分布函数,就可以把矩概念引入到图像分析中。各阶矩的物理意义分别为:零阶矩(m00)表征二值图像的面积;一阶矩(m01,m10)表征目标区域质心位置;二阶矩(m02,m11,m20)反映目标的主轴、辅轴的长短及主轴方向角;三阶矩(m03,m12,m21,m30)描述图像细节,如目标的方向和斜度、反应目标的扭曲程度等。MingKuei Hu在1962年利用二阶和三阶中心矩构造了7个不变矩,即Hu不变矩。Hu不变矩满足RST(rotate,scale,translation,即旋转、缩放、平移)不变性,不因目标在图像中的位置、大小、角度而有所改变,对于识别纹理简单的图像识别精度较高,效果较好。7个Hu不变矩的具体定义如式(2)~式(8)所示。式中,ηpq分别代表各阶矩中心矩。

Hu不变矩提取流程图如图7所示。

图7 提取Hu不变矩流程图

3 玉米种粒图像识别检测算法
本文提出的破损玉米种粒识别方法可以概括为3部分,即玉米种粒的预处理、玉米种粒特征提取、模型训练与目标识别。图像识别流程图如图8所示。

图8 图像识别流程图

3.1 支持向量机分类原理
支持向量机(SVM,Support Vector Machine)是20世纪90年代初由Vapnik和Corinna Cortes等人根据统计学习理论提出的一种机器学习的新方法[10,11]。SVM是一个有监督的学习模型,与传统的人工神经网络相比,结构更加简单而且泛化(generalization),能力明显提高,通常应用在模式识别、分类以及回归分析等领域。

支持向量机的核心思想在于核函数,就是利用合适的非线性映射把低维空间向量集映射到一个较高维数的特征空间,并在这个空间里找到一个具有最大边界的最优线性分类面(最优分类超平面)(见图9),从而解决了低维空间向量集难以划分的问题。

图9 最优分类超平面示意图

3.2 支持向量机核函数选择
支持向量机通过非线性变换,将输入空间映射到高维度特征空间,可以用低维输入空间的某函数代替高维特征空间的内积计算,大大降低计算量,有效避免“维数灾难”,这样的函数即被称为核函数。

核函数包括线性核函数、多项式核函数及高斯核函数等。其中,高斯核函数最常用,可以将数据映射到无穷维,也叫做径向基函数(RBF)。本文在多种核函数中选用了RBF核函数,此核函数可以适用于低维、高维及不同样本量等情况[13,14]。

3.3 SVM训练
本文在完成玉米种粒的破损检测及分类的前提下,尽量简化识别分类系统,缩短检测时间。根据识别系统要实现的功能,选择使用二值SVM分类器。利用图像采集装置采集玉米种粒图像,将采集到的玉米种粒图像均分为训练样本和测试样本,即训练样本和测试样本均含各不相同的50幅完整玉米种粒图像和50幅不同程度的破损玉米种粒图像。用训练样本对SVM进行训练,特征量共16个,将待检测的玉米种粒分为两类,“合格”输出为1,“不合格”输出为0,即SVM训练有16个输入量、2个输出量。

建立训练样本集,选择RBF核函数,将输入玉米种粒图像样本进行归一化并构造核矩阵H1,1,计算出权值向量W和超平面系数b,最终构造出最优分类超平面并训练获得识别模型。

二、部分源代码

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

% Last Modified by GUIDE v2.5 01-Jan-2022 21:41:33

% Begin initialization code - DO NOT EDIT
% set(handles.path,'userdata','');

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @debug_OpeningFcn, ...
                   'gui_OutputFcn',  @debug_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin1)
    gui_State.gui_Callback = str2func(varargin1);
end

if nargout
    [varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
    gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT


% --- Executes just before debug is made visible.
function debug_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 debug (see VARARGIN)

% Choose default command line output for debug
handles.output = hObject;
path = '';
set(handles.btn_userdata,'userdata',path);
svmStruct = load('svmStruct.mat');%从mat文件中载入向量机训练结果
set(handles.edit_correct_rate,'String', svmStruct.correct_rate*100);
% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = debug_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
varargout1 = handles.output;


% --------------------------------------------------------------------
function menu_open_Callback(hObject, eventdata, handles)
% hObject    handle to menu_open (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('*.jpg';'*.bmp';'*.gif','选择图片');
%global path;
set(handles.btn_userdata,'userdata',fullfile(Pathname,Filename));
%set(handles.path,'userdata',[Pathname Filename]);
%handles.path=[Pathname Filename];

%Readimg(path,handles);


% --- Executes during object creation, after setting all properties.
function axes_origin_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes_origin (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes_origin


% --- Executes during object creation, after setting all properties.
function axes_taged_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes_taged (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes_taged


% --- Executes on button press in btn_recognize.
function btn_recognize_Callback(hObject, eventdata, handles)
% hObject    handle to btn_recognize (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%global path;
path = get(handles.btn_userdata,'userdata');
if(isempty(path))
    h=errordlg('未选择有效图片!','警告');
    ha=get(h,'children');
else
    Main_adjoin(path,handles);
end



% --- Executes on button press in btn_userdata.
function btn_userdata_Callback(hObject, eventdata, handles)
% hObject    handle to btn_userdata (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function menu_exercise_Callback(hObject, eventdata, handles)
% hObject    handle to menu_exercise (see GCBO)




function edit_correct_rate_Callback(hObject, eventdata, handles)
% hObject    handle to edit_correct_rate (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit_correct_rate as text
%        str2double(get(hObject,'String')) returns contents of edit_correct_rate as a double


% --- Executes during object creation, after setting all properties.
function edit_correct_rate_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_correct_rate (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit 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

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]崔欣,张鹏,赵静,徐文腾,马伟童,金城谦.基于机器视觉的玉米种粒破损识别方法研究[J].农机化研究. 2019,41(02)

以上是关于破损识别基于matlab GUI机器视觉+SVM玉米种子破损识别(带面板)含Matlab源码 1651期的主要内容,如果未能解决你的问题,请参考以下文章

病虫害识别基于matlab GUI SVM病虫害识别系统含Matlab源码 2429期

药材识别基于matlab GUI SVM色差色温判断药材炮制程度系统含Matlab源码 2241期

情感识别基于matlab GUI SVM语音情感识别(带面板)含Matlab源码 876期

疾病识别基于matlab GUI机器视觉肺癌检测系统含Matlab源码 1922期

手写数字识别基于matlab GUI SVM手写数字识别含Matlab源码 676期

疾病识别基于matlab GUI SVM农作物叶子虫害识别与分类含Matlab源码 1322期