我推荐直接用sauvola算法,效果如下:
- list_files ('./image', ['files','follow_links','recursive'], ImageFiles)
- tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
- for Index := 0 to |ImageFiles| - 1 by 1
- read_image (Image, ImageFiles[Index])
- rgb1_to_gray (Image, Image)
- *//提取基准区域
- threshold (Image, RegionB, 0, 254)
- connection (RegionB, RegionB)
- select_shape_std (RegionB, RegionB, 'max_area', 70)
- closing_circle (RegionB, RegionB, 5.5)
- *//缩小检测范围
- erosion_circle (RegionB, RegionB, 5.5)
-
- reduce_domain (Image, RegionB, ImageD)
- local_threshold (ImageD, RegionD, 'adapted_std_deviation', 'light',\
- ['mask_size','scale','range'], [30,0.1,128])
- *//这里的scale是对比度系数
- *//如果你想抓出更多浅色的缺陷就把这个值调小一点
- *//如果不想要后面的噪点可以在前面加一个滤波或者在后面加一个过滤器
-
- dev_clear_window ()
- dev_display (Image)
- dev_set_draw ('margin')
- dev_set_color ('red')
- dev_display (RegionD)
- stop ()
- endfor
复制代码 |