一、简介

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 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(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源码 1651期】相关推荐

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

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

  2. 【数字信号调制】基于matlab GUI PCM编码和QAM调制系统【含Matlab源码 2080期】

    ⛄一.PCM编码+QAM调制简介 1 PCM 数字信号是对连续变化的模拟信号进行抽样.量化和编码产生的,称为PCM(Pulse Code Modulation),即脉冲编码调制. 脉冲编码调制就是把一 ...

  3. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

    ⛄一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航 ...

  4. 【图像加密】基于matlab GUI正交拉丁方置乱+混沌图像加密解密【含Matlab源码 636期】

    ⛄一.正交拉丁方置乱及混沌系统简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术 ...

  5. 【火灾检测】基于matlab GUI森林火灾检测系统(带面板)【含Matlab源码 1921期】

    ⛄一.火灾检测简介 1 引言 目前森林火灾是破坏森林的最主要的灾害之一, 影响很大.森林是各种珍禽异兽的家园, 森林遭受火灾后, 会破坏野生动物赖以生存的环境.严重的森林火灾不仅能引起水土流失, 还会 ...

  6. 【图像加密】基于matlab GUI正交拉丁方置乱算法图像加解密【含Matlab源码 182期】

    ⛄一.正交拉丁方置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密 ...

  7. 【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

    一.区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解. 1 高斯金字塔分解 记源图像为G0,G ...

  8. 【图像加密】基于matlab GUI Logistic混沌图像加密与解密【含Matlab源码 1216期】

    ⛄一.混沌图像加密与解密简介 混沌系统图像加密解密理论部分参考链接: 基于混沌系统的图像加密算法设计与应用 ⛄二.部分源代码 %加密程序 function b=jiami(a,s,h) [m1,n1] ...

  9. 基于java开发的健身器材电商管理系统.rar(含项目源码前后端项目)

    功能:健身器材信息管理.健身器材分类管理.公告管理.个人中心.订单管理.健身器材入库管理.健身器材出库管理.收获评价管理.系统管理等 前端页面展示 后端管理: 源码下载地址:>>>

  10. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

最新文章

  1. mysql 程序迁移_如何从MySQL数据库程序中迁移数据库文件
  2. linux时间格式怎么写,linux基础--时间格式
  3. 文档中快速输入日期时间的方法
  4. [转]Bing Maps Tile System 学习
  5. c++中的deque容器
  6. python gamma函数_python gamma矫正
  7. Office2010翻译无处不在
  8. 边缘计算应用场景_从6大应用场景,看边缘计算落地生根
  9. python selenium打开新窗口,python selenium click打开新窗口
  10. 逆矩阵在密码学中的应用(希尔密码原理)
  11. Html5开发的在线画板涂鸦,使用html5 canvas制作涂鸦画板
  12. 我们的小太阳钟汉良,不老男神,希望你继续帅下去
  13. python break怎么用_怎么使用Python中的break
  14. 微软 2021 校园招聘正式启动!
  15. java秃顶_【本人秃顶程序员】在Java中使用函数范式提高代码质量
  16. Numpy.array()详解 、np.array与np.asarray辨析、 np.array和np.ndarry的区别
  17. Android与iOS在DES加密算法上的统一
  18. python处理原始音频数据
  19. Android Audio(七)—— AudioFocus(duck)
  20. cocos2d-js 手游解密jsc和WebSocket数据aes加密解密分析②

热门文章

  1. XP系统无法远程桌面
  2. iOS 混合开发 —— 方案分析
  3. wx 2150183182
  4. 如何配置可以远程访问linux上mysql
  5. Hadoop作业提交多种方案具体流程详解
  6. 用ASP.NET向Javascript传递变量
  7. ASP实例代码:搞个长文章分页代码
  8. 05_坐标变换与视觉测量学习笔记
  9. 20190914每日一句
  10. main(int argc, char** argv) 参数的含义