Halcon 中mura缺陷检测
目录
文章目录
前言
最近一直在研究高纹理图像中Mura类型缺陷的检测,此类缺陷检测属于表面检测的范畴,以下是对Halcon官方例子中一个相似案例的分享学习。
一、Mura是什么?
- Mura概述
Mura类型的缺陷,一般用于在屏幕显示行业中,描述在屏幕显示的测试过程中,形成的团块状坏点区域,在表面检测领域常常用来表述皮革,布料,半导体磨砂面等表面团块且与纹理背景有差异的团块缺陷类型。
2. 检测难点
Mura类型缺陷,最大的难点在于所处的背景过于复杂,使采用普通的阈值+形态学方法在此处常常失灵,还有就是Mura缺陷的灰度范围和背景中复杂纹理处于同一灰阶范围,难以通过常规手段分割提取。但是对应一些背景较浅的情况 mean_image + 动态阈值的方法也可以起到意料之外的效果。
二、Halcon官方detect_mura_defects_texture.hdev例子
1.例子描述
* This example shows how to detect mura defects
* in highly textured images
这个例子展示了如果在高纹理的图像中检测mura类型缺陷
*********************
2.读入第一张图像展示
代码如下(示例):
dev_update_off ()
Path := 'lcd/mura_defects_texture_'
read_image (Image, Path + '01')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
该处使用的url网络请求的数据。
3.核心代码部分
- 读入图像并三通道分离
read_image (Image, Path + F$'.2i')decompose3 (Image, R, G, B)
2. 提取B通道Mura图像的亮度背景图像
estimate_background_illumination (B, ImageFFT1) // 本地方法
get_image_size (Image, Width, Height)
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
gen_gauss_filter (ImageGauss, 50, 50, 0, 'n', 'rft', Width, Height)
convol_fft (ImageFFT, ImageGauss, ImageConvol)
rft_generic (ImageConvol, IlluminationImage, 'from_freq', 'none', 'byte', Width)
return ()
使用高斯滤波器和B通过图像进行卷积,高斯滤波器的核SigmaSize=50 对比 SigmaSize=5 高斯滤波器 , 效果如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
通过对比左上角和左下角的白色区域,可以看出二者的区别,白色区域越大说明在接下来的卷积处理中原图可以通过的图像内容越多,高斯核越大说明通过的内容越少,高斯模糊的效果越明显。
不同核与原B通道图卷积后从rft中返回的效果对比:
![](/assets/blank.gif)
![](/assets/blank.gif)
另外需要注意 从频域转回时域图像的时候
rft_generic (ImageConvol, IlluminationImage, 'from_freq', 'none', 'byte', Width)
转回的图像有多种类型,常见的byte/ real/uint2等类型,这个类型的选择对后续的处理和缺陷特征的凸显有着重要的作用,同样的缺陷在不同的图像上的凸显效果差异很大。
3. 图像做差(跟获取的背景图像做差)凸显缺陷特征
sub_image (B, ImageFFT1, ImageSub, 2, 100)
median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored')
![](/assets/blank.gif)
4.缺陷特征提取
此时mura缺陷已经从背景的纹理中凸显出来,此时一般时可以通过阈值分割,面积筛选等方式进行缺陷筛选的,当然也可以再次利用灰度增强处理方式进一步缺陷的对比度
![](/assets/blank.gif)
这里Halcon官方为了提高分割筛选的通用性采用了,分水岭+灰度共生矩阵的方式提取缺陷特征
watersheds_threshold (ImageMedian, Basins, 20)* Dark patches corresponding to defects have a very low energy.cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
这里的理论依据我觉得有两个方面:1- 如官方所说Mura缺陷处的缺陷处灰阶均匀性较好,能量较低
2-图像的高频背景被平滑的非常均衡,但是同时拉开了缺陷与背景的灰阶,使分水岭算法分割的效果还算可以
![](/assets/blank.gif)
三 总结
例子展示了如何在高纹理背景下,检测混入其中的mrua缺陷,总结方法分为以下常用几步:
通过rft获取背景图像----》》原图与背景图像差分 凸显缺陷---》》中值滤波模糊背景增强缺陷---》》区域分割,利用灰度共生矩阵提取缺陷与背景差异信息进行筛选(一般是 能量&熵)
Halcon 中mura缺陷检测相关推荐
- 基于Halcon学习的缺陷检测【四】光伏电池片的指纹以及划痕检测【第一种方法】
此例子主要是为了把光伏电池片的指纹以及划痕标注出来. 总代码: *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png') *清除窗口 dev_cle ...
- 基于Halcon学习的缺陷检测【五】光伏电池片的指纹以及划痕检测【第二种方法】
此例子主要是为了把光伏电池片的指纹以及划痕标注出来. 总代码: *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png')*清除窗口 dev_cle ...
- halcon 图像差分_halcon纹理分析例子detect_mura_defects_texture.hdev 高纹理图像中的mura缺陷检测...
目标:实现高纹理图像中缺陷的检测(黑色). 思路为: 1.对彩色图像进行R G B分解,选取B作为后续图像. 2. 生成背景模板,将图像傅里叶变换到频域中,通过高斯滤波,然后傅里叶反变换回来,得到的图 ...
- halcon 圆环类缺陷检测的一种方法(极坐标变换法)
目录 简介 极坐标变换 定义 原理 Halcon中的极坐标变换 1.polar_trans_image_ext算子用法与参数剖析 2.polar_trans_region_inv算子用法与参数剖析 圆 ...
- 基于Halcon学习的缺陷检测【一】detect_mura_blur.hdev
这个例子展示了如何在模糊图像中检测mura缺陷 总代码: *频域+差分+空间域 dev_close_window () dev_update_off () Path := 'lcd/mura_defe ...
- 基于halcon的木板缺陷检测算法代码-基于halcon的区域增长、大津分割算法、直方图均衡化
关键词:Halcon:图像处理:视觉检测:木板缺陷检测:特征提取 对于木条.木板等木制品表观缺陷检测,是机器视觉检测在工业中的一个主要应用,而在这其中节子的提取和检测又是一项重要的品控检测指标,本文以 ...
- Mura缺陷检测【1】:svd
//背景抑制,SVD方法,耗时非常严重350*350--900ms,535*535--70s void SVD_test(Mat & srcImg, Mat & resultMat) ...
- 【iPhone】缺陷检测机器视觉在制造业缺陷检测的应用情况
机器视觉是通过计算机来模拟人类视觉功能,以让机器获得相关视觉信息和加以理解.可分为"视"和"觉"两部分原理,"视"是将外界信息通过成像来显示 ...
- 基于U-Net+残差网络的语义分割缺陷检测
一.介绍 基于深度学习的缺陷检测主要集中在场景识别.object detection等方法,近年来,推出了一系列优秀的语义分割模型,比如SegNet.FCN.U-Net等.语义分割模型被广泛的应用到场 ...
最新文章
- 【机器学习入门】(10) 特征工程:特征抽取,字典特征抽取、文本特征抽取,附完整python代码
- python开发的比较知名的游戏-游戏排行榜-Python实现
- 关于Python的人工智能这么火,一大波交叉学科和技术应用正在靠近
- azkaban mysql参数_azkaban参数详解
- 短期记忆容量必需有限
- 【ES6(2015)】String
- php怎么将网页变成图片格式,php如何实现图片格式转换
- tf.truncated_normal与tf.random_normal的区别
- Android 模拟器连接异常:Unable to connect to ADB server
- linux系统安装本地r包,linux环境下安装R包DESeq2的报错以及解决方法
- SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;
- 10月24日学习内容整理:自增约束条件,外键,修改表,复制表
- 兴业银行实时跨行转入功能、免除手续费及网点排队
- pil对图像加透明 python_分享一个骚操作,用 Python 来 P 图
- 同济大学 线性代数 第六版 pdf_线性代数同济第六版第六章课后习题答案!
- 系统蓝屏日志DMP文件分析工具WinDbg及教程
- 网上一些《算法(第四版)》习题答案链接
- Grads保姆级教学——小乌龟考试看这一篇就够了
- 如何禁止树莓派屏幕休眠
- 【2021】15天通过阿里云云计算架构师认证考试(ACE)- 经验分享
热门文章
- oracle 用户下建表进行加密(redact)实验
- python爬虫,将天气预报可视化
- 基于JAVA共享单车管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 加速器问题——浏览器无法上网但微信QQ能上网(已解决)
- 设计模式的征途—16.访问者(Visitor)模式
- 关于考研报名照片,这样拍好看还容易通过
- ‘struct lws_context_creation_info’ has no member named ‘ws_ping_pong_interval’
- 小程序如何跳转公众号文章
- 计算机二级正确ip地址,计算机二级题中的ip地址是什么
- 来聊聊HTML邮件吧!