*此示例显示了如何检测高纹理图像中的Mura缺陷
*
dev_close_window ()
dev_update_off ()
Path := 'lcd/mura_defects_texture_'
read_image (Image, Path + '01')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
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
halcon表面检测5——如何检测高纹理图像中的Mura缺陷
最新推荐文章于 2024-05-11 13:33:11 发布