基于Matlab的缺陷识别检测系统

        表面缺陷检测是机器视觉领域中非常重要的一 项研究内容,也称为AOI(Automated optical in— spection)或AsI(Automated surface inspection), 它是利用机器视觉设备获取图像来判断采集图像中 是否存在缺陷的技术.目前,基于机器视觉的表面 缺陷装备已经在各工业领域广泛替代人工肉眼检 测,包括3C、汽车、家电、机械制造、半导体及电子、 化工、医药、航空航天、轻工等行业.传统的基于机 器视觉的表面缺陷检测方法,往往采用常规图像处 理算法或人工设计特征加分类器方式.

 

 一、算法描述

        近年来,随着以卷积神经网络fConv01utional neural network,CNN)为代表的深度学习模型在 诸多计算机视觉(Computer vjsion,CV)领域成功 应用,例如人脸识别、行人重识别、场景文字检测、 目标跟踪和自动驾驶等,不少基于深度学习的缺陷 检测方法也广泛应用在各种工业场景中,甚至国内 外一些公司开发出多种基于深度学习的商用工业表 面缺陷检测软件,如表1所示.全球传统工业视觉 及其部件的市场规模在2025年将达到192亿美元【“, 其中中国占比约为30%,并保持14%的年度平均增 长率,这一领域正在逐步被新一代基于深度学习的 工业视觉技术替代.同时我国在《中国制造2025》 白皮书中提出“推广采用先进成型和加工方法、在 线检测装置、智能化生产和物流系统及检测设备等, 使重点实物产品的性能稳定性、质量可靠性、环境 适应性、使用寿命等指标达到国际同类产品先进水 平”。

         近年来,基于深度学习的表面缺陷检测技术广泛应用在各种工业场景中.本文对近年来基于深度学习的表面缺陷 检测方法进行了梳理,根据数据标签的不同将其分为全监督学习模型方法、无监督学习模型方法和其他方法三大类,并对各 种典型方法进一步细分归类和对比分析,总结了每种方法的优缺点和应用场景.

        在金属机械零件表面缺陷检测过程中,需要引入级联 分类器,对全部连接层中的输出特征进行分类处理,使其 能够获取更加准确的分类结果。为了全面提取全连接层的 特征,采用卷积神经网络的梯度直方图和局部二值模式提 取输出特征,同时对多个不同级联分类器依次进行训练, 将得到的分类结果进行决策融合,根据决策融合结果实现 零件表面缺陷检测。 方向梯度直方图在细微变形的特征下具有良好的不 变特性,但是方向梯度直方图描述局部特征的能力存在缺 陷,同时对噪声十分敏感。局部二值模式具有较好的局部 表达能力,所以方向梯度直方图和局部二值模式具有比较 好的互补性。 当通过卷积神经网络提取原始金属机械零件图像的特 征后,将提取到的特征进行统计,同时将其放入到全连接 层中。全面利用HOG和LBP的互补特征,进一步提取HOG 的输出特征。采用以上方式提取到的特征值具有比较强的 鲁棒特性。

二、代码实现

function varargout = main(varargin)
% MAIN MATLAB code for main.fig
%      MAIN, by itself, creates a new MAIN or raises the existing
%      singleton*.
%
%      H = MAIN returns the handle to a new MAIN or the handle to
%      the existing singleton*.
%
%      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN.M with the given input arguments.
%
%      MAIN('Property','Value',...) creates a new MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to main_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 main
 
% Last Modified by GUIDE v2.5 18-Apr-2022 10:33:59
 
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @main_OpeningFcn, ...
                   'gui_OutputFcn',  @main_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 main is made visible.
function main_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 main (see VARARGIN)
 
% Choose default command line output for main
handles.output = hObject;
 
set(handles.radiobutton1,'value',0);
set(handles.radiobutton2,'value',0);
 
axes(handles.axes1); %指定需要清空的坐标轴
cla reset;
box on;
set(handles.axes1,'xtick',[]);
set(handles.axes1,'ytick',[]);
axes(handles.axes2); %指定需要清空的坐标轴
cla reset;
box on; %在坐标轴四周加上边框
set(handles.axes2,'xtick',[]);
set(handles.axes2,'ytick',[]);
axes(handles.axes3); %指定需要清空的坐标轴
cla reset;
box on; %在坐标轴四周加上边框
set(handles.axes3,'xtick',[]);
set(handles.axes3,'ytick',[]);
set(handles.edit1,'string','');
set(handles.edit2,'string','');
set(handles.edit3,'string','');
set(handles.edit4,'string','');
 
% Update handles structure
guidata(hObject, handles);
 
% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);
 
 
% --- Outputs from this function are returned to the command line.
function varargout = main_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)
clc;
clear;
output=VOCxml_to_matlab_main();
save dataSet output;
 
% --- 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 inputSize;
data=load('dataSet');
data=data.output;
 
% 数据存储在一个包含三列的表中,其中第一列包含图像文件路径,第二列包含车辆边界框,
% 第三列对应的类别。
% 将数据集分成训练集、验证集和测试集。选择 60% 的数据用于训练,10% 用于验证,
% 其余用于测试经过训练的检测器
 
shuffledIndices = randperm(height(data));
idx = floor(0.6 * height(data));
 
trainingIdx = 1:idx;
trainingDataTbl = data(shuffledIndices(trainingIdx),:);
 
validationIdx = idx+1 : idx + 1 + floor(0.1 * length(shuffledIndices) );
validationDataTbl = data(shuffledIndices(validationIdx),:);
 
testIdx = validationIdx(end)+1 : length(shuffledIndices);
testDataTbl = data(shuffledIndices(testIdx),:);
 
% 使用 imageDatastore 和 boxLabelDatastore 创建数据存储,
% 以便在训练和评估期间加载图像和标签数据
imdsTrain = imageDatastore(trainingDataTbl{:,'imageFilename'});
bldsTrain = boxLabelDatastore(trainingDataTbl(:,2:end));
 
 
imdsValidation = imageDatastore(validationDataTbl{:,'imageFilename'});
bldsValidation = boxLabelDatastore(validationDataTbl(:,2:end));
 
imdsTest = imageDatastore(testDataTbl{:,'imageFilename'});
bldsTest = boxLabelDatastore(testDataTbl(:,2:end));
 
%组合图像和边界框标签数据存储
trainingData = combine(imdsTrain,bldsTrain);
validationData = combine(imdsValidation,bldsValidation);
testData = combine(imdsTest,bldsTest);
 
%显示其中一个训练图像和边界框标签
data = read(trainingData);
I = data{1};
bbox = data{2};
annotatedImage = insertShape(I,'Rectangle',bbox);
annotatedImage = imresize(annotatedImage,2);
figure
imshow(annotatedImage)
 
%是否需要训练
doTraining=true;
 
end

参考文献

【1】黄凤荣,李杨.基于Faster RCNN的零件表面缺陷检测算法.

【2】卢颖颖,孙育.基于机器视觉的电镀件表面缺陷检测系统.

tengxunkou--kou,去掉横杆:--134---170---33--58。本文探讨了表面缺陷检测中三个关键问题, 介绍了工业表面缺陷常用数据集.最后,对表面缺陷检测的未来发展趋势进行了展望。

智能缺陷识别系统,是基于深度学习卷积神经网络的图像识别方法和小波矩的图像识别方法,对机巡、人巡数据 进行快速识别分析,支持绝大部分通道隐患类别和金具、绝缘子、防震锤以及销钉级的杆塔本体部件缺陷类别。

建立统一管理的自学系统,优化输电线路杆塔小目标的智能识别算法,从而不断提高缺陷诊断精度。

处理速度平均2张/秒,进一步减少数据分析过程工作中的人力投入,提高数据分析智能化水平。

  • 8
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
基于Matlab缺陷信号识别系统可以通过以下步骤来实现: 1. 数据采集:首先,需要采集包含缺陷信号的数据样本。可以使用传感器、仪器或设备来采集信号数据,并将其保存为Matlab可处理的格式,如.csv或.mat文件。 2. 信号预处理:对采集到的信号进行预处理,以提高后续信号处理算法的效果。常见的预处理方法包括滤波、降噪、去除基线漂移等。 3. 特征提取:通过数学方法从信号中提取有代表性的特征。例如,可以使用时域特征(如均值、方差)或频域特征(如功率谱、频谱峰值)等。Matlab提供了多种特征提取的函数和工具箱,可以方便地完成这一步骤。 4. 特征选择:根据具体应用需求,对提取到的特征进行选择,筛选出对于缺陷信号分类有较高区分度的特征。可以使用统计方法、机器学习算法来进行特征选择,并结合交叉验证等评估方法进行选择结果的验证。 5. 分类器建模:选择合适的分类算法,如支持向量机(SVM)、人工神经网络(ANN)等,并使用选定的特征进行模型训练。Matlab提供了丰富的机器学习工具箱,可以方便地进行分类器的建模和训练。 6. 模型评估:使用预留的测试数据对建立的分类模型进行评估。可以计算准确率、召回率、F1值等指标来评估模型的性能,并可以使用混淆矩阵等可视化工具来分析分类结果。 7. 系统集成:根据实际应用需求,将训练好的分类模型集成到一个完整的系统中。可以将数据采集、信号预处理、特征提取、分类器建模等步骤封装成一个Matlab函数,方便用户在实际应用场景中调用和使用。 总之,基于Matlab缺陷信号识别系统可以通过数据采集、信号预处理、特征提取、特征选择、分类器建模、模型评估和系统集成等步骤来实现Matlab提供了丰富的函数和工具箱,方便用户进行信号处理、特征提取和机器学习等操作,使得系统开发和调试过程更加高效和便捷。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值