基于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});
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 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张/秒,进一步减少数据分析过程工作中的人力投入,提高数据分析智能化水平。
基于Matlab的缺陷识别检测系统相关推荐
- 基于matlab实现人脸识别检测系统
1.人脸识别流程 1.1.1基本原理 基于YCbCr颜色空间的肤色模型进行肤色分割.在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb-Cr子平面上的投影将缩减,与中心区域显著不同.采用这 ...
- 基于MATLAB的疲劳驾驶检测系统
基于MATLAB的疲劳驾驶检测系统 设计内容(论文阐述的问题)疲劳驾驶检测系统以对驾驶员面部图像进行分析的方式来获取其疲劳信息,是一种智能检测系统.通过在车内安装固定摄像头实时采集驾驶员信息,将驾驶员 ...
- 基于Matlab的人脸识别登录系统
基于Matlab的人脸识别登录系统 摘 要:人脸识别系统以人脸识别技术为核心,是一项新兴的生物识别技术,是当今比较热门的一项安全认证技术.它涉及人脸图像采集.人脸定位.人脸识别预处理.身份确认以及身份 ...
- matlab对摄像头实时运动目标检测,基于Matlab实时运动目标跟踪检测系统
2012.03 COMPUTER SECURITY 17 学术.技术 基于 Matlab 实时运动目标跟踪检测系统 汪惠兰,林航飞,李赔龙 (同济大学 交通运输与工程学院,上海 201804) 摘 要 ...
- 【火灾检测】基于matlab GUI森林火灾检测系统(带面板)【含Matlab源码 1921期】
⛄一.火灾检测简介 1 引言 目前森林火灾是破坏森林的最主要的灾害之一, 影响很大.森林是各种珍禽异兽的家园, 森林遭受火灾后, 会破坏野生动物赖以生存的环境.严重的森林火灾不仅能引起水土流失, 还会 ...
- matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统
基于MATLAB复杂背景车牌识别检测系统 1.选题目的和意义 在复杂背景车牌识别检测系统中,由于拍摄时的光照条件.牌照的整洁程度的影响,和摄像机的焦距调整.镜头的光学畸变所产生的噪声都会不同程度地造成 ...
- 基于matlab的车牌识别系统程序,基于matlab的车牌识别系统的设计(附程序).doc
基于matlab的车牌识别系统的设计(附程序).doc 1车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位.字符分割和字符识别三个主要部分.本文首先确定车辆 ...
- 基于matlab的人脸五官边缘检测方法,基于MATLAB的人脸识别系统的设计
基于MATLAB的人脸识别系统的设计(论文12000字,外文翻译,参考程序) 摘要:本文基于MATLAB平台设计了一款简单的人脸识别系统,通过USB摄像头来采集图像,经过肤色方法进行人脸检测与定位,然 ...
- 基于MATLAB的人脸识别系统
基于MATLAB的人脸识别系统 一.课题背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除 ...
最新文章
- AI聚变:寻找2018最佳人工智能应用案例
- 多个Cisco产品报文远程拒绝服务漏洞
- php 应用程序错误,php – 应用程序中的错误处理函数
- Android进程保活招式大全
- 如何在SharePoint Server中整合其他应用系统?
- springboot优雅停机
- PHP微信SDK——Zebra-Wechat
- java util包类_java.util包下的类及常用方法
- OpenCV:回调函数
- 批处理call和start
- c语言一元二次方程代码,一元二次方程求解程序完整代码
- 03-centos 如何查看操作系统是哪个版本
- Leecode刷题热题HOT100(1)——两数之和
- 高拍仪拍照SDK开发(良田影像S300L|S500L)
- 精品微信小程序ssm电影院购票+后台管理系统|前后分离VUE
- 手工卡纸做机器人_怎么用卡纸手工制作可拨动的时钟玩教具(步骤图解)
- 从键盘输入接收多个整数,直到输入quit的时结束输入,把输入过的整数倒序排序输出。
- 程序员必备画图技能之——流程图
- 比例导引 matlab,单步龙格库塔比例导引弹道计算matlab源程序
- PAT 乙级 1044 火星数字