halcon 缺陷检测 瓶口检测(边缘缺口)

请添加图片描述

图片资源

链接:https://pan.baidu.com/s/1V0dnHdkCAz8C2_zRS5-FVA
提取码:0c5c

处理流程

1、筛选出环形区域
2、计算外边缘区域(高斯导数梯度)
3、减法补集 获取边缘缺口区域
4、显示结果

完整代码

dev_update_off ()
dev_clear_window ()

for Index := 1 to 2 by 1
    **** 1、读取图片 *********************
    read_image (Image, './img/'+ (Index) $'02')
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width/2 , Height/2, 'black', WindowHandle)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    dev_display (Image)
    
    **** 2、二值化筛选出环形区域 *********************
    threshold (Image, Region, 100, 255)
    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, CircularRegions, \
                  ['area', 'circularity'], 'and', \
                  [20000, 0.6], [9999999, 1.0])
    
    **** 3、计算外边缘区域*********************
    * 聚焦环形区域
    reduce_domain (Image, CircularRegions, ImageReduced)
    * 高斯滤导数处理 1.5:sigma 'gradient' : 梯度边缘
    derivate_gauss (ImageReduced, DerivGauss, 1.5, 'gradient')
    * 二值化
    threshold (DerivGauss, GaussRegion, 9, 50)
    * 连通域筛选
    connection (GaussRegion, ConnectedGaussRegions)
    select_shape_std (ConnectedGaussRegions, EdgeSelectedStd, 'max_area', 70)
    
    **** 4、填充边缘区域 计算缺陷区域*********************
    * 填充边缘区域
    fill_up (EdgeSelectedStd, RegionFillUp)
    * 填充区域 - 边缘区域 = 分割缺陷区域(包含)
    difference (RegionFillUp, EdgeSelectedStd, RegionDifference)
    * 连通域筛选 缺陷区域
    connection (RegionDifference, DiffRegions)
    select_shape (DiffRegions, DefectRegions, 'area', 'and', 50, 2000)
    
    **** 5、显示缺陷*********************
    dev_display (Image)
*     dev_set_draw ('margin')
    dev_display (DefectRegions)
    
    if (Index < 2)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor

在这里插入图片描述


版权声明:本文为weixin_45875105原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。