watersheds_threshold(Image : Basins : Threshold : )
watersheds_threshold分割区域(盆地),盆地之间由至少有Threshold 高度的分水岭分隔开。
在第一步中,watersheds_threshold不应用阈值计算流域,
得到的盆地与调用watersheds时得到的盆地相同(详细信息请参阅watersheds描述)。
在第二步中,如果盆地被小于Threshold 的分水岭分隔开,则盆地依次合并。
设B1,B2和为相邻两个盆地的最小灰度值,
W为分隔两个流域的流域的最小灰度值。
在此基础上,消除流域,合并两个流域
结果保存Basins
如果 Threshold 设置为0,则watersheds_threshold与watersheds相似,
只是返回的只有扩展的盆地,没有分水岭。
如果Threshold 设置为图像的最大灰度值范围,
因此盆地只包含一个区域。
例程:
* 这个例子展示了如何在高纹理图像中检测mura缺陷
Path := 'lcd/mura_defects_texture_'
read_image (Image, Path + '01')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
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)
Mask := Energy [<=] 0.05
select_mask_obj (Basins, Defects, Mask)
dev_display (Image)
dev_display (Defects)
count_obj (Defects, NDefects)
disp_message (WindowHandle, NDefects + ' \'mura\' defects detected', 'window', 12, 12, 'red', 'true')
if (F < 2)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
1.watersheds(Image : Basins, Watersheds : : )
根据灰度值的拓扑结构分割图像。
这幅图像被解释为“山脉”。
较高的灰色值对应“山脉”,
而较低的灰色值对应“山谷”。
在产生的山脉中,分水岭被提取出来。
这些与黑暗盆地之间的亮脊相对应。
在输出端,参数Basins包含这些盆地,而Watersheds 包含分水岭,
分水岭宽度最多为1像素。
每个输入图像的分水岭总是一个单独的区域,
而每个盆地包含一个单独的区域。
在调用watersheds之前,建议对输入图像应用平滑操作符(例如,binomial_filter或gauss_filter),
以减少输出区域的数量。
减少输出区域数量的一种更复杂的方法是使用watersheds_threshold
(更多细节请参考watersheds_threshold的文档),
根据阈值准则合并相邻流域。
例程:
read_image (Br2, 'particle')
gauss_filter (Br2, ImageGauss, 9)
invert_image (ImageGauss, ImageInvert)
watersheds (ImageInvert, Basins, Watersheds)
dev_set_draw ('margin')
dev_set_colored (12)
dev_display (Br2)
dev_display (Basins)
|