halcon缺陷检测学习3暗斑检测detect_mura_defects_texture

  • 这个例子展示了如何检测高纹理图像中的色差不均匀缺陷
  • 实现高纹理图像中缺陷的检测(黑色)。
  • 缺陷的特征是暗斑。因此,通过从原始图像中减去估计的背景光照,缺陷变得更加明显
    dev_close_window ()
  • 初始化
    dev_update_off ()

Path := ‘lcd/mura_defects_texture_’
*图片文件路径
read_image (Image, Path + ‘01’)
get_image_size (Image, Width, Height)
dev_open_window (0, 0, 640, 480, ‘black’, WindowHandle)
*图形窗口左上角的位置(0, 0)限制窗口宽度与高度(640, 480)新窗口的背景颜色(‘black’)新图形窗口句柄(WindowHandle)
set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
*设置字体。窗口句柄(WindowHandle)字体大小(14)字体类型(’mono’)是否黑体(’ture’)是否倾斜(’false’)
dev_set_draw (‘margin’)
*定义区域填充模式为(’边缘’或者’Fill’)
dev_set_line_width (3)
*设置输出区域轮廓线的线宽
dev_set_color (‘red’)
*设置轮廓线颜色红色
for f := 1 to 2 by 1
*共两个图像
read_image (Image, Path + f$’.2i’)
decompose3 (Image, R, G, B)
*对彩色图像进行R G B分解,选取B作为后续图像。decompose3(MultiChannelImage : Image1, Image2, Image3 : : )

*1 缺陷的特征是暗斑。因此,通过从原始图像中减去估计的背景光照,缺陷变得更加明显
estimate_background_illumination (B, ImageFFT1)
*生成背景模板(输入图片,背景模板)
sub_image (B, ImageFFT1, ImageSub, 2, 100)
*图像差分,增强两幅图像的差异。ImageFFT1-B=ImageSub。g':= (g1 - g2) * 倍数(2)+ 增加差值(100)

*2 中值滤波平滑了纹理,简化了接下来的分割和最终的缺陷检测
*中值滤波来抑制小斑点或细线
median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored')
*带有遮罩的中值滤波器。输入图片(ImageSub)中值图像(ImageMedian)筛选遮罩类型(包围)
*遮罩的半径(9)建议值:1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 19, 25, 31, 39, 47, 59
*边界处理(镜像)建议值:“镜像”、“循环”、“继续”,0、30、60、90、120、150、180、210、240、255
watersheds_threshold (ImageMedian, Basins, 20)
*3使用阈值从图像中分割并提取多个分水岭盆地轮廓。待分割图像(ImageMedian)暗色盆地(Basins)分水岭阈值(20): 0, 5, 10, 20, 30, 50

* 4根据能量提取缺陷。暗斑对应的区域能量非常低
cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
*灰度共生矩阵推导各区域其灰度值特征。待检查区域(Basins)对应的灰度值(ImageMedian)待区分灰度值个数(6)矩阵计算的方向(0)
*灰度值的能量 灰度值的相关性 灰度值的局部同质性 灰度值的对比度
tuple_find (sgn(Energy - 0.05), -1, Indices)
 * 判断能量是否大于0.05,通过sgn函数将大于0.05的置1,小于的置-1
*返回一个元组在另一个元组中所有出现的元组的索引。要检查的输入元组 检测值为-1的元素 符合的位置的索引号(从0开始)
select_obj (Basins, Defects, Indices + 1)
*将带有索引(从1开始)的图标对象从图标输入对象元组对象复制到输出对象。
*输入的元组(Basins)选定的对象(Defects)要选择的对象的索引(Indices + 1)

dev_display (Image)
 *在当前图形窗口中显示图像对象(Image)。
dev_display (Defects)
*在当前图形窗口中显示缺陷(Defects)。
count_obj (Defects, NDefects)
*元组中的对象数目。要检查对象(Defects)对象数目(NDefects)
disp_message (WindowHandle, NDefects + '  \'mura\'  defects detected', 'window', -1, -1, 'red', 'true')
*设置文本框。句柄 显示内容(\'代表') 参考坐标 左上角坐标(-1, -1)如果设置为-1,则使用默认值12 红色字体白色对话框

if (f < 2)
    disp_continue_message (WindowHandle, 'black', 'true')
    *没有检测完所有图像,在当前窗口显示黑色字体白色对话框(默认第二个对话框为右下角)
    stop ()
endif

endfor

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值