Halcon表面检测---高度纹理图像中的mura缺陷
对应示例程序:
detect_mura_defects_texture.hdev
目标:实现高纹理图像中缺陷的检测(黑色)。
思路为:
1.对彩色图像进行R G B分解,选取B作为后续图像。
2. 生成背景模板,将图像傅里叶变换到频域中,通过高斯滤波,然后傅里叶反变换回来,得到的图像就是背景模板。
3 .背景差分。采用sub_image函数进行图像差分,增强两幅图像的差异
4 .分水岭算法分割,在分割之前采用中值滤波来抑制小斑点或细线。分水岭后,图像分割为多个轮廓(region)。
5 .计算多个轮廓region的灰度信息,包括能量。相关度、同一度、对比度,通过灰度共生矩阵。 前面的两个参数是灰度级和方向,灰度级是2^,方向即灰度共生矩阵方向。
6 .根据能量信息对多个region进行筛选,筛选后的region就是检测结果。黑色区域的能量较低
判断能量是否大于0.05,通过sgn函数将大于0.05的置1,小于的置-1。通过tuple_find在(Energy-0.05).Sgn()中寻找-1出现的位置,注意这个位置是从0开始的。貌似这个是经过人为排序的,所以indices 中就是前三个 0 1 2
select_obj (Basins, &Defects, new_Indices);是从Basins提取序号为new_Indices的region 。为什么重新定义一个HTuple 因为HTuple实际上是个数组。find后得到的就是一个indices 数组,里面存在三个数。
select_obj 的参数必须是HTuple,也就是数组,所以只能重新定义,而且序号从1开始,因此要加1,只能获取数组中的值加1,获取的代码为new_Indices[0]=Indices[i].I()+1; 也就是说数组中的值可以直接访问,然后转化为需要的类型。
图像:
代码:
* 多纹理图像中找缺陷 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) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_set_draw ('margin') 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) *图像中的缺陷是黑色的,为了突出缺陷,通过生成背景照明图像进行增强 estimate_background_illumination (B, ImageFFT1) sub_image (B, ImageFFT1, ImageSub, 2, 100) *中值滤波进行降噪 median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored') watersheds_threshold (ImageMedian, Basins, 20)//分水岭算法分割 *黑色缺陷的能量较低 *计算共生矩阵并导出其灰度值特征 cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast) tuple_find (sgn(Energy - 0.05), -1, Indices) select_obj (Basins, Defects, Indices + 1) * dev_display (Image) dev_display (Defects) count_obj (Defects, NDefects)//计算obj的数量 disp_message (WindowHandle, NDefects + ' \'mura\' defects detected', 'window', -1, -1, 'red', 'true') if (f < 2) disp_continue_message (WindowHandle, 'black', 'true') stop () endif endfor
用到的几个算子:
estimate_background_illumination -本地函数 用来估计生成背景图像
将图像傅里叶变换到频域中,通过高斯滤波,然后傅里叶反变换回来,得到的图像就是背景模板
cooc_feature_image - 计算共生矩阵并导出其灰度值特征。
参考资料:
[1]: https://www.cnblogs.com/wwwbdabc/p/11087850.html
[2]: https://www.cnblogs.com/xhiong/p/cooc_feature_image.html
- halcon应用范围-表面检测3一高纹理图像中的缺陷检测
- 图像处理笔记(二十):LAWS纹理滤波应用于缺陷检测
- 图像分割——钢铁表面缺陷检测
- halcon应用范围-表面检测4一利用带通滤波器来检测缺陷
- Halcon表面缺陷检测-光度立体法检测药片包装背面的缺陷
- halcon应用范围-表面检测1一塑料制品表面缺陷检测
- Halcon表面缺陷检测-划痕检测
- Halcon表面缺陷检测-不均匀光照的表面缺陷
- halcon缺陷检测的相关知识
- 深度学习应用系列——计算机视觉:表面缺陷检测(一)
- 图像检测算法Halcon 10的使用
- 表面缺陷检测的几种方法
- halcon图像边缘提取(边缘检测)
- 将小纹理图像平铺到大模型表面
- 编写高效的C#图像处理程序(3) Rgb=>Lab,图像缺陷检测的例子
- Halcon实例教程之金属表面划痕及裂缝检测
- 【外星眼halcon视频教程】要做缺陷检测,就要先了解人眼和相机的区别
- VIDI深度学习软件在粗糙金属表面缺陷检测中的应用
- Halcon 学习总结——基于动态阈值法、GMM(高斯混合模型)、SVM(支持向量机)的网状物缺陷检测
- 基于Halcon的印刷图像质量检测系统