当前位置: 首页 > 工具软件 > Hazelnut > 使用案例 >

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测(完整与否,是否破碎)

养焱
2023-12-01

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测(完整与否,是否破碎)

示例程序源码(加注释)

  • 读入图片
    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’)

  • 显示线宽设置为3
    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 - 使用二进制阈值分割图像
    • 函数原型:binary_threshold(Image:Region:Method,LightDark:UsedThreshold)
    • Image:输入图像;Region:输出区域;Method:分割方法;
    • LightDark:选取亮区还是暗区;UsedThreshold:返回分割时使用的阈值
    • https://www.cnblogs.com/baiyy-daheng/p/8931931.html
      方法一:扫描图像的每个像素值,值小于127的将像素值设为0(黑色),
      值大于等于127的像素值设为255(白色)。该方法的好处是计算量少速度快。
      方法二:计算像素的平均值K,扫描图像的每个像素值如像素值大于K像素值设为255(白色),
      值小于等于K像素值设为0(黑色)。
      方法三:使用直方图方法来寻找二值化阈值,直方图是图像的重要特质,
      直方图方法选择二值化阈值主要是发现图像的两个最高的峰,
      然后在阈值取值在两个峰之间的峰谷最低处。

      binary_threshold (Image, Foreground, ‘smooth_histo’, ‘light’, UsedThreshold)
    • 对选取区域使用圆形区域进行开运算
      opening_circle (Foreground, FinalRegion, 8.5)
    • area_holes - 计算区域的孔面积。
      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’, -1, -1, ‘’, ‘false’)
      if (Index < 24)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor

处理思路

这个例子的思路非常简单,二值化求取饼干区域,对饼干求取孔洞面积与矩形度,通过这两个参数实现饼干的筛选。一个新的阈值分割方法binary_threshold 。学习到了求取孔洞面积的直接方法area_holes 。求取矩形度算子rectangularity 。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

 类似资料: