【缺陷识别】SVM金属表面缺陷分类与测量【含GUI Matlab源码 682期】

news2025/1/11 23:54:39

⛄一、简介(附lunwen、答辩PPT)

1 题目内容
金属板广泛应用在工业生产与生产生活的各方面。由于金属板制造过程涉及到的设备、工艺等多因素的影响,金属板表面容易出现种类较多、形态各异的缺陷,这些缺陷对金属板的耐磨性、抗腐蚀性、电磁特性及美观性都会造成不同程度的影响,最终影响金属板的电磁特性和涂镀效果。因此对于生产金属板的企业来说,表面缺陷检测是必不可少的一个工序,一方面可以通过表面缺陷检测及时检测到缺陷产品,保证所产金属板的质量,维护企业的信誉,另一方面也可以通过分析检测结果及时发现生产过程中存在的问题,并及时解决[1]。我们将依据网上提供的金属表面缺陷照片数据集为图片来源,构造相应的算法对金属表面的缺陷进行检测,识别,分类与大小测量。
1.2题目要求
金属表面缺陷识别与分类有以下具体要求:
(1)依据金属表面缺陷图片的特性,对图片进行适当的灰度变换(对比度增强与滤波处理);
(2)对金属表面缺陷图片进行全局优化阈值分割;
(3)提取二值图片区域边界坐标;
(4)对金属缺陷进行特征提取;
(5)对金属缺陷进行分类有监督训练;
(6)完成对金属缺陷类型的判断与位置大小的计算;
(7)完成金属缺陷检测的GUI设计。
2 题目分析
我们查阅相关资料了解到常见的金属表面缺陷主要有如下几种,其分别是:细裂纹(crazing),表面杂质(inclusion),斑点(patches),麻点(pitted surface),轧入氧化皮(rolled-in scale)与划痕(scratches)。其分别对应图(a)-图(f)。
在这里插入图片描述
我们只考虑其中的三种类型:表面斑点(图b),表面轧入氧化皮(图(e))与表面划痕(图(f))。
图像处理的主要步骤有:对比度增强,滤波处理,阈值分割,形态学处理,特征提取,分类训练,缺陷位置大小计算及GUI集成操作显示。

Step.1:对比度增强
由于照明方式等缘故,我们发现原始图像中的金属表面缺陷和整个金属表面背景之间的灰度差较小,灰度范围较小,因而其对比度较低,金属缺陷并不明显,这不利于图像的后期处理,我们需要使用一些方法来增加图像的对比度。常见的对比度增强方法有对数变换,幂律变换,灰度级分层,灰度归一化,对比度拉伸,直方图均衡化,直方图规定化等。考虑到不同照片的背景光强并不相同,所以恒定参数的方法(如对数变换,幂律变换,灰度级分层,对比度拉伸)并不对所有图片适用,故我们考虑使用灰度归一化和直方图均衡化。

Step.2:滤波处理
拍摄照片时,在采集过程将会不可避免的引入各种噪声,包括高斯噪声和椒盐噪声等。同时,金属表面本身就具有一定的纹理。噪声和纹理将一定程度上将金属表面缺陷掩盖,从而导致会提取中产生错误,我们需要先对图像进行滤波处理以减少后续误检测。滤波方法主要分为空域滤波与频域滤波,且二者的关系满足卷积定理。其中空域滤波主要有均值滤波,中值滤波,高斯滤波与双边滤波;频率滤波注意有傅里叶变换滤波,离散余弦变换滤波与小波变换滤波。这些算法虽然可以减少噪声,但是也会滤除部分细节信息,导致某些缺陷细节的丢失。所有我们需要寻找新的滤波算法来实现。

Step.3:阈值分割
我们得到滤波图像后,还需要进行二值化阈值处理,从而恰当提取出缺陷信息。传统的阈值分割需要确定阈值,但对于不同复杂的金属缺陷图片,我们无法对所有的图片使用相同的阈值,我们拟使用全局/局部优化阈值分割,自动确定最佳的阈值。

Step.4:形态学处理
受限于原图质量与图像阈值分割算法,二值图像中某些应该连通的区域可能被阈值分割了,例如划痕缺陷由于在某处灰度值较低而被错误分割,导致一条划痕可能会被分离为多个线段。故我们需要进行闭运算来连接临近物体。同时,图片中某些缺陷较大(例如划痕宽度较大),在后续边缘检测后,一条直线的两个边缘相距较大,直线提取算法会误将同一根线作为两根相互平行划痕。故我们还需要对缺陷进行细化操作。

Step.5: 特征提取
该部分可以使用两种方法,一种是基于通用的特征提取算法(例如HOG, LBP, Haar算法等);另一种是基于我们所要检测的特定金属缺陷进行特定的特征来直接对划痕进行分类。我将分别对这两种方法进行测试。

Step.6: 分类训练
如果我们使用了通用的特征提取算法,我们将要对其进行分类监督训练,常用的监督学习算法包括:K临近算法(KNN),朴素贝叶斯算法,决策树算法,支持向量机(svm),逻辑回归等。由于支持向量机具有优秀的泛化能力,且在小样本训练集能够得到比其他算法好的多的效果[6],我们拟选择支持向量机算法。

Step.7: 缺陷位置大小计算
我们提取到缺陷后,需要不同特征来表征缺陷的大小与位置。对与’轧入氧化皮’,我们使用’轧入氧化皮’个数来表征缺陷大小,用其质心表征其位置;对于斑点,我们使用斑点中的面积占整个图片的比例来表征缺陷大小。对于划痕,我们使用划痕的两个端点来表征缺陷位置,用划痕长度标准缺陷大小。

Step.8: GUI设计
为了方便用户使用,我们设计了GUI界面,能够选择电脑中的图片,且能在点击’图像处理’后显示提取到的缺陷信息(类型与位置大小),对于划痕长度,我们能够让用户输入相机的焦距与物距长度,从而根据几何光学知识计算出实际划痕大小,并将每个划痕的像面大小与实际大小显示出来。同时GUI能够让用户通过按键前往数据集的下载网站。

⛄二、部分源代码

//作品概述:
本代码主要功能是实现金属表面三种缺陷的检测、分类及测量,并使用GUI进行封装以便于用户使用。
该GUI可以导入电脑中的灰度图片,之后进行处理,能确定缺陷的种类,将检测到的缺陷标注在原图上,
并能够测量不同缺陷的大小(不同缺陷衡量标准不同)。

//重要函数简介:
#pushbutton1_Callback(hObject, eventdata,handles):
按键1(即’图像处理’按键)的回调函数,包含全部图像处理算法
#pushbutton2_Callback(hObject, eventdata,handles):
按键2(即’图片导入’按键)的回调函数,主要是图片的导入
#Ga(theta,num):图像的Garbor卷积核的初始化
#filterimage(a6,Gaborfiter):Garbor滤波算法
#thres(image):灰度图的最大熵阈值分割算法
#location():'轧入氧化皮’缺陷的定位及显示
#houghtran():对于’划痕’缺陷的霍夫圆检测
#lbp(varargin):网上的’局部二值模式’特征提取算法
#svm.m:独立m文件,用于所有金属缺陷照片的LBP特征提取和SVM(支持向量机)监督学习算法的训练与测试

%}

%%
function varargout = app(varargin)
%GUI页面主函数,MATLAB提供,无需修改

gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @app_OpeningFcn, …
‘gui_OutputFcn’, @app_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
%%

function app_OpeningFcn(hObject, eventdata, handles, varargin)
% GUI初始化函数
%修改设置背景
%modified by:Faust.Cao

ha=axes(‘units’,‘normalized’,‘pos’,[0 0 1 1]);
uistack(ha,‘down’);
%设置程序的背景图为back.jpg
ii=imread(‘C:\Users\lenovo\Desktop\金属表面缺陷分类与测量GUI系统\金属表面缺陷分类与测量系统\back.jpg’);
image(ii);
colormap gray
set(ha,‘handlevisibility’,‘off’,‘visible’,‘off’);

handles.output = hObject;
guidata(hObject, handles);
%%

function varargout = app_OutputFcn(hObject, eventdata, handles)
% GUI输出函数,MATLAB提供,无需修改

varargout{1} = handles.output;
%%

function pushbutton1_Callback(hObject, eventdata, handles)
% 按键1(即’图像处理’按键)的回调函数,包含全部图像处理算法

global a5;%全局变量
global svmModel;%全局变量,从svm.m文件调用
axis off;%去除axes坐标,完整显示图片
a6=a5;
a=str2double(get(handles.edit1,‘string’));%读取用户输入的焦距
b=str2double(get(handles.edit2,‘string’));%读取用户输入的物距

d=a/(b-a);%由高斯公式计算垂轴放大率

ma=max(max(a6));
mi=min(min(a6));
%对比度增强,将灰度映射为[0,255]
for ii=1:200
for jj=1:200
a6(ii,jj)=255*double(a6(ii,jj)-mi)./double(ma-mi);
end
end
%图像滤波
ab=filterimage(a6);

%图像最大熵阈值分割
ss=thres(ab);
ab1=im2bw(ab,ss/255);

[B,L]=bwboundaries(ab1);%二值图边缘坐标提取
[x,y]=size(B);
mm=0;
%寻找最大提取区域
for i=1:x
ll=length(B{i});
if ll>mm
mm=ll;
end
end
%判断是否是’轧入氧化皮’缺陷
if mm<120
set(handles.text8,‘string’,‘缺陷是轧入氧化皮’);%在text8文本框处输出缺陷类型
[xc,yc]=findcenter(B,ab);%求各提取区域的质心位置
axes(handles.axes2);%设置在axes2处显示
imshow(a6);
hold on;
plot(yc+12,xc+12,‘*’);%加上滤波时失去的边界
[dd,bb]=size(xc);
tex=[‘一共有’,num2str(dd),‘个以上的点’];
set(handles.text10,‘string’,tex);%在text10文本框处输出缺陷信息
%不是’轧入氧化皮’缺陷,继续判断
else
%原图与二值图进行掩模处理,注意二者大小不同,故要先剔除原图边缘
a6(1:12,:)=[];
a6(177:188,:)=[];
a6(:,1:12)=[];
a6(:,177:188)=[];
mu1=uint8(ab1).*a6;
mu2=uint8(1-ab1).*a6;
t0=mu1(mu1~=0);
m1=mean(t0);
t1=mu2(mu2~=0);
m2=mean(t1);
%判断缺陷是斑点还是划痕:斑点比背景暗,划痕比背景凉;将掩模与背景剩余均值比较
%也可以先提取图像的LBP(局部二值模式)特征,再使用SVM训练的结果来进行分类
if m1<m2+20
set(handles.text8,‘string’,‘缺陷是斑点’);

all=bwarea(ab1);%计算斑点面积
pro=100*all/176/176;%计算所占百分比
tex=['斑点所占面积比为',num2str(pro),'%'];
set(handles.text10,'string',tex);
axes(handles.axes2);
imshow(a6);
hold on;
%标注出斑点边界
for k = 1:length(B)
  boundary = B{k};
  plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2)
end

%缺陷是划痕
else
a6=adapthisteq(a6);%自适应直方图均衡化再次加强对比度
ss=thres(a6);
ab1=im2bw(a6,ss/255);

ab1=imclose(ab1,strel('square',6));%对二值图做闭运算,将断开部分连接
ab1=bwmorph(ab1,'thin',5);%对二值图再进行细化
ab1=edge(ab1,'Canny');%使用Canny算子边缘提取
set(handles.text8,'string','缺陷是划痕');
axes(handles.axes2);
imshow(a6);
hold on;

%往下是划痕提取的后续处理与显示
[point,ang]=houghtran( ab1 );%对处理好的二值图进行霍夫直线检测

cen=zeros(length(ang),2);
po=zeros(length(ang),4);
an=zeros(length(ang),1);
thm=mean(abs(ang));

%判断划痕是横线还是竖线(直线与y轴夹角)
if abs(thm)<45%竖线
thm=40;
else%横线
thm=60;
end

le=length(cen);
%求取每根直线的中点位置
for kk=1:le
    cen(kk,1)=(point(kk,1)+point(kk,3))/2;
    cen(kk,2)=(point(kk,2)+point(kk,4))/2;
    point(kk,5)=cen(kk,1);
    point(kk,6)=cen(kk,2);
end
%按中点对直线进行排序
if thm==40%如果是竖线,按横坐标排序
    point=sortrows(point,5);
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]顾爱华,李玟函,王正乾,殷作好,叶凯宁,陈玉.一种基于支持向量机的金属表面缺陷检测方法[J].软件工程. 2021,24(08)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

取整的四种方式

取整的四种方式一.基本认识二.四种取整方案1.零向取整2.地板取整3.向右取整4.四舍五入一.基本认识 这里按理说5/2应该为2.5啊&#xff0c;怎么为2呢&#xff1f;按照我们曾经的理解&#xff0c;其实知道符号/其实是取整。但它究竟是如何取整呢&#xff1f; 二.四种取整方案 1.…

小啊呜产品读书笔记001:《邱岳的产品手记-16》第30讲产品案例分析:Primer的扑克牌交互 第31讲 产品分析的套路(下):如何出解决方案?

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-16》第30讲产品案例分析&#xff1a;Primer的扑克牌交互 & 第31讲 产品分析的套路&#xff08;下&#xff09;&#xff1a;如何出解决方案&#xff1f;一、今日阅读计划二、泛读&知识摘录1、第30讲产品案例分析&…

猿如意中的【Visual Studio Code】工具详情介绍

猿如意中的【Visual Studio Code】工具一、 猿如意工具介绍二、 工具名称2.1 下载安装渠道2.2 如何在载猿如意中下载VS Code开发工具&#xff1f;2.3 安装流程2.4 安装完成的界面2.6 VS Code使用步骤常用快捷键使用感受一、 猿如意工具介绍 打开猿如意程序工具。猿如意下载地址…

东北大学2023分布式操作系统考试题目

1、简述分布式系统的设计目标中开放性的特点有哪些&#xff1f; 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 2、简述分布式体系结构中的层次结构&#xff0c;并举出一个层次结构的例子 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 …

20222-02-16 Linux 触摸屏测试工具tslib工具下载、编译、安装,buildroot ARM平台上实际运行

一、tslib全称英文是C library for filtering touchscreen events&#xff0c;是捕捉触摸屏事件的工具。 二、下载地址https://github.com/libts/tslib 三、tslib的代码如下 二、ARM交叉编译流程 1、可能需要安装下面的软件 sudo apt-get install automake autoconf libtool …

数据结构之链表 - (通过代码实现方法,熟悉方法的使用)

文章目录前言1. 链表1.1 什么是链表&#xff1f;1.2 链表的分类2. 链表方法的实现2.1 实现构建思想2.2 代码实现2.2.1 实现方法前的准备工作2.2.2 链表方法:display() - 打印链表, contains() - 查找链表中key值, size() - 求链表长度2.2.3 头插法-addFirst(), 尾插法-addLast(…

比较生成模型

说说GAN/VAE/Flow/Diffusion/AR~~~ 各类生成模型&#xff0c;比如自回归模型Autoregressive Model (AR)&#xff0c;生成对抗网络Generative Adversarial Network (GAN)&#xff0c;标准化流模型Normalizing Flow (Flow)&#xff0c;变分自编码器Variational Auto-Encoder (VA…

软件测试优秀的测试工具,会用三款工作效率能提升一半

我们将常用的测试工具分为10类。 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 注&#xff1a;工具排名没有任何意义。 大多数初学者&…

图解Python深拷贝和浅拷贝

Python中&#xff0c;对象的赋值&#xff0c;拷贝&#xff08;深/浅拷贝&#xff09;之间是有差异的&#xff0c;如果使用的时候不注意&#xff0c;就可能产生意外的结果。 下面本文就通过简单的例子介绍一下这些概念之间的差别。 对象赋值 直接看一段代码&#xff1a; wil…

蓝桥杯:数字三角形

目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 思路&#xff1a; AC代码&#xff08;Java&#xff09;&#xff1a; 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个…

数据结构基础--排序

一、直接插入排序 思路&#xff1a; 直接插入排序是一种简单的插入排序法 其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 直接插入排序的特性总…

二分查找算法

目录 一 算法简介 1&#xff09;算法解释 2&#xff09;前提 3&#xff09;思想 4&#xff09;分类 5&#xff09;算法模板 mid的计算的实现方法 二分法模板 求某个数的平方根: 二 算法实践 1&#xff09;问题引入 2&#xff09;问题解答 1)解法一&#xff1a;左闭…

[附源码]Node.js计算机毕业设计关山社区居民信息管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

Nacos认证绕过漏洞(CVE-2021-29441)

Nacos认证绕过漏洞&#xff08;CVE-2021-29441&#xff09; 指纹识别 titlenacos漏洞范围 nacos1.2.0版本-nacos1.4.0版本 漏洞复现 靶机ip:192.168.1.4 默认的nacos登录界面 http://192.168.1.14:8848/nacos/#/login利用如下请求包查看只有一个nacos用户 GET /nacos/v…

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

从2022年Q3开始&#xff0c;Zebec生态开始不断的迎来新的利好&#xff0c;比如以 10 亿美元的完全稀释估值筹集了 850 万美元&#xff0c;使其历史融资额超过4000万美元&#xff0c;引发ZBC通证的一波上涨。而在此后&#xff0c;Zebec 生态开启了从Solana生态的迁移&#xff0c…

Eclipse+Java+Swing+mysql实现学生宿舍管理系统

EclipseJavaSwingmysql实现学生宿舍管理系统一、系统介绍1.环境配置二、系统展示1.登录页2.学生主页面3.学生端-登记页面4.学生端-学生信息修改5.学生端-寝室信息查询6.学生端-学生信息查询7.学生端-退出登录8.管理员-主页面9.管理员-宿舍信息修改10.管理员-宿舍信息删除11.管理…

JQuery | 系统性学习 | 无知的我费曼笔记

无知的我已经复盘完成JQuery 。。。 文章目录JQuery概述入口函数特性-隐式迭代Dom和JQuery区别互相转化JQuery选择器基本和层级选择器筛选选择器后缀筛选方法筛选应用排他思想应用链式编程JQuery操作样式修改样式CSS修改类名JQuery效果基础效果显示效果隐藏效果切换效果滑动效果…

Springboot 使用redis检测浏览量,评论量,点赞量的变化并完成与mysql的交互(有具体实现,有具体需求)

目录 依赖 准备实体类与业务类 开始正题 实现一览 流程一览 具体实现 1 初始化 2 写浏览量增加的方法 3 在切面处检测浏览器变化 4 新增文章时将新的数据写入redis 5 删除文章时将数据从Redis中删除 6 书写将数据写入mysql数据库的方法 7 销毁的时候将数据写入my…

一文搞懂百万富翁问题

百万富翁问题1. 解决方案2. 协议描述3. 协议说明4. 协议举例两个百万富翁Alice和Bob想知道他们两个谁更富有&#xff0c;但他们都不想让对方及其他第三方知道自己财富的任何信息&#xff0c;这是由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《Protocols fo…

新手小白做跨境电商有哪些注意的地方?

近两年&#xff0c;受疫情刺激&#xff0c;线上电商出现前所未有的高速增长&#xff0c;中国品牌纷纷出海&#xff0c;跨境电商腾飞。此外&#xff0c;国内电商市场发展趋于平淡&#xff0c;市场需求不断萎缩&#xff0c;也让越来越多的大卖家和平台盯上了这块大蛋糕。不仅中小…