当前位置: 首页 > news >正文

C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测

一、引言

*缺陷检测策略1:Blob分析+特征分析


*Blob分析:阈值分割、开闭运算

(1) 图像预处理

  • 目的:增强目标与背景的对比度,抑制噪声。

  • 常用算子

    • threshold():通过阈值分割将图像转换为二值图像。

    • mean_image() / gauss_filter():平滑图像,减少噪声。

    • invert_image():反转图像(如目标为暗色时)。

(2) 连通区域检测

  • 目的:将二值图像中的连通像素分组为Blob。

  • 关键算子

    • connection():根据像素连通性(4邻域或8邻域)分割Blob。

    • select_shape():根据特征(面积、圆度、长宽比等)筛选目标Blob。

(3) Blob特征提取

  • 目的:量化Blob的几何和形态特征,用于后续分析。

  • 常用特征

    • 面积(Area):Blob的像素数量。

    • 质心(Row, Column):Blob的中心坐标。

    • 长宽比(Aspect Ratio):Blob的最小外接矩形的宽度与高度比。

    • 圆度(Roundness):衡量Blob接近圆形的程度。

    • 方向(Orientation):Blob的最小外接矩形的旋转角度。

(4) Blob分类与筛选

  • 目的:根据特征过滤或分类Blob。

  • 常用方法

    • 范围筛选:如 select_shape(Regions, SelectedRegions, 'area', 'and', 100, 1000) 筛选面积在100到1000之间的Blob。

    • 分类:如根据圆度区分圆形和矩形物体。

(5) 结果可视化与输出

  • 目的:显示Blob分析结果或导出数据。

  • 常用操作

    • dev_display():显示Blob的轮廓或填充区域。

    • count_obj():统计Blob数量。

    • area_center():获取Blob的面积和质心坐标。


*特征分析: 空洞面积、矩形度等

(1) 几何特征

  • 描述目标的基本形状和位置:

    • 面积(Area):目标区域的像素数量。

    • 质心(Row, Column):目标的中心坐标。

    • 最小外接矩形(Bounding Box):目标的最小外接矩形的尺寸和方向。

    • 长宽比(Aspect Ratio):外接矩形的宽度与高度比。

    • 圆度(Roundness):衡量目标接近圆形的程度(值越接近1,越接近圆形)。

    • 方向(Orientation):目标的最小外接矩形的旋转角度。

    • 凸性(Convexity):目标区域与其凸包的比值。

(2) 形态特征

  • 描述目标的复杂形状和边缘特性:

    • 紧密度(Compactness):面积与周长平方的比值(值越小,形状越复杂)。

    • 矩形度(Rectangularity):目标面积与其最小外接矩形面积的比值。

    • 孔洞数量(Holes):目标区域内部的孔洞数量。

    • 边缘长度(Contour Length):目标轮廓的像素长度。

(3) 灰度/纹理特征

  • 描述目标的灰度分布或纹理模式:

    • 灰度均值(Mean Gray Value):目标区域的平均灰度值。

    • 灰度方差(Gray Value Variance):目标区域的灰度方差。

    • 纹理特征:通过灰度共生矩阵(GLCM)提取的对比度、熵、能量等特征。

    • 梯度特征:边缘强度、梯度方向等。

(4) 高级特征

  • 基于模型或学习的特征:

    • 形状描述符:如Zernike矩、Hu矩等。

    • 深度学习特征:通过预训练的深度学习模型提取的高层特征(需结合Halcon的深度学习模块)。


*重要算子ared_heoles    rectangularity

二、分析饼干检测

需要对饼干的破损进行检测,破损会导致空洞面积大以及外围矩形度受损

*D:/Program Files/MVTec/Data/HALCON-23.05-Progress/examples/images/food
for Index := 1 to 24 by 1
    read_image (Image, 'food/hazelnut_wafer_'+Index$'.02')
    *Blob分析-对图片二值化阈值分割
    binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold)
    *Blob分析-对区域进行开运算   --先腐蚀后膨胀以去除杂质
    opening_circle (Region, RegionOpening, 8)
    *特征分析1-检测空洞的面积
    area_holes (RegionOpening, Area)
    *特征分析2-检测区域矩形度
    rectangularity (RegionOpening, Rectangularity)
    if(Area>600 or Rectangularity<0.9)
        dev_get_window (WindowHandle)
        set_display_font (WindowHandle, 16, 'mono', 'false', 'false')
        dev_disp_text ('NG', 'window', 'top', 'left', 'red', ['box','box_color'], ['true','blue'])
        stop()
    else       
        dev_get_window (WindowHandle)
        set_display_font (WindowHandle, 16, 'mono', 'false', 'false')
        dev_disp_text ('OK', 'window', 'top', 'left', 'green', ['box','box_color'], ['true','blue'])
        stop()
    endif
endfor

最终效果为:

http://www.lqws.cn/news/486559.html

相关文章:

  • 国产12537穿甲弹侵彻仿真(显式动力学)
  • DeepSeek15-揭密模型上下文协议(MCP)
  • 从零开始手写redis(15)实现自己的 HashMap
  • 大模型LoRA微调实践
  • C语言:位段
  • Python期末速成
  • 没掌握的知识点记录
  • day39/60
  • 链接脚本基础语法
  • Python打卡训练营Day56
  • 给同一个wordpress网站绑定多个域名的实现方法
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • C++智能指针编程实例
  • 消息队列:基本知识
  • 【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
  • 【RocketMQ 生产者和消费者】- 消费者的订阅关系一致性
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(3)- 消费者 ID 对负载均衡的影响
  • 7.4.1_2B树的插入删除
  • 【大模型微调】6.模型微调实测与格式转换导出
  • 微服务中分布式事务:Saga模式、TCC模式与消息队列
  • MySQL学习(1)——基础库操作
  • 【时时三省】(C语言基础)指针变量例子
  • GO 语言学习 之 helloWorld
  • 开关电源:BUCK和BOOST
  • CentOS 7.9 系统安装 Percona XtraBackup(含 xtrabackup 和 innobackupex 工具)的详细步骤
  • webpack+vite前端构建工具 - 9 webpack技巧性配置
  • 柔性PZT压电薄膜在静态力与应力实时微测量方面的应用
  • uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题
  • Linux(3)
  • [论文阅读] 软件工程 + 教学 | 软件工程项目管理课程改革:从传统教学到以学生为中心的混合式学习实践