【HALCON 实战入门】15. Blob分析
欢迎订阅【HALCON 实战入门】专栏1. HALCON 简介与安装5. 相机接入与图像采集10. 阈值分割与目标提取11. 区域处理与分析12. 边缘检测与轮廓提取13. 轮廓分析与几何特征14. 形态学处理15. Blob分析16. 图像匹配【HALCON 实战入门】15. Blob分析一、什么是 Blob 分析二、Blob 分析流程三、综合案例毛刺检测四、综合示例提取圆形焊点五、总结在上一篇【14. 形态学处理】中我们已经通过腐蚀、膨胀及开闭运算等方法对分割得到的区域进行了优化与修正解决了噪声、孔洞、断裂及粘连等问题使图像中的区域更加完整、稳定实现了从“初始分割”到“结构优化”的过渡。本文将在此基础上进一步引入 Blob 分析方法重点对优化后的区域进行连通域分解与特征筛选从中提取出符合条件的目标实现从“区域表示”到“目标提取”的转变为后续的检测与测量提供基础。一、什么是 Blob 分析在完成图像分割与区域优化之后图像中通常已经得到若干较为完整的区域但这些区域仍然只是“像素集合”并未明确对应具体目标。因此需要进一步对这些区域进行分析与筛选从中提取出真正感兴趣的目标这一过程称为 Blob 分析Blob Analysis。在图像处理中BlobBinary Large Object通常指一个连通区域即由相邻像素构成的独立区域。每一个 Blob 可以看作一个潜在的目标候选例如一个零件、一个缺陷或一个焊点等。Blob 分析的核心思想是将图像中的区域分解为多个连通区域并对每个区域进行特征描述与筛选从而实现目标的提取与识别。Blob 分析就是对“连通区域”的分析与筛选过程。在实际应用中Blob 分析通常用于目标检测与提取缺陷识别如毛刺、孔洞等目标计数形状与尺寸筛选形态学操作主要用于优化区域结构而 Blob 分析则是在此基础上对区域进行“目标级”的分析与筛选实现从“区域”到“目标”的转化。二、Blob 分析流程Blob 分析从图像中逐步提取出符合条件的目标区域本质上是通过 “分解 → 描述 → 筛选” 实现从区域到目标的提取过程。典型的 Blob 分析流程如下获取图像 → 区域分割threshold → 连通域提取connection → 区域特征计算 → 区域筛选select_shape → 目标结果各个步骤之间具有明确的先后关系其作用如下区域分割通过阈值分割或其他方法从图像中提取前景区域连通域提取将区域分解为多个独立的连通区域每个区域对应一个 Blob区域特征计算获取每个 Blob 的面积、尺寸、位置等特征信息区域筛选根据特征条件筛选出符合要求的目标区域。Blob 分析通过一系列有序步骤将图像中的区域逐步转化为目标结果是实现目标检测与筛选的核心流程。三、综合案例毛刺检测在工业检测中零件边界上的毛刺fin是一类常见缺陷。毛刺通常表现为沿目标边界出现的小凸起结构其尺寸较小、形状不规则但会影响产品质量因此需要对其进行检测。在 HALCON 官方示例fin.hdev参见 “\MVTec\HALCON-24.11-Progress-Steady\examples\hdevelop\Applications\Measuring-2D\fin.hdev”中该任务的目标是检测塑料零件外边界上的毛刺即在整体轮廓中识别局部异常的小区域。基本思路毛刺检测可以通过 Blob 分析实现其核心在于通过对区域结构的处理将边界上的异常部分转化为独立的小区域再通过特征筛选将其提取出来。处理流程典型的处理流程如下图像 → 区域分割 → 区域平滑闭运算 → 差集提取异常区域 → 连通域分析 → 特征筛选 → 毛刺区域该流程首先获得目标区域然后通过闭运算构造平滑的参考区域再通过差集提取两者之间的差异部分最后利用连通域分析与特征筛选提取出毛刺区域。参考例程简化版对官方例程进行简单修改只处理一张测试图片并显示检测毛刺的面积与中心信息。*fin.hdev毛刺检测单图版dev_update_window(off)*只读取第1张图像read_image(Fin,fin1)*获取图像尺寸并打开窗口get_image_size(Fin,Width,Height)dev_close_window()dev_open_window(0,0,Width,Height,black,WindowID)set_display_font(WindowID,14,mono,true,false)*显示原图dev_display(Fin)*Step1自动阈值分割提取亮背景区域binary_threshold(Fin,Background,max_separability,light,UsedThreshold)*显示分割结果蓝色边界dev_set_color(blue)dev_set_draw(margin)dev_set_line_width(4)dev_display(Background)stop()*Step2闭运算获得平滑背景区域closing_circle(Background,ClosedBackground,250)*显示闭运算结果绿色边界dev_set_color(green)dev_display(ClosedBackground)stop()*Step3差集运算提取毛刺候选区域difference(ClosedBackground,Background,RegionDifference)*开运算去除小干扰得到最终毛刺区域opening_rectangle1(RegionDifference,FinRegion,5,5)*计算毛刺区域面积与中心area_center(FinRegion,FinArea,Row,Column)*显示毛刺检测结果红色边界dev_display(Fin)dev_set_color(red)dev_display(FinRegion)Text:AreaFinArea$.2f\n RowRow$.1f\n ColColumn$.1fdev_disp_text(Text,image,Row20,Column20,red,box,true)stop()*将3个阶段的区域结果转换为图像region_to_bin(Background,ImgBackground,255,0,Width,Height)region_to_bin(ClosedBackground,ImgClosed,255,0,Width,Height)region_to_bin(FinRegion,ImgFin,255,0,Width,Height)*拼接显示阈值分割|闭运算结果|毛刺检测结果concat_obj(ImgBackground,ImgClosed,Tmp)concat_obj(Tmp,ImgFin,ImagesAll)tile_images(ImagesAll,TiledImage,3,horizontal)dev_display(TiledImage)程序说明该例程演示了单张图像的毛刺检测流程主要包括以下三个阶段1自动阈值分割使用 binary_threshold 自动提取亮背景区域得到初始分割结果2闭运算平滑背景使用 closing_circle 对背景区域进行平滑获得理想背景区域3差集提取毛刺通过 difference 计算理想背景与原始背景之间的差异再用 opening_rectangle1 去除小干扰得到最终毛刺区域。最后将这三个阶段的处理结果转换为图像并拼接显示便于观察各处理步骤之间的差异。运行结果运行结果如下。左图为阈值分割得到的原始区域中图为闭运算后的平滑区域右图为最终检测到的毛刺区域。通过对比可以看出毛刺主要集中在边界的不规则凸起位置。项目小结本示例通过“区域分割 形态学平滑 差集提取 Blob 分析”的流程实现了对边界毛刺的检测。其核心在于通过闭运算构造平滑参考区域并利用差集提取原始区域与参考区域之间的局部差异从而将边界上的异常凸起转化为独立区域再结合连通域分析与面积筛选实现目标提取。整个方法无需依赖复杂模型具有实现简单、鲁棒性较强的特点适用于尺寸较小、形状不规则的边界缺陷检测。在实际应用中该思路可推广至多种边界类缺陷如毛刺、飞边、缺口等的检测任务是 Blob 分析在缺陷检测中的典型应用形式。四、综合示例提取圆形焊点在电子封装检测中焊点bonding balls是连接芯片与外部电路的重要结构其尺寸与形状直接影响连接质量。因此需要对焊点进行提取与测量以实现完整性检测与质量评估。在 HALCON 官方示例ball_seq.hdev参见 “\MVTec\HALCON-24.11-Progress-Steady\examples\hdevelop\Applications\Measuring-2D\fin.hdev”中该任务的目标是检测焊点并测量其直径。该过程通过区域分割与 Blob 分析相结合实现对圆形目标的提取与几何特征计算。基本思路该示例采用分步处理策略首先定位芯片区域ROI然后在该区域内提取焊点对应的目标区域最后通过形状特征筛选与几何拟合获得焊点位置与尺寸。处理流程典型的处理流程如下图像 → 提取亮区域芯片 → ROI 限定reduce_domain → 提取暗区域焊线/焊点 → 空洞填充与去噪 → 开运算平滑 → 连通域提取 → 圆形特征筛选 → 排序与几何测量该流程通过逐步缩小处理范围与引入形状约束实现对目标区域的稳定提取。参考例程简化版对官方例程进行简单修改只处理一张测试图片。*ball.hdev:Inspection of Ball Bonding**----------------------------------------*Step0初始化窗口与图像显示*----------------------------------------dev_close_window()dev_open_window(0,0,728,512,black,WindowID)set_display_font(WindowID,14,mono,true,false)*读取图像read_image(Bond,die/die_03)*显示原图dev_display(Bond)stop()*----------------------------------------*Step1提取芯片区域ROI*----------------------------------------*阈值分割提取亮区域100-255threshold(Bond,Bright,100,255)*将亮区域转换为最小外接矩形得到芯片区域 Dieshape_trans(Bright,Die,rectangle2)*显示提取的芯片矩形区域dev_set_color(green)dev_display(Die)stop()*----------------------------------------*Step2提取焊线与焊点区域*----------------------------------------*缩减图像定义域仅保留芯片Die区域内的图像数据reduce_domain(Bond,Die,DieGrey)*阈值分割提取芯片内焊线、焊球区域threshold(DieGrey,Wires,0,50)*填充孔洞填充区域内面积1~100的细小孔洞fill_up_shape(Wires,WiresFilled,area,1,100)*显示填充后的焊线/焊点区域dev_display(Bond)dev_set_color(red)dev_display(WiresFilled)stop()*----------------------------------------*Step3形态学处理*----------------------------------------*圆形开运算去除细小噪点、分离粘连结构仅保留焊球opening_circle(WiresFilled,Balls,15.5)*显示处理后的纯焊球区域dev_set_color(green)dev_display(Balls)stop()*----------------------------------------*Step4Blob 分析与筛选*----------------------------------------*连通域分析将焊球区域分割为独立的单个目标connection(Balls,SingleBalls)*形状筛选根据圆度筛选保留接近圆形的焊球区域select_shape(SingleBalls,IntermediateBalls,circularity,and,0.85,1.0)*区域排序沿列方向排列焊球sort_region(IntermediateBalls,FinalBalls,first_point,true,column)*显示筛选排序后的合格焊球区域dev_display(Bond)dev_set_colored(12)dev_display(FinalBalls)stop()*----------------------------------------*Step5几何测量*----------------------------------------*计算每个焊球的最小外接圆输出圆心和半径smallest_circle(FinalBalls,Row,Column,Radius)*计算焊球的几何参数 NumBalls:|Radius|Diameter:2*Radius meanDiameter:sum(Diameter)/NumBalls mimDiameter:min(Diameter)*绘制焊球的最小外接圆dev_display(Bond)disp_circle(WindowID,Row,Column,Radius)*遍历显示焊球的几何参数fori:1to NumBalls by1DiameterStr:D: Diameter[i-1]$.1fdisp_message(WindowID,DiameterStr,image,\ Row[i-1]1.2*Radius[i-1],\max([Column[i-1]-60,0]),\yellow,false)endforstop()dev_close_window()程序说明该程序实现了对芯片图像中圆形焊点的提取与直径测量整体流程可分为五个阶段初始化与图像读取首先创建显示窗口并读取图像将原始图像显示出来用于后续各处理阶段的对比观察。提取芯片区域ROI通过阈值分割提取图像中的亮区域并利用 shape_trans 将其转换为最小外接矩形从而获得芯片区域ROI。该步骤的作用是限定后续处理范围减少背景干扰。提取焊线与焊点区域在芯片区域内通过阈值分割提取灰度较低的区域焊线与焊点并利用 fill_up_shape 填充小孔洞使区域更加完整为后续形态学处理提供稳定输入。形态学处理对提取的区域进行圆形开运算去除细小噪点并分离粘连结构从而保留形状较为规则的焊球区域。Blob 分析与筛选首先通过连通域分析将区域分解为多个独立目标然后利用圆度特征筛选出接近圆形的区域最后按照列方向进行排序得到规则排列的焊球集合。几何测量对筛选后的焊球区域进行最小外接圆计算得到每个焊球的中心位置与半径并进一步计算其直径、平均直径和最小直径同时将结果标注在图像上实现检测与测量的一体化表达。运行结果程序运行过程中各阶段结果依次显示便于观察处理流程的变化初始图像显示芯片及焊点的原始分布情况芯片区域提取后处理范围被限定在有效区域内焊线与焊点区域提取后可以观察到目标区域的初步分割结果经开运算处理后仅保留规则的焊球区域噪声与干扰结构被有效去除Blob 分析与筛选后得到排列整齐的焊球目标最终结果中每个焊球均以圆形轮廓标出并在其附近显示对应直径值。从结果可以看出焊球位置与尺寸被准确提取各目标之间分离清晰测量结果具有良好的稳定性与一致性。项目小结本示例通过“ROI 限定 形态学处理 Blob 分析 几何测量”的流程实现了对圆形焊点的稳定提取与尺寸计算。整个方法的关键在于首先通过区域分割与 ROI 限定减少干扰其次利用形态学操作优化区域结构再通过 Blob 分析提取目标最后结合几何拟合完成精确测量。该流程充分体现了传统机器视觉中“分割—优化—筛选—测量”的典型处理模式。该方法适用于具有规则形状如圆形、矩形等的目标检测与测量任务在电子封装检测、工业尺寸测量等场景中具有广泛应用价值。五、总结本文围绕 Blob 分析系统介绍了从连通区域提取到目标筛选与测量的完整流程包括 Blob 的基本概念、典型分析流程以及毛刺检测与圆形焊点提取两个综合示例展示了“区域分解—特征描述—筛选提取—结果测量”的实际处理过程。Blob 分析的核心不在于某一个算子而在于通过连通域分析与特征约束将图像中的区域转化为具有明确意义的目标。实际应用中通常根据任务需求选择合适的特征进行筛选面积特征用于提取小缺陷目标形状特征用于识别规则结构从而实现稳定、可控的目标提取。通过本章内容可以看到从“区域优化”到“目标提取”的完整过渡过程Blob 分析在其中起到了关键作用是传统机器视觉中最常用、最基础的目标检测方法之一。在后续内容中可进一步结合模板匹配或深度学习方法实现更加复杂场景下的目标识别与检测。【本节完】版权声明转发必须注明原文链接【HALCON 实战入门】15. Blob分析 (https://youcans.blog.csdn.net/article/details/160413952)Copyright by youcansqq.comCrated2026-04
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2572995.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!