- * 1. 读取彩色图片
- read_image (Image, '你的图.png')
- * 2. 简单降噪一下并转换为HSV颜色空间并提取亮度通道
- gauss_filter (Image, ImageGaussed, 5)
- decompose3(ImageGaussed, ImageR, ImageG, ImageB)
- trans_from_rgb (ImageB, ImageG, ImageB, ImageH, ImageS, ImageV, 'cielab')
- * 3. 获得频谱图
- fft_generic (ImageH, VFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')
- power_ln (VFFT, VFFT_ln)
- * 4. 将频谱图最大最小归一化到0-255,方便后续用图像处理算法处理它
- get_image_size(Image, Width, Height)
- gen_rectangle1(ImageEntireReg, 0, 0, Width, Height)
- min_max_gray(ImageEntireReg, VFFT_ln, 0, Min, Max, Range)
- scale_image_range(VFFT_ln, VFFT_ln_scaled, Min, Max)
- convert_image_type (VFFT_ln_scaled, VFFT_ln_8u, 'byte')
- * 5. 对频谱图简单降噪一下
- gauss_filter (VFFT_ln_8u, GaussFiltered, 3)
- * 6. 自适应阈值处理,得到频谱局部极值点的region,因为图中要增强的网格特征是一种重复纹理,所以频谱图上一定会表现为距离相等的一些极值点
- local_threshold (GaussFiltered, img_thresh, 'adapted_std_deviation', 'light', ['mask_size', 'scale'], [11, 0.05])
- * 7. 对频谱极值点区域进行形态学膨胀
- dilation_circle (img_thresh, Dilated, 1.5)
- * 8. 将区域转换成real类型的蒙版图像,因为后续要将区域作为频域滤波器使用,所以也得做最大最小归一化
- region_to_bin(Dilated, ImageMaskFiltered, 255, 0, Width, Height)
- invert_image(ImageMaskFiltered, ImageMaskFiltered)
- convert_image_type(ImageMaskFiltered, ImageMaskFiltered, 'real')
- scale_image(ImageMaskFiltered, ImageMaskFiltered, 1.0/255, 0)
- * 9. 应用自定义蒙版图像作为滤波器
- convol_fft (VFFT, ImageMaskFiltered, ImageComplex)
- * 10. 逆傅里叶变换得到消除芯片之后的亮度通道
- fft_generic(ImageComplex, ImageResult, 'from_freq', 1, 'none', 'dc_center', 'real')
- * 11. 将傅里叶变换的结果转换回byte格式的图
- min_max_gray(ImageEntireReg, ImageResult, 0, Min, Max, Range)
- scale_image_range(ImageResult, ImageResult_scaled, Min/3, Max)
- convert_image_type (ImageResult_scaled, ImageResult_8u, 'byte')
- * 12. 执行高帽和底帽形态学,并分别进行独立的灰度拉伸,过滤掉比较暗的像素
- gen_disc_se (SE, 'byte', 11, 11, 0)
- gray_bothat (ImageResult_8u, SE, ImageBotHat)
- gray_tophat (ImageResult_8u, SE, ImageTopHat)
- scale_image_range(ImageBotHat, ImageBotHat_scaled, 20, 100)
- scale_image_range(ImageTopHat, ImageTopHat_scaled, 30, 100)
- * 13. 将高帽和低帽形态学的结果加起来,再过滤一次比较暗的像素
- add_image (ImageBotHat_scaled, ImageTopHat_scaled, ImageMoprhAdded, 1, 0)
- scale_image_range(ImageMoprhAdded, ImageMoprhAdded_scaled, 25, 255)
- * 14. 闭操作连接分离的缺陷区域
- gen_disc_se (SE, 'byte', 11, 11, 0)
- gray_closing (ImageMoprhAdded_scaled, SE, ImageClosing)
- * 15. 图像边界附近,傅里叶变换消除芯片图案的时候,有很多残留,所以这里只能通过roi来过滤
- gen_rectangle1(Rectangle, 24, 96, 355, 600)
- reduce_domain (ImageClosing, Rectangle, ImageClosingReduced)
- * 16. 执行经典的半点分析套路,按照面积过滤得到最终结果
- threshold (ImageClosingReduced, Region, 25, 255)
- connection(Region, ConnectedRegions)
- select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 99999)
复制代码
|