- 摘要: 本文描述如何使用Halcon实现传统算法的缺陷检测实现
-
前言
-
Halcon 广泛应用于工业自动化、医学成像、科研等领域。它提供了强大的图像处理和分析工具,帮助用户实现高精度的视觉检测、测量、识别和定位任务。
-
本文描述学习Halcon的过程,Halcon包含了很多算子单独学习某个算子是比较枯燥的,结合案例实操可以增加对此学习的兴趣。下面是halcon案例中的网状产品表面破损缺陷检测的案例。
-
(一)实现步骤
- 1、使用算子read_image读取图像。
- 2、使用算子mean_image预处理图像
- 3、使用算子dyn_threshold分割缺陷。
- 4、使用算子connection 分解区域。
- 5、使用算子select_shape 筛选区域。
- 6、显示结果。
-
(二)算子描述
-
read_image( : Image ,FileName)
- Image:输出图像。
- FileName :文件名|路径。
-
mean_image(Image, ImageMean ,MaskWidth, MaskHeight)
- Image:原始输入图像。
- ImageMean:输出图像(滤波后)。
- MaskWidth:滤波器掩模的宽度。
- MaskHeight:滤波器掩模的高度。
-
dyn_threshold(OrigImage, ThresholdImage , RegionDynThresh,Offset, LightDark)
- OrigImage:原始输入图像。
- ThresholdImage:经过平滑处理的阈值图像(通常由mean_image或gauss_image生成)。
- RegionDynThresh:输出的分割区域。
- Offset:阈值偏移量(灰度值差异的容限)。
- LightDark:指定要提取的是比背景暗的区域。
-
connection(Region , ConnectedRegions)
- Region: 输入的复合区域(可能包含多个不连通的区域)。
- ConnectedRegions: 输出一组独立连通区域。
-
select_shape(Regions=, SelectedRegions,Features, Operation, Min, Max )
- Regions:输入 待筛选的输入区域(通常来自 connection 的输出)。
- SelectedRegions:输出 符合筛选条件的输出区域。
- Features:输入用于筛选的形状特征(单个或多个特征组合)。
- Operation:输入逻辑操作符:'and'、'or' 等。
- Min 输入特征值下限。
- Max 输入特征值上限。
-
-
-
运行环境
- 操作系统:Windows 11
- Halcon:HALCON 20.11
-
一、预览
-
二、代码
dev_update_window ('off') FileName:='plastic_mesh/plastic_mesh_01' *读取图像 read_image (Image, 'plastic_mesh/plastic_mesh_01') *关闭窗口 dev_close_window () *获取图像大小 get_image_size (Image, Width, Height) *打开窗口 dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle) *设置字体信息:字体大小为16,字体为mono,粗体,斜体 set_display_font (WindowHandle, 18, 'mono', 'true', 'false') *设置区域的填充方式 dev_set_draw ('margin') *设置线宽度 dev_set_line_width (3) *循环检测缺陷 for Index := 1 to 14 by 1 **$'02':将Index 格式化为 2位数字,不足补零。 FileName :='plastic_mesh/plastic_mesh_' + Index$'02' *读取图像 read_image (Image, FileName) *对输入图像进行均值滤波(平滑处理),输出平滑图像 mean_image (Image, ImageMean, 49, 49) *局部阈值分割图像 dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'dark') *对分割后的区域进行连通处理:将连通区域分解为独立区域。 connection (RegionDynThresh, ConnectedRegions) *过滤缺陷:筛选面积过大的区域为错误区域 select_shape (ConnectedRegions, ErrorRegions, 'area', 'and', 500, 99999) *统计出缺陷的数目 count_obj (ErrorRegions, NumErrors) *显示图像 dev_display (Image) *设置缺陷对象的显示颜色 dev_set_color ('red') *显示缺陷网孔 dev_display (ErrorRegions) if (NumErrors > 0) *显示产品NG disp_message (WindowHandle, 'Mesh NG:Defect Number: = '+NumErrors , 'window', 24, 12, 'red', 'true') else *显示产品OK disp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'green', 'true') endif stop() endfor
-
最后
- 如果你觉得这篇文章对你有帮助,不妨点个赞再走呗!
- 如有疑问,欢迎评论区留言讨论!
- 也可以关注微信公众号 [编程笔记in] ,一起交流学习!