Halcon缺陷检测之(Blob+差分法模板匹配+差分法)

2023-10-30 02:10

本文主要是介绍Halcon缺陷检测之(Blob+差分法模板匹配+差分法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、缺陷检测概述

  缺陷检测是机器视觉重要的应用方向之一,由于在制造产品的过程中,表面缺陷的产生往往是不可避免的,故机器视觉的缺陷检测有较大的市场需求。熟练掌握缺陷检测是视觉工程师的必要技能。
  在工业视觉检测当中,常见的工业视觉检测表面缺陷有划伤、划痕、辊印、凹坑、粗糙、波纹等外观缺陷,此外还有像一些非金属产品表面的夹杂、破损、污点,以及纸张表面的色差、压痕等。
  相比于人工检测,基于机器视觉的检测有如下优点:
①能24小时不间断工作
②检测速度快,准确率高
③检测精度高
④不受外界因素的干扰,检测结果稳定
⑤非接触性检测

二、缺陷检测方法

个人总结如下:
①基于颜色的Blob法+差分
②模板匹配+差分
③基于轮廓的边缘提取
④频域+空间结合
⑤机器学习的方法
⑥光度立体法

三、模板匹配+差分法

主要检测物品损坏,凸起,破洞,缺失等。先定位模板区域后,求得模板区域的坐标,创建物品的形状模板create_shape_model,注意把模板的旋转角度改为rad(0)和rad(360)。匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置小一点,否则匹配不到模板。并求得匹配项的坐标。关键的一步,将模板区域仿射变换到匹配成功的区域。由于差集运算是在相同的区域内作用的,所以必须把模板区域转换到匹配项的区域。之后求差集,根据差集部分的面积判断该物品是否有缺陷。
图片集链接:https://pan.baidu.com/s/1x1dCrW17GM0d7v9DZPpQZA
提取码:df5u
这是完整形状的模板:
在这里插入图片描述
目标检测204这三个字符可能出现的缺陷
检测结果如下,蓝色区域代表的是缺陷:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Halcon代码如下:

*CSDN->三元荧
*读入标准模板图片(图片名字为standard.bmp)
read_image (Image, 'D:/halcon用到的照片/standard.bmp')
*设置图像窗口
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
*选中模板区域
gen_rectangle1 (ROI_0, 201, 244, 385, 526)
reduce_domain (Image, ROI_0, ImageReduced)
*选中模板区域数字
threshold (ImageReduced, Regions, 106, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 163.12, 10000)
union1 (SelectedRegions, RegionUnion)
*求模板区域坐标
area_center (RegionUnion, Areastandard, Rowstandard, Columnstandard)
*扣取模板区域图像,创建模板需要的是图像,不是区域
reduce_domain (ImageReduced, RegionUnion, ImageReduced1)
*创建模板
create_shape_model (ImageReduced1, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*读入图像路径,循环遍历每个图像
list_files ('D:/halcon用到的照片/204', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])*模板匹配find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)*判断匹配是否成功if (|Score| > 0)*搜寻当前图像匹配成功的区域并求它的坐标和角度dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)*将模板区域仿射变换到匹配成功的区域vector_angle_to_rigid (Rowstandard, Columnstandard, 0, Row, Column, Angle, HomMat2D)affine_trans_region (RegionUnion, RegionAffineTrans, HomMat2D, 'nearest_neighbor')dev_display (Image)*blob方法提取当前图像的数字,并变成一个联通域threshold (Image, Regions1, 106, 255)connection (Regions1, ConnectedRegions1)select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 163.12, 10000) union1 (SelectedRegions1, RegionUnion1)*仿射变换后的模板区域与当前区域求差集,即缺陷部分difference (RegionAffineTrans, RegionUnion1, RegionDifference)*开运算去除很小点的噪声opening_circle (RegionDifference, RegionOpening, 3)*求缺陷的面积area_center (RegionOpening, Area, Row1, Column1)*缺陷面积大于阈值,说明有缺陷if(Area>100)*设置缺陷区域的颜色dev_set_color ('blue')*显示缺陷区域dev_display (RegionOpening)*显示NGset_display_font (WindowHandle, 50, 'mono', 'true', 'false')disp_message (WindowHandle,'NG', 'window', 15, 40, 'yellow', 'false')*缺陷面积小于阈值,说明没缺陷else*显示OKset_display_font (WindowHandle, 50, 'mono', 'true', 'false')disp_message (WindowHandle,'OK', 'window', 15, 40, 'green', 'false')endif*没有匹配到模板,直接NG       elseset_display_font (WindowHandle, 50, 'mono', 'true', 'false')disp_message (WindowHandle,'NG', 'window', 15, 40, 'yellow', 'false')endif
endfor

四、Blob+差分法

Halcon官网自带挺多例子,这里以Blob分析的fin.hdev为例。
算子binary_threshold(Image : Region : Method, LightDark : UsedThreshold)使用二进制阈值分割图像,主要看LightDark参数。如果LightDark=‘light’,所有灰度值大于或等于的像素都被选中;如果LightDark=‘dark’,则选择灰度值小于的所有像素。比如fin.hdev目的提取背景区域,而背景偏向白色,故LightDark设为’light’即将背景区域提取出来。
完整区域的图像:
在这里插入图片描述
在这里插入图片描述

* fin.hdev: Detection of a fin
* 
dev_update_window ('off')
read_image (Fins, 'fin' + [1:3])
get_image_size (Fins, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
for I := 1 to 3 by 1select_obj (Fins, Fin, I)dev_display (Fin)*使用二进制阈值分割图像,选中背景binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)dev_set_color ('blue')dev_set_draw ('margin')dev_set_line_width (4)dev_display (Background)disp_continue_message (WindowID, 'black', 'true')stop ()*膨胀背景区域,此时凸起会被覆盖closing_circle (Background, ClosedBackground, 250)dev_set_color ('green')dev_display (ClosedBackground)disp_continue_message (WindowID, 'black', 'true')stop ()*将膨胀后的背景区域与未膨胀的区域求差集,即缺陷区域difference (ClosedBackground, Background, RegionDifference)*去除小噪声opening_rectangle1 (RegionDifference, FinRegion, 5, 5)dev_display (Fin)dev_set_color ('red')dev_display (FinRegion)area_center (FinRegion, FinArea, Row, Column)if (I < 3)disp_continue_message (WindowID, 'black', 'true')stop ()endif
endfor

五、交集差集补集

如图,画两个圆:
在这里插入图片描述
①两个圆的交集,算子intersection,求相同部分:
在这里插入图片描述
②两个圆的差集,算子difference,求不相同部分:
红色圆-绿色圆:
在这里插入图片描述
绿色圆-红色圆:
在这里插入图片描述
③补集求的是区域之外的区域,算子complement,求两个圆的补集:
在这里插入图片描述

点个赞,点个关注呀‎|•’-’•)و✧

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_45617323/article/details/111578347

这篇关于Halcon缺陷检测之(Blob+差分法模板匹配+差分法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/304902

相关文章

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�