【瑕疵检测】瓶盖瑕疵检测【含Matlab源码 730期】

news2024/12/23 6:47:25

⛄一、简介

文中将图像预处理与边缘检测相结合对瓶盖瑕疵进行检测, 先使用直方图规定化的方法对图像做出修正与增强, 再利用中值滤波的方法消除图像孤立的噪声点;Canny算子快速分辨出瓶盖瑕疵, 再利用采用Otsu阈值方法求取自适应阈值自动选择并提取瑕疵。

1 图像预处理
在特征值提取之前, 必须对图像进行预处理。在实验中使用的灰度图像。应用直方图规定化和中值滤波器对图像降噪、增强。

1.1 直方图规定化
在之前的许多研究成果中, 将直方图均衡化作为图像增强的主要方法。但是图像一般比较灰暗, 它的灰度直方图全都集中在低灰度区, 低灰度频率很高把这幅图片均衡化后, 相对较低灰度的像素会被均衡到高灰度区, 图像会产生高亮和失真。所以本文放弃直方图规则化而选用直方图规定化就是为了避免出现这种现象。直方图规定化是使原图像灰度直方图变成规定形状的直方图而对图像做修正的增强方法。它是对直方图均衡化处理的一种有效地扩展, 而直方图均衡化处理只是直方图均衡化的一个特例。用直方图规定化对图片增强。断经实验效果。
在对图像进行预处理后, 图像的对比度明显上升, 并且没有高亮和失真, 有利于特征值的提取。

1.2 图像消噪
在图像采集和直方图规定化过程中难免会产出不必要地噪声, 因此须对图像进行消噪处理。本文采用了比较普遍的中值滤波处理方法。

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术, 基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替, 让周围的像素值接近的真实值, 从而消除孤立的噪声点。方法是去某种结构的二维滑动模板, 将板内像素按照像素值的大小进行排序, 生成单调上 (或下降) 的为二维数据序列。二维中值滤波输出为:
在这里插入图片描述
2 边缘检测
观察布匹瑕疵图像可以发现, 以布匹纹理为背景的图像多呈现出屋顶状边缘, 与瑕疵的特征相近, 易引起误检、漏检[7]。另外, 由于图像采集环境或光照不均匀等因素的影响, 经常会造成瑕疵图像灰度差异很大, 为了提高瑕疵部分的对比度, 减小光照的影响, 首先将灰度范围拉伸到相同的区域, 然后再进行相应的处理[8]。传统的Canny算子中, 高、低阈值Tn, Te和σ值不是由图像边缘的特征信息决定, 而是需要人为设定[9]。这样对图像容易造成细节的丢失, 具有较差的边缘连续性, 并且一组固定的平滑参数和阈值, 对某一幅图像可能会有很好的效果, 但是如果图像纹理有变化, 就会产生不理想的结果。
文中采用Otsu阈值方法求取自适应阈值。Otsu算法是一种使类间方差最大的自动确定阈值方法。
其基本思想是把图像像素分为背景和目标两类, 通过搜索计算类间方差最大值, 得到最优阈值。
具有瑕疵的布匹图像可以视为简单的双峰值图像, 具体步骤如下:

  1. 把图像中的像素按灰度值阈值T分为两类Q1和Q2。Q1由0~S的像素组成, Q2由S+1~M组成, M为像素的灰度级数。
  2. 设Q1和Q2各自的平均灰度值为u1和u2, 图像总的平均灰度值为u;Q1和Q2占图像中的比例为w1和w2。

⛄二、部分源代码

%*初始化
clc; clear all; close all;

%*图像预处理
I=imread(‘11.jpg’);%读入标准模板图像
J=rgb2gray(I);%转化为灰度图片
subplot(241),imshow(I);title(‘原图’);%显示图片

K=imread(‘qx1.jpg’);
M=rgb2gray(K);
subplot(242),imshow(K);title(‘缺陷图’);
%*为得到更好的效果,可适当的采用图片增强,直方图均衡化,平滑,锐化等操作

%图像配准,以处理有旋转现象的图片

%***(一)差影法,去噪 最终结果变量 L

L=imabsdiff(J,M);%两张图片相减
subplot(243),imshow(L);title(‘相减后灰度图L’);

%***(二)图像增强两种方法 最终结果变量 L1 L2 使用变量L
L1=imadjust(L,[0.1 1], [0 1]);
subplot(244),imshow(L1);title(‘灰度变换增强对比度L1’);
%subplot(275),imhist(L1);title(‘直方图灰度变换增强对比度L1’);

[L2,T]=histeq(L,64);% 直方图均衡化,图像灰度扩展到0~255,但是只有64个灰度级
%subplot(276),imshow(L2);title(‘直方图均匀化L2’);
%subplot(277),imhist(L2);title(‘直方图均匀化后的直方图L2’);
%subplot(278),plot((0:255)/255,T);title(‘转移函数曲线L2’);

%***(三)图像滤波三种方法 ,中值滤波VS均值滤波VS维纳滤波,选取效果最佳的。最终结果变量 B1 B2 B3
%中值滤波
B1=medfilt2(L1,[5 5]); %中值滤波,窗口大小为5×5
%subplot(279),imshow(B1);title(‘二维中值滤波效果B1’);

%均值滤波
M4=[0 1 0; 1 0 1; 0 1 0];
M4=M4/4;% 4邻域平均滤波
B2=filter2(M4,L1);
subplot(2,4,5),imshow(B2);title(‘均值滤波B2’);

%*Wiener
[B3 noise]=wiener2(L1, [5 5]);%窗口大小为5×5
%subplot(2,7,11),imshow(B3);title(‘自适应魏纳滤波B3’);

%***(四)5种不同的梯度增强法进行图像锐化

%***(五)图像的高通滤波

%图像分割
%***(六)图像的阈值分割 中间结果变量 C1 C2 最终结果变量 C11 C12
%subplot(2,7,12),imhist(B1);title(‘B1滤波后灰度直方图’);% 观察灰度直方图,灰度1根据直方图的谷确定阈值,40处有谷,确定阈值T=140
C1=im2bw(B1,0.1/255); %im2bw函数需要将灰度值转换到[0,1]范围内
subplot(2,4,6),imshow(C1);title(‘0.1 C1阈值分割结果’);
C11=double(C1);
%figure,imhist(B1);title(‘图像的阈值分割直方图’);
%figure,imshow(C1);title(‘图像的阈值结果’);

%阈值迭代法分割
ZMax=max(max(B2));
ZMin=min(min(B2));
TK=(ZMax+ZMin)/2;
bCal=1;
iSize=size(I); %图像大小
while(bCal)
iForeground=0;
iBackground=0; %定义前景和背景数
ForegroundSum=0;
BackgroundSum=0; %定义前景和背景的灰度总和
for i=1:iSize(1)
for j=1:iSize(2)
tmp=I(i,j);
if(tmp>=TK)
iForeground=iForeground + 1;
ForegroundSum=ForegroundSum + double(tmp);
else
iBackground=iBackground + 1;
BackgroundSum=BackgroundSum + double(tmp);
end
end
end
ZO = ForegroundSum/iForeground;
ZB = BackgroundSum/iBackground; %计算前景和背景的平均值
TKTmp = uint8((ZO+ZB)/2);
if(TKTmp==TK)
bCal = 0;
else
TK = TKTmp;
end %当前阈值不再变化,说明迭代结束
end
disp(strcat(‘迭代后的阈值:’,num2str(TK)));
C2=im2bw(B2,double(TK)/255);
C12=double(C2);
subplot(2,4,7),imshow(C12);title(‘阈值迭代法分割结果C12’);

%se = strel(‘line’,11,90);
%C111=imdilate(C12,se);
%C121=imerode(C111,se);

%***(七)图像边缘检测 最终结果变量 D1 D2 D3 D4 sobel,canny,prewitt等
%D1=edge(C11,‘log’,0.003,2); % σ=2
%figure,imshow(D1);title(‘边缘检测 log σ=2’);
%D2=edge(C11,‘canny’,0.2);
%figure,imshow(D2);title(‘边缘检测 canny算子’);
%D3=edge(C121,‘log’,0.003,2); % σ=2
%figure,imshow(D3);title(‘迭代法 边缘检测 log σ=2’);
D4=edge(C12,‘canny’,0.2);
figure,imshow(D4);title(‘存在缺陷’);
imwrite(D4,‘F:\毕业设计\毕业程序设计\缺陷图片1.jpg’)%存入图片

[row, column] = size(D4);
num = 0;
for i = 1:row
for j = 1:column
if(D4(i,j)==1)
num = num +1;
rec(:,num) = [i;j];
end
end
f=imread(‘qx3.jpg’);%读入图片
%subplot(2,2,1);imshow(f)
f1=im2double(f);%将真彩图片转化为double型
I=rgb2gray(f);%将真彩图像转化为灰度图像
%subplot(2,2,2);imshow(I)
%subplot(2,2,3);imhist(I);%显示直方图
p=edge(I,‘sobel’);
%subplot(2,2,4);imshow§;
imwrite(I,‘C:\Users\lenovo\Desktop\f9ffefca4217d2bbf043243db84a4b86\瑕疵检测\灰度1.jpg’)
h4=medfilt2(p,[1,1]);%用3*3的模板进行中值滤波

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

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

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

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

相关文章

Mac 使用 brew 安装 mysql

最近需要用到 MySQL 来开发项目,所以在 Mac 配置了下 MySQL 的环境。 1、使用 brew install mysql 安装 MySQL 安装完毕后会有以下提示信息,告诉我们初始安装好后 root 账户没有密码,只需要输入 mysql -uroot就能连接运行MySQL。 那咱们输入 …

模板引擎:ftl文件生成word

wshanshi:总结记录…便于回顾… 一、什么是FreeMarker FreeMarker 是一个用 Java 语言编写的模板引擎,基于模板来生成文本输出。 FreeMarker的原理:模板数据模型输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代…

设计模式之组合模式

Composite design pattern 组合模式的概念、组合模式的结构、组合模式的优缺点、组合模式的使用场景、组合模式的实现示例、组合模式的源码分析 1、组合模式的概念 组合模式,即部分整体模式,是用于把一组相似的对象当做一个单一个的对象。组合模式依据树…

C#语言实例源码系列-身份证验证

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

【车载开发系列】UDS诊断---数据传输($0x36)

【车载开发系列】UDS诊断—数据传输($0x36) UDS诊断---数据传输($0x36)【车载开发系列】UDS诊断---数据传输($0x36)一.概念定义二.报文格式1)请求报文2)肯定响应3)否定响…

FL Studio21最新中文公测版下载及新功能介绍

FL Studio水果21现已推出,提供更快、更精确的音频编辑,coco玛奇朵升级后的DAW为用户提供了更多的内容发现和改进的界面。 Image-Line发布了FL Studio 21,称其可以实现更快、更精确的音频编辑,以及对整个DAW的更多控制。 期待已久…

【毕业设计_课程设计】基于SSM的实验室管理系统(源码+论文)

文章目录0 项目说明1 研究目的2 研究方法3 项目使用4 研究结论5 论文目录6 项目源码0 项目说明 基于SSM的实验室管理系统 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 1 研究目的 基于B/S模式的实验室管理系统,它所覆…

Linux命令行笔记-00 综述

文章目录1 Linux命令行简介1.1 Linux命令行的分类1.1.1 根据系统中作用来分类1.1.2 根据对象来分类2 Linux命令行解释器2.1 命令行解释器shell2.1.1 核心程序2.1.2 公用程序shell2.1.3 用户的默认shell2.1.4 shell如何工作2.2 Shell发展历史2.3 shell版本的差异2.3.1 C shell2.…

云原生----什么是云原生

【原文链接】云原生----什么是云原生 文章目录1. 云原生的概念2. 云原生的四要素3. 云原生的关键目标什么是云原生?这里将从云原生的概念、云原生的四要素、云原生关键目标等方面介绍。1. 云原生的概念 云原生应用时面向云而设计的应用,在使用云原生技术…

Metasploit Framework和msf框架

Metasploit Framework ● MSF默认集成与kali linux之中 ● 使用postgresql数据库存储数据 ○ 早期版本需要先启动数据库再启动msf MSF架构 Rex ● 基本功能库,用于完成日常基本任务,无需人工手动编码实现 ● 处理socket连接访问、协议应答&#xff08…

洛谷千题详解 | P1020 [NOIP1999 普及组] 导弹拦截【C++语言】

博主主页:Yu仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C源码: C源码2: -------------------------------------------------------------------------------------------------…

【(C语言)数据结构奋斗100天】栈和队列

前言 🏠个人主页:泡泡牛奶 🌵系列专栏:[C语言] 数据结构奋斗100天 本期所介绍的是栈和队列,那么什么是栈呢,什么是队列呢?在知道答案之前,请大家思考一下下列问题: 你如何…

【问答篇】Java 线程篇 面试题(二)

每天进步一点~ (ps: 文章内容及图片出处来自本人公众号~) 01、问:请谈谈你对线程声明周期的6种状态的认识和理解 答:很多地方说线程有5种状态,但实际上是6种状态:NEW、RUNNABLE, BLOCKED、 WAITING、TIMED_WAITING、TERMINATED; 新创建&a…

(附源码)Springboot掌上博客系统 毕业设计 063131

Springboot掌上博客系统的设计与实现 摘 要 掌上博客系统是当今网络的热点,博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。 本文课…

微服务框架 SpringCloud微服务架构 服务异步通讯 53 MQ 集群 53.1 集群分类 53.2 普通集群

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯53 MQ 集群53.1 集群分类53.1.1 集群分类53.2 普通集群53.2.1 普通集群53.2.2 搭建普通 集群5…

2022 FIFA World Cup Final

我希望梅西能够捧杯,因为我怕再看见那个眼神!写在总决赛开始前 12/18/2022 22:04 在一个周日的晚上收到了邹总发的活动信,我记得还在CSDN问答区在回答问题,突然看见私信的红点,其实看到活动(活动链接点击这…

万字长文,彻底搞懂分布式缓存Redis

最近系统性地整理了Redis的知识点,在此和大家做些分享,希望能帮助到大家。 为什么Redis这么受欢迎 时代产物 随着互联网规模的不断扩张,越来越多的企业在技术架构上会采用分布式架构,而且对于系统的吞吐量以及响应速率的要求也…

非零基础自学Golang 第11章 文件操作 11.2 文件基本操作 11.2.3 文件写入 11.2.4 删除文件

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.2 文件基本操作11.2.3 文件写入11.2.4 删除文件第11章 文件操作 11.2 文件基本操作 11.2.3 文件写入 与之前的文件读取相比,向文件写入内容也有两个接口,分别为Write和WriteAt。 fu…

数据管理篇之元数据

第12章 元数据 1.元数据概述 元数据定义 元数据是关于数据的数据。按照用途可以分为两类: 技术元数据 业务元数据 阿里巴巴常见的技术元数据: 分布式计算系统存储元数据 分布式计算系统运行元数据 数据开发平台中数据同步,计算任务、任务调…

【编译原理】第四章部分课后题答案

第 四 章 课 后 习 题 T 4.1 根据表4.1的语法制导定义,为输入表达式5∗(4∗32)5*(4*32)5∗(4∗32)构造注释分析树。 T 4.2 构造表达式((a∗b)(c))((a*b)(c))((a∗b)(c))的分析树和语法树: (a)根据表4.3的语法制导定义。 &…