图片资源
链接:https://pan.baidu.com/s/1nskaMwilW_Qb2TVJvGjmBA
提取码:lc7p
处理流程
1、读取图片并显示
2、通过频域分析 获取背景图片
3、减去背景图,中值滤波、分水岭 分割缺陷
4、区域能量计算筛选、获取缺陷位置
5、显示结果
完整代码
**** 1、读取图片 **********************
dev_close_window ()
dev_update_off ()
FilePath := './img/mura_defects_'
read_image (Image, FilePath + '01')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
dev_display (Image)
**** 2、循环处理 **********************
for index :=1 to 2 by 1
*** a、读取图片 **********************
read_image (Image, FilePath + index$'.2i')
decompose3 (Image, ImageR, ImageG, ImageB)
*** b、通过频域处理获取背景图片 **********************
* 将图像转化为频域图像
rft_generic (ImageB, ImageFFT, 'to_freq', 'none', 'complex', Width)
* 生成一个高斯滤波核
gen_gauss_filter (ImageGauss, 50, 50, 0, 'n', 'rft', Width, Height)
* 将频域图像核高斯滤波核进行卷积运算
convol_fft (ImageFFT, ImageGauss, ImageConvol)
* 将卷积后的图像转换为空间域图像
rft_generic (ImageConvol, IlluminationImage, 'from_freq', 'none', 'byte', Width)
*** c、中值滤波与分水岭算法计算缺陷区域 **********************
* 减去背景图片
sub_image (ImageB, IlluminationImage, ImageSub, 2, 100)
* 中值滤波
median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored')
* 分水岭算法 分割缺陷区域
watersheds_threshold (ImageMedian, Basins, 20)
* 计算区域的特征 6:区分的灰度阈值 0:方向 Energy 能量, Correlation 相关性, Homogeneity 同质性, Contrast 对比度
cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
* 通过能量 过滤区域
Mask := Energy [<=] 0.05
select_mask_obj (Basins, Defects, Mask)
*** d、显示结果 **********************
dev_display (Image)
* 显示缺陷
dev_display (Defects)
stop()
endfor