Halcon:处理纹理图像的缺陷区域

处理图如下:
Halcon:处理纹理图像的缺陷区域_第1张图片
Halcon:处理纹理图像的缺陷区域_第2张图片

原图如下:
Halcon:处理纹理图像的缺陷区域_第3张图片
Halcon:处理纹理图像的缺陷区域_第4张图片

主要思想:
1.频域处理,构建高斯滤波
2.变换为空间域
3.图像差分,分水岭算法
4.特征选择,能量的选择(缺陷区域能量较小)

代码如下:
*关闭窗口
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’)
*设置线宽3个像素
dev_set_line_width (3)
*设置颜色为红色
dev_set_color (‘red’)
for F := 1 to 2 by 1
*读取待测图像
read_image (Image, Path + F$’.2i’)
*24位图像拆分成3个8位的R.G.B图像
decompose3 (Image, R, G, B)
* estimate_background_illumination (B, ImageFFT1)
get_image_size (B, Width, Height)
*空间域变换到频域
fft_generic (R, ImageFFT, ‘to_freq’, -1, ‘none’, ‘dc_center’, ‘complex’)
*构建一个高斯滤波
gen_gauss_filter (ImageGauss, 50, 50, 0, ‘n’, ‘dc_center’, Width, Height)
*处理图像
convol_fft (ImageFFT, ImageGauss, ImageConvol)
*从频域变换到空间域
fft_generic (ImageConvol, ImageFFT1, ‘from_freq’, 1, ‘none’, ‘dc_center’, ‘byte’)
*差分图像,得到新的图像
sub_image (B, ImageFFT1, ImageSub, 2, 100)
*中值滤波,用于消除椒盐噪声
median_image (ImageSub, ImageMedian, ‘circle’, 9, ‘mirrored’)
*分水岭算法,参数3越大越粗糙。参数越小越精细。类似于分割大小
watersheds_threshold (ImageMedian, Basins, 20)
* 求共生矩阵,求取的图像的相关性,能量,熵
cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
*筛选的是能量参数,<=0.05
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

对应示例程序:
detect_mura_defects_texture.hdev

你可能感兴趣的:(Halcon,计算机视觉)