Halcon基础-缺陷检测常用方法(未完待补充-12.24)

目录

1、blob分析+特征

1.1、整体思路

1.2、案例分析

1.2.1、检测饼干的完整性(check_hazelnut_wafers.hdev)

1.2.2、检查产品毛刺缺陷 (fin.dhev)

2、模板匹配(定位)+差分

2.1、基于组件的模板匹配

2.2、基于灰度的模板匹配

2.2.1、方案一:匹配灰度图片中的区域案例(exhaustive_match.hdev)

 2.2.2、方案二:匹配灰度图片中的区域案例

2.3、基于相关性匹配

2.2.1、方案一:相关性匹配区域案例(find_ncc_model_exposure.hdev)

2.4、基于变化模型匹配

2.5、基于线性变形匹配

2.6、基于比例缩放变形匹配

2.7、基于局部变形匹配

2.8、基于描述匹配

2.9、各向异性的基于形状的匹配

2.10、基于形状匹配

3、光度立体

4、特征训练

5、测量拟合

6、频域+空间域结合

7、深度学习


1、blob分析+特征

1.1、整体思路

  • 采集图像,将图像灰度化
  • 使用二值化进行图像分割

1.2、案例分析

1.2.1、检测饼干的完整性(check_hazelnut_wafers.hdev)

该例程用到了Blob分析+特征,将一个或多个图像进行初步处理,去找到明显的不同。进而鉴定出有缺陷的物体。

该例程检测缺陷的整体思路:

  1. read_image—— 读取待检测图片
  2. binary_threshold —— 获取自动化阈值分割后的区域
  3. opening_circle—— 进行开运算处理(腐蚀+膨胀;断开细小的地方,所以叫开),使孔洞相对平滑
  4.  area_holes—— 计算孔洞面积
  5. rectangularity—— 计算区域的矩形度
  6. 根据面积或矩形度判断是否存在缺陷
read_image (Image, 'food/hazelnut_wafer_01')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_update_window ('off')
dev_set_line_width (3)
dev_set_draw ('margin')
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
* 
for Index := 1 to 24 by 1
    read_image (Image, 'food/hazelnut_wafer_' + Index$'.02')
    /*自动全局阈值分割*/
    binary_threshold (Image, Foreground, 'smooth_histo', 'light', UsedThreshold)
    *开运算是先腐蚀再膨胀。腐蚀之后,相对尖锐的被消除了,但是大致保持以前的形状;再经过膨胀运算后,就变得平滑了。
    opening_circle (Foreground, FinalRegion, 8.5)
    *计算区域中孔洞的面积
    area_holes (FinalRegion, AreaHoles)
    *再次计算区域的矩形相似度
    rectangularity (FinalRegion, Rectangularity)
    dev_display (Image)
    *这里判断存在空洞面积大于300或者矩形度小于0.92的为不合格
    if (AreaHoles > 300 or Rectangularity < 0.92)
        dev_set_color ('red')
        Text := 'Not OK'
    else
        dev_set_color ('forest green')
        Text := 'OK'
    endif
    dev_display (FinalRegion)
    disp_message (WindowHandle, Text, 'window', 12, 12, '', 'false')
    if (Index < 24)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor

 

相关算子分析

  • read_image—— 读取待检测图片
read_image( : Image : FileName : )
说明: 读取不同文件格式的图像。
参数:
Image:输出图像名称;
FileName:输入图像文件名称(适用多种图像文件格式);
  • binary_threshold —— 获取二进制阈值分割后的区域
binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
说明:获取二进制阈值分割后的区域
参数:
Image:需要进行阈值的图像
Region:处理后的区域
Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方图平滑)
LightDark:提取的是黑色部分还是白色部分
UsedThreshold:自动阈值使用的阈值值
  • opening_circle(进行开运算处理,使孔洞相对平滑)

注:腐蚀+膨胀,断开细小的地方,所以叫开;膨胀+腐蚀;链接细小的地方,所以叫闭

opening_circle(Region : RegionOpening : Radius : )
说明:用于消除小区域(小于圆形结构元素)并平滑区域
参数表
Region(输入参数):要打开的区域
RegionOpening(输出参数):打开的区域
Radius(输入参数):圆形结构元素的半径
    默认值:3.5
    建议的值: 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 12.5, 15.5, 19.5, 25.5, 33.5, 45.5, 60.5, 110.5
    取值范围: (lin)0.5 ≤ Radius ≤ 511.5
    最小增量:1.0
    建议的增量:1.0
  •  area_holes(计算孔洞面积)
area_holes(Regions : : : Area)
说明:如果一个区域有多个孔,则为所有孔的面积之和返回
参数
Regions (输入参数):要检查的区域
Area(输出参数):区域的孔的面积
  • rectangularity(计算区域的矩形度)
rectangularity(Regions: : : Rectangularity)
说明:
参数:
Regions(输入参数):要检查的区域。
Rectangularity(输出参数):输入区域的矩形度,值越接近于1,越接近完美矩形,否则偏离。
    断言:0 <= Rectangularity && Rectangularity <= 1.0

1.2.2、检查产品毛刺缺陷 (fin.dhev)

该例程用到了Blob分析+特征+差分思想,将一个或多个图像进行初步处理,将处理后的区域与原始区域相减。进而鉴定出有缺陷的物体。

该例程检测缺陷的整体思路:

  1. read_image—— 读取待检测图片
  2. binary_threshold —— 获取二进制阈值分割后的区域
  3. closing_circle—— 闭运算处理(膨胀+腐蚀;链接细小的地方,所以叫闭)
  4. difference—— 区域相减,获取差异的图像区域(差分思想)
  5.  opening_rectangle1 —— 开运算(腐蚀+膨胀)这里使用开运算主要是清除上面闭运算增加的部分毛点
* Blob+特征+差分
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 1
    select_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_
<think>好的,我现在需要回答用户关于Halcon缺陷检测的问题。首先,我得回忆一下Halcon的基本信息。Halcon是由MVTec公司开发的机器视觉软件库,广泛应用于工业检测,包括缺陷检测。用户可能想知道它的原理、常用方法以及应用场景。 接下来,我需要确定用户的需求。他们可能是在工业制造领域工作,想了解如何用Halcon进行质量控制。或者是学生或研究人员,希望学习相关技术。因此,回答需要涵盖基础和实际应用,结构清晰,逐步解释。 首先,应该介绍Halcon的基本情况,比如它的开发商、用途和特点。然后,缺陷检测的常见应用场景,比如表面检测、OCR、3D检测等,这样用户能明白适用范围。 接下来,关键部分:Halcon缺陷检测方法。这里需要分点说明,比如传统算法中的图像处理技术,如阈值分割、边缘检测、形态学操作,以及更高级的方法如Blob分析、模板匹配、频域分析。然后提到深度学习方法,因为Halcon也支持深度学习,比如卷积神经网络的应用。这部分需要具体举例,比如使用哪个函数或工具,但可能不需要太深入的技术细节,保持易懂。 然后,可能需要说明Halcon的优势,比如高效算法、丰富的工具库、支持深度学习和跨平台。这些点能帮助用户理解为什么选择Halcon。 接下来,应用流程,从图像采集到结果输出,分步骤说明。这部分需要逻辑清晰,让用户了解整个检测过程是如何进行的。 最后,实际案例,比如金属表面划痕检测,具体步骤和使用的函数,如read_image、threshold、connection等,这样用户能有一个具体的印象。不过,用户可能不需要代码细节,但简要提及函数名可以展示Halcon的实际操作。 需要注意使用中文,数学公式用$...$格式,比如阈值处理中的阈值公式。独立公式用$$...$$,但可能在这个回答中用到的数学公式不多,但如果有的话要正确应用。例如,形态学操作中的膨胀、腐蚀,可能需要用数学表达式,但不确定是否需要,所以可能可以省略,或者简单提及。 需要确保LaTeX语法正确,比如积分符号或方程的正确格式。但缺陷检测可能更多涉及图像处理算法,数学公式可能较少。不过像频域分析可能会涉及傅里叶变换,这时候需要用$$...$$,例如傅里叶变换的公式。但用户的问题可能不需要深入到数学细节,所以可能需要权衡,保持回答的实用性。 最后,检查结构是否清晰,是否覆盖了用户的需求,是否有不准确的地方。比如,是否混淆了HalconHALCON的拼写?正确应该是HALCON,但用户写的是halcon,可能在回答中使用正确的大小写。另外,确认提到的函数和工具是否存在,比如read_image、threshold确实是Halcon中的函数。 可能还需要补充一些实际应用的注意事项,比如光照条件、图像采集质量对检测结果的影响,或者Halcon在处理不同材料时的调整方法。但用户的问题可能更关注基础介绍,所以可以简要提到这些因素,但不过于深入。 总结回答的结构应该是: 1. Halcon简介 2. 应用场景 3. 常用方法(传统和深度学习) 4. 优势 5. 典型流程 6. 实例 7. 注意事项 这样用户能逐步了解Halcon缺陷检测中的作用和使用方法。同时,保持语言简洁,避免技术术语过多,必要时做解释,比如Blob分析是什么,形态学操作的作用等。但可能用户已有一定基础,所以可以适当使用术语,但简要说明。 现在需要将这些思考整理成结构化的回答,确保符合用户的要求,使用中文,正确格式的数学表达式,分步骤说明,并且真实可靠。需要检查是否有错误的信息,比如Halcon是否真的支持深度学习,答案是肯定的,所以这部分正确。同时,确保提到的函数名称正确,比如使用emphasize函数进行增强,或者使用其他函数如inspect_blister_package,可能实际例子中的函数需要准确,比如read_image是正确的。 最后,确保回答没有使用Markdown格式,段落清晰,使用自然的口语化中文,但不过于随意,保持专业性。</think>以下是关于**Halcon缺陷检测**的详细介绍,结构清晰,逐步展开: --- ### 1. **Halcon简介** Halcon(全称**HALCON**)是由德国MVTec公司开发的一款**高性能机器视觉软件库**,广泛应用于工业自动化中的图像处理与缺陷检测。其核心优势包括: - **高效算法库**:涵盖传统图像处理与深度学习技术。 - **跨平台支持**:兼容Windows、Linux及嵌入式系统。 - **灵活接口**:支持C++、C#、Python等语言集成。 --- ### 2. **缺陷检测应用场景** Halcon常用于以下领域的缺陷检测- **表面检测**:划痕、凹坑、污渍等(如金属、玻璃、塑料)。 - **印刷检测**:字符缺失、颜色偏差、错位。 - **电子元件检测**:焊点缺陷、引脚变形。 - **3D检测**:体积测量、形状偏差。 --- ### 3. **Halcon缺陷检测的核心方法** #### **3.1 传统图像处理方法** - **图像预处理** - **阈值分割**:通过设定灰度阈值分离目标区域,例如: $$ \text{二值化} = \begin{cases} 1 & \text{if } I(x,y) \geq T \\ 0 & \text{otherwise} \end{cases} $$ - **形态学操作**:腐蚀、膨胀等去除噪声或连接区域。 - **频域分析**:傅里叶变换检测周期性纹理缺陷- **特征提取** - **Blob分析**:提取区域的面积、形状、灰度等特征。 - **边缘检测**:使用Sobel、Canny算子定位缺陷边缘。 - **模板匹配** 通过`find_shape_model`函数匹配标准模板,定位偏差区域。 #### **3.2 深度学习方法** Halcon支持基于深度学习缺陷检测- **分类模型**:判断图像是否有缺陷- **语义分割**:精确标记缺陷像素位置(如UNet结构)。 - **异常检测**:无需缺陷样本,通过正常样本训练自动识别异常(如MVTec ANomaly Detection, **MVTec AD**)。 --- ### 4. **Halcon缺陷检测流程** 典型流程分为以下步骤: 1. **图像采集**:使用工业相机或线阵相机获取高分辨率图像。 2. **预处理**:校正光照不均、去噪(如`emphasize`函数增强对比度)。 3. **缺陷定位**:通过阈值、边缘或深度学习定位可疑区域。 4. **特征分析**:计算缺陷的面积、长度、位置等参数。 5. **分类决策**:根据阈值或分类模型判定是否合格。 6. **结果输出**:触发分拣装置或生成检测报告。 --- ### 5. **实际案例:金属表面划痕检测** ```python * 读取图像 read_image(Image, 'metal_surface.jpg') * 预处理:高斯滤波去噪 gauss_filter(Image, SmoothedImage, 5) * 阈值分割提取暗区域(划痕通常较暗) threshold(SmoothedImage, DarkRegions, 0, 100) * 形态学开运算去除小噪声 opening_circle(DarkRegions, CleanRegions, 3.5) * 连通域分析,筛选长宽比大的区域(划痕呈线状) connection(CleanRegions, ConnectedRegions) select_shape(ConnectedRegions, Scratches, ['rectangularity', 'area'], 'and', [0.1, 500], [0.5, 5000]) * 输出结果 count_obj(Scratches, NumScratches) if (NumScratches > 0) disp_message('检测到划痕!') endif ``` --- ### 6. **Halcon的优势与挑战** - **优势**: - 算法执行速度快,适合实时检测- 提供丰富的工具包(如OCR、3D视觉)。 - **挑战**: - 复杂缺陷需定制化算法设计。 - 光照、材质变化可能影响检测稳定性。 --- ### 7. **注意事项** - **光照控制**:使用均匀光源减少反光干扰。 - **标定与校准**:定期校正相机与镜头参数。 - **数据多样性**:深度学习模型需覆盖不同缺陷类型。 --- 通过结合传统算法与深度学习,**Halcon**能够高效解决工业场景中的复杂缺陷检测问题,显著提升生产质量与自动化水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值