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

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

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

⛄一、简介

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});
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 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’);
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]崔欣,张鹏,赵静,徐文腾,马伟童,金城谦.基于机器视觉的玉米种粒破损识别方法研究[J].农机化研究. 2019,41(02)

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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值