QQ登录

只需一步,快速开始

4.4 halcon 上位机实现皮革纹理缺陷检测

[ 复制链接 ]
当前帖子实现皮革纹理缺陷检测。
同样也是使用了空间域与步域相结合方法。

下面上程序代码与注释

4.4 halcon 上位机实现皮革纹理缺陷检测

4.4 halcon 上位机实现皮革纹理缺陷检测

4.4 halcon 上位机实现皮革纹理缺陷检测

4.4 halcon 上位机实现皮革纹理缺陷检测
  1. * 实现皮革纹理缺陷检测
  2. dev_close_window ()
  3. dev_update_off ()
  4. Path := 'lcd/mura_defects_texture_'
  5. read_image (Image, Path + '01')
  6. get_image_size (Image, Width, Height)
  7. dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
  8. set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
  9. dev_set_draw ('margin')
  10. dev_set_line_width (3)
  11. dev_set_color ('red')
  12. for F := 1 to 2 by 1
  13.     read_image (Image, Path + F

  14. .2i')
  15.     *将三通道拆分为R,G,B
  16.     decompose3 (Image, R, G, B)
  17.     *定义黑色斑点为缺陷,所以从原图中分析与提取背景,缺陷会更明显
  18.    *下面几行代码前面例程已多次组合使用,分别执行功能为对图像B进行频域转换,将频域图像进行高斯卷积。
  19.    *将卷积后的图像转换回空间域图像。将图像B的处理前后结果图进行相减,突出缺陷。
  20.     get_image_size (B, Width, Height)
  21. rft_generic (B, ImageFFT, 'to_freq', 'none', 'complex', Width)
  22. gen_gauss_filter (ImageGauss, 50, 50, 0, 'n', 'rft', Width, Height)
  23. convol_fft (ImageFFT, ImageGauss, ImageConvol)
  24. rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)
  25.     sub_image (B, ImageFFT1, ImageSub, 2, 100)

  26.    *执行中值滤波,ImageSub, ImageMedian为输入与输出图像,
  27.    *'circle'表示使用圆形模板, 9表示圆形结果元素半径, 'mirrored'表示镜向边界处理。
  28.    *中值滤波可以弱化线条纹理,简化后续的分隔与最终缺陷检测
  29.     median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored')
  30.     *使用阈值从图像 中提取分水岭和盆地,ImageMedian为输入图, Basins为分隔后的输出图, 20为阈值。
  31.     watersheds_threshold (ImageMedian, Basins, 20)
  32.     * Dark patches corresponding to defects have a very low energy.
  33.     *计算共生矩阵 ,推导出灰度特征值。因为缺陷的特点是黑色斑点能量很低。
  34.     cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
  35.     Mask := Energy [<=] 0.05
  36.     select_mask_obj (Basins, Defects, Mask)
  37.     *
  38.     dev_display (Image)
  39.     dev_display (Defects)
  40.     count_obj (Defects, NDefects)
  41.     disp_message (WindowHandle, NDefects + ' \'mura\' defects detected', 'window', 12, 12, 'red', 'true')
  42.     if (F < 2)
  43.         disp_continue_message (WindowHandle, 'black', 'true')
  44.         stop ()
  45.     endif
  46. endfor
复制代码


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索