一、简介

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核函数,将输入玉米种粒图像样本进行归一化并构造核矩阵H{1,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 30-May-2021 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(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_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
varargout{1} = 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');
elseMain_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源码 1606期】相关推荐

  1. 【Matlab破损识别】机器视觉+SVM玉米种子破损识别(带面板)【含GUI源码 1651期】

    一.代码运行视频(哔哩哔哩) [Matlab破损识别]机器视觉+SVM玉米种子破损识别(带面板)[含GUI源码 1651期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考 ...

  2. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  3. 【机械仿真】基于matlab GUI曲柄摇杆机构运动仿真【含Matlab源码 1608期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI曲柄摇杆机构运动仿真[含Matlab源码 1608期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  4. 【光学】基于matlab GUI光栅条纹投影生成【含Matlab源码 2118期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI光栅条纹投影生成[含Matlab源码 2118期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. 【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI直齿圆柱齿轮应力计算[含Matlab源码 2077期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  6. 【天体学】基于matlab GUI太阳天顶角计算【含Matlab源码 2229期】

    一.⛄获取代码方式 获取代码方式1: 完整代码已上传我的资源:[天体学]基于matlab GUI太阳天顶角计算[含Matlab源码 2229期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  7. 【语音去噪】基于matlab GUI IIR滤波器语音去噪【含Matlab源码 1864期】

    一.语音处理简介 语言是人们获得各类有效信息的主要途径, 而语音是语言的表现形式.语音在一定程度上可影响人们的生活, 因此, 语音信号的研究对科学领域和人们日常生活具有一定的研究价值和意义.噪声广泛存 ...

  8. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】

    一.平行停车模拟仿真简介 近年来, 随着我国经济的快速发展, 机动车保有量也迅速增长.截至2012年底, 全国机动车保有量已达2.4亿辆, 城市"停车难"的问题日趋严重.统计结果表 ...

  9. 【飞行器】基于matlab GUI四旋飞行器模型【含Matlab源码 2075期】

    ⛄一.四旋翼飞行器简介 0 引 言 四旋翼飞行器由于具有可垂直起降.机动性强.操作方便等诸多优点,在军事和民用场合得到广泛应用,从而成为众多学者的研究热点.四旋翼飞行器是具有四输入.六输出的欠驱动.非 ...

  10. 基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)

    摘要 随着互联网技术的加快发展,计算机电脑硬件也在不断的迭代升级,而每年大学生不断的扩招,学院的增加,对于信息平台的管理需求也越来越多.选用B/S架构模式,可以更好的服务于学生信息化的管理,这是因为C ...

最新文章

  1. Git 2.25.0发布,支持部分clone、稀疏checkout
  2. 谈谈js初级封装代码
  3. 互联网高并发架构设计模式
  4. Spring Boot实现热部署
  5. 全局变量和局部变量命名规则_变量范围和LEGB规则
  6. Sql Server设置用户只能查看并访问特定数据库
  7. 在服务器上安装anaconda遇到的问题总结
  8. JavaScript面向对象那些事
  9. python制作圣诞贺卡_制作这种动态圣诞节电子贺卡,美炸了!
  10. 路在脚下,却不知怎么去走?
  11. pytorch实现股票预测
  12. 建群网培PMP每日一练2020-7-17
  13. 基于php和mysql实现的简易民航订票系统实验
  14. 初识MongoDB(一) mongodb基本操作
  15. ESD9X5VU-2/TR瞬态电压抑制器WILLSEM ESD9X5VU 1线单向超低电容
  16. DCC888 :Instruction Level Parallelism
  17. 图吧为什么叫图拉丁_如何评价百度贴吧「图拉丁吧」?
  18. 树莓派3 中文输入法安装教程
  19. 世界八大男士衬衫品牌
  20. 2021年茶艺师(初级)最新解析及茶艺师(初级)新版试题

热门文章

  1. 负载均衡技术沙龙2期圆满结束(现场图文、PPT)
  2. C# 中返回星期的函数
  3. WebGL笔记(二):顶点着色
  4. 【2019.7.15】
  5. Apache Shiro(六)-基于URL配置权限
  6. BZOJ1566 [NOI2009]管道取珠 【dp】
  7. php调试利器之phpdbg
  8. 初识Git 如何使用Git将本地项目上传到Github
  9. ZendFramework-2.4 源代码 - 整体架构(类图)
  10. Jenkins实现测试环境到生产环境一键部署(Windows)