该例程代码位于halcon范例的表面检测->surface_scratch.hdev,通过局部二值化和形态学后处理实现表面划痕提取。
关健代码如下:
(1)读取图像
read_image (Image, 'surface_scratch')
(2)局部二值化
mean_image (Image, ImageMean, 7, 7) * 均值滤波
dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark') * 动态二值化
connection (DarkPixels, ConnectedRegions) * 提取连通域
(3)处理区域
先选择大区域:
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10, 1000)
通过形态学处理合并碎片化的划痕区域,用于把不连续的相邻的点连接起来:
union1 (SelectedRegions, RegionUnion)
dilation_circle (RegionUnion, RegionDilation, 3.5)
提取骨架并提取连通域:
skeleton (RegionDilation, Skeleton)
connection (Skeleton, Errors)
最终结果显示如下图,其中,第一幅图为原图,第二幅图为提取到的划痕