news 2026/6/7 13:18:01

Halcon缺陷检测技术详解(含 Halcon 示例)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Halcon缺陷检测技术详解(含 Halcon 示例)

缺陷检测技术详解(含 Halcon 示例)

一、缺陷检测概述

缺陷检测是通过图像分析技术识别产品表面或内部的异常区域(如划痕、凹陷、污渍、裂纹等),广泛应用于工业制造(电子、汽车、食品包装等)、医疗影像等领域。核心目标是:快速、准确地区分合格产品与存在缺陷的产品,并定位缺陷位置、判断缺陷类型。

缺陷检测的一般流程:

  1. 图像采集(工业相机、显微镜等);

  2. 预处理(去噪、增强、校正);

  3. 感兴趣区域(ROI)提取;

  4. 缺陷检测与分割;

  5. 缺陷特征分析(大小、形状、灰度等);

  6. 判定与分类(合格 / 不合格,缺陷类型)。

二、缺陷检测的关键技术与方法

1. 基于灰度差异的检测

适用于缺陷与背景灰度值差异明显的场景(如白色表面的黑点、金属表面的划痕)。

原理:通过灰度阈值、灰度差分析或滤波提取灰度异常区域。

2. 基于形态学的检测

适用于缺陷表现为形状异常的场景(如孔洞、凸起、边缘缺损)。

原理:利用形态学操作(腐蚀、膨胀、开运算、闭运算)突出缺陷的形状特征。

3. 基于模板匹配的检测

适用于有标准模板的场景(如零件缺失、装配错误)。

原理:将待检测图像与标准模板对比,通过差异区域定位缺陷。

4. 基于边缘与轮廓的检测

适用于缺陷导致边缘不连续或轮廓异常的场景(如裂纹、边缘毛刺)。

原理:提取图像边缘,通过边缘完整性或轮廓特征(如曲率、长度)识别缺陷。

5. 基于频域的检测

适用于周期性纹理背景中的缺陷(如布料、电路板的纹理缺陷)。

原理:通过傅里叶变换过滤背景纹理,突出缺陷的高频分量。

三、Halcon 缺陷检测核心算子

算子类别关键算子功能描述
预处理mean_imagegauss_filter平滑去噪
emphasizescale_image增强对比度、灰度缩放
阈值分割thresholddyn_threshold固定阈值、动态阈值分割(适应光照变化)
形态学操作erosiondilation腐蚀(去除小区域)、膨胀(连接断裂区域)
openingclosing开运算(去噪点)、闭运算(填孔洞)
差异分析sub_image计算两幅图像的灰度差(模板对比)
边缘检测edges_sub_pixcanny_edge提取亚像素级边缘、Canny 边缘检测
区域特征分析select_shapearea_center根据面积、形状等筛选缺陷区域
频域处理fft_imagerft2傅里叶变换、快速傅里叶变换

四、Halcon 缺陷检测实例

实例 1:金属表面划痕检测(基于灰度差异与形态学)

场景:检测金属表面的深色划痕(划痕灰度低于正常区域)。

dev_update_off () * 1. 读取图像 read_image (MetalImage, 'metal_surface.png') dev_close_window () get_image_size (MetalImage, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_display (MetalImage) disp_continue_message (WindowHandle, 'black', 'true') stop () ​ * 2. 预处理:去噪与增强 mean_image (MetalImage, MeanImage, 5, 5) // 均值滤波去噪 emphasize (MeanImage, EmphasizeImage, 10, 10, 1) // 增强边缘对比度 ​ * 3. 阈值分割:提取低灰度区域(划痕) threshold (EmphasizeImage, DarkRegions, 0, 80) // 假设划痕灰度≤80 ​ * 4. 形态学处理:去除噪声点,保留连续划痕 opening_circle (DarkRegions, OpenRegions, 3) // 开运算(半径3)去小噪点 closing_circle (OpenRegions, DefectRegions, 2) // 闭运算连接断裂划痕 ​ * 5. 筛选缺陷:排除过小区域(误检) select_shape (DefectRegions, Scratches, 'area', 'and', 50, 10000) // 面积≥50像素 ​ * 6. 显示结果 dev_display (MetalImage) dev_set_color ('red') dev_display (Scratches) disp_message (WindowHandle, '检测到 ' + |Scratches| + ' 处划痕', 'window', 10, 10, 'red', 'true') ​ stop ()

实例 2:瓶盖缺陷检测(基于模板匹配)

场景:通过标准瓶盖模板与待检测瓶盖的差异定位缺陷(如缺口、污渍)。

dev_update_off () * 1. 读取标准模板与待检测图像 read_image (TemplateImage, 'cap_template.png') // 无缺陷的标准瓶盖 read_image (TestImage, 'cap_test.png') // 待检测瓶盖 dev_close_window () get_image_size (TemplateImage, Width, Height) dev_open_window (0, 0, Width*2, Height, 'black', WindowHandle) ​ * 2. 预处理:转为灰度图并归一化 rgb1_to_gray (TemplateImage, TemplateGray) rgb1_to_gray (TestImage, TestGray) scale_image (TemplateGray, TemplateScaled, 1, 0) scale_image (TestGray, TestScaled, 1, 0) ​ * 3. 模板匹配:定位瓶盖位置(确保两幅图像对齐) create_ncc_model (TemplateGray, 'auto', 0, 0, 'auto', 'use_polarity', ModelID) find_ncc_model (TestGray, ModelID, 0, 0, 0.7, 1, 0.5, 'true', 0, Row, Col, Angle, Score) clear_ncc_model (ModelID) ​ * 4. 图像对齐:将待检测图像与模板对齐(消除位置偏差) vector_angle_to_rigid (0, 0, 0, Row, Col, Angle, HomMat2D) affine_trans_image (TestScaled, AlignedTest, HomMat2D, 'constant', 'false') ​ * 5. 差异分析:计算模板与待检测图像的灰度差 sub_image (TemplateScaled, AlignedTest, DiffImage, 1, 128) // 灰度差图像 threshold (DiffImage, DiffRegions, 30, 255) // 提取差异明显的区域(阈值30) ​ * 6. 筛选缺陷:排除微小差异(噪声) opening_rectangle1 (DiffRegions, DefectRegions, 3, 3) select_shape (DefectRegions, Defects, 'area', 'and', 100, 10000) ​ * 7. 显示结果 dev_display (TemplateScaled) dev_set_window (WindowHandle) dev_display (AlignedTest) dev_set_color ('red') dev_display (Defects) disp_message (WindowHandle, '模板', 'window', 10, 10, 'green', 'true') disp_message (WindowHandle, '待检测(缺陷:' + |Defects| + ')', 'window', 10, Width+10, 'red', 'true') ​ stop ()

实例 3:电路板焊点缺陷检测(基于边缘分析)

场景:通过焊点边缘的完整性判断是否存在虚焊(边缘不连续)或漏焊。

dev_update_off () * 1. 读取图像 read_image (PCBImage, 'pcb_solder.png') dev_close_window () get_image_size (PCBImage, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) ​ * 2. 预处理:增强对比度,提取焊点区域 threshold (PCBImage, SolderRegions, 150, 255) // 焊点为高灰度区域 connection (SolderRegions, SingleSolders) // 分割单个焊点 ​ * 3. 边缘提取:获取焊点边缘 edges_sub_pix (PCBImage, Edges, 'canny', 1, 20, 40) // Canny边缘检测(亚像素级) segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2) // 分割轮廓为线和圆 ​ * 4. 分析边缘:筛选边缘不完整的焊点(缺陷) gen_empty_obj (DefectSolders) for i := 0 to |SingleSolders| - 1 by 1 select_obj (SingleSolders, Solder, i+1) * 提取焊点内的边缘 reduce_domain (PCBImage, Solder, SolderROI) edges_sub_pix (SolderROI, SolderEdges, 'canny', 1, 20, 40) * 计算边缘长度(正常焊点边缘应连续且长度达标) length_xld (SolderEdges, Length) sum_tuple (Length, TotalLength) * 若边缘总长度低于阈值,判定为缺陷 if (TotalLength < 200) // 阈值根据正常焊点设定 concat_obj (DefectSolders, Solder, DefectSolders) endif endfor ​ * 5. 显示结果 dev_display (PCBImage) dev_set_color ('green') dev_display (SingleSolders) dev_set_color ('red') dev_display (DefectSolders) disp_message (WindowHandle, '缺陷焊点:' + |DefectSolders|, 'window', 10, 10, 'red', 'true') ​ stop ()

五、缺陷检测的优化技巧

  1. 图像采集优化:确保光照均匀(避免反光、阴影),选择合适分辨率(缺陷尺寸≥2 像素);

  2. 预处理关键:

    • 噪声处理:根据噪声类型选择滤波(高斯滤波去高斯噪声,中值滤波去椒盐噪声);

    • 对比度增强:对低对比度图像用histogram_equalizationlocal_std_dev增强;

  3. 阈值自适应:对光照不均的场景,用dyn_threshold(动态阈值)替代固定阈值;

  4. 缺陷筛选:通过select_shape筛选面积、圆形度、长宽比等特征,排除误检(如灰尘);

  5. 模板更新:对于批量生产中的细微差异,定期更新模板以适应产品一致性变化。

六、总结

缺陷检测的核心是突出缺陷与正常区域的差异,根据缺陷类型选择合适的检测方法(灰度差异、形态学、模板匹配等)。Halcon 提供了丰富的算子支持从预处理到缺陷分析的全流程,通过实例中的模板可快速搭建检测系统,并结合优化技巧提升检测精度与鲁棒性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 8:24:12

为什么Qwen3-VL-8B是轻量级多模态入门首选?

为什么Qwen3-VL-8B是轻量级多模态入门首选&#xff1f; 在电商商品页自动生成图文描述、客服系统“拍照提问”即时响应、教育平台自动解析习题图片的背后&#xff0c;隐藏着一个共同的技术核心&#xff1a;多模态大模型。这些能够“看图说话”的AI系统&#xff0c;正从实验室走…

作者头像 李华
网站建设 2026/6/7 18:20:34

计算机Java毕设实战-基于springboot古风生活体验交流网站的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/8 3:50:05

花5分钟判断,你的Jmeter技能是大佬还是小白!

jmeter 这个工具既可以做接口的功能测试&#xff0c;也可以做自动化测试&#xff0c;还可以做性能测试&#xff0c;其主要用途就是用于性能测试。但是&#xff0c;有些公司和个人&#xff0c;就想用 jmeter 来做接口自动化测试。 你有没有想过呢&#xff1f; 下面我就给大家讲…

作者头像 李华
网站建设 2026/6/5 16:28:49

Transformer模型压缩技术在Qwen-Image上的应用前景

Transformer模型压缩技术在Qwen-Image上的应用前景 在生成式AI迅速渗透内容创作领域的今天&#xff0c;图像生成模型正面临一场关键的“落地挑战”&#xff1a;如何在不牺牲质量的前提下&#xff0c;把动辄上百GB显存需求、延迟高达数秒的庞然大物&#xff0c;塞进一张消费级显…

作者头像 李华
网站建设 2026/6/7 17:53:05

HuggingFace镜像网站上线Qwen-Image,支持高分辨率图像生成

HuggingFace镜像网站上线Qwen-Image&#xff0c;支持高分辨率图像生成 在AIGC&#xff08;生成式人工智能&#xff09;浪潮席卷内容创作领域的今天&#xff0c;一个现实问题始终困扰着设计师和开发者&#xff1a;如何让AI真正理解复杂、细腻的中文语义&#xff0c;并输出可用于…

作者头像 李华
网站建设 2026/6/7 21:41:52

Stm32_2:蜂鸣器、按键、继电器

1.蜂鸣器1.蜂鸣器的种类蜂鸣器是一种常用的电子发声元器件&#xff0c;采用直流电压供电。广泛应用于计算机&#xff0c;打印机&#xff0c;报警器&#xff0c;电子玩具&#xff0c;汽车电子设备灯等产品中常见的蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。2.蜂鸣器的控制方式有源蜂…

作者头像 李华