2: 不均匀表面刮伤检测
思路
1、获取图像
2、分割图像
3、处理区域
4、获取大,小缺陷
效果
原图
代码
*02 不均匀表面刮伤检测
dev_update_off ()
dev_close_window ()
*****************第一步 获取图像*******************
read_image (Image, '2.不均匀表面刮伤检测')
get_image_size (Image, Width, Height)
*打开图像窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*设置区域的填充方式
dev_set_draw ('margin')
*设置线的宽度
dev_set_line_width (4)
*显示图像
dev_display (Image)
**************第二步 分割图像**************
*均值滤波,滤波核大小为7*7(重点)
mean_image (Image, ImageMean, 30, 30)
*局部阈值进行分割(重点)
dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark')
*连通
connection (DarkPixels, ConnectedRegions)
*设置输出对象的显示色的数目
dev_set_colored (12)
dev_display(Image)
dev_display(ConnectedRegions)
**************第三步 处理区域**************
*根据面积选择区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 99999)
dev_display(Image)
dev_display(SelectedRegions)
*将选择区域合并
union1 (SelectedRegions, RegionUnion)
*对合并区域进行膨胀处理,其结构元素为圆形,半径3.5
dilation_circle (RegionUnion, RegionDilation, 3.5)
dev_display(Image)
dev_display(RegionDilation)
*对膨胀后的区域进行求骨架
skeleton (RegionDilation, Skeleton)
*对获取的骨架区域进行连通处理
connection (Skeleton, Errors)
*设置输出对象的显示色的数目
dev_set_colored (12)
dev_display(Image)
dev_display(Errors)
**************第四步 获取大,小缺陷******************************************
*过滤出大缺陷
select_shape (Errors, ScratChes, 'area', 'and', 100, 99999)
*过滤出小缺陷
select_shape (Errors, Dots, 'area', 'and', 1, 99)
dev_display(Image)
dev_set_color('red')
dev_display(ScratChes)
dev_set_color('blue')
dev_display(Dots)