Halcon:傅里叶变换+差分 求缺陷区域

处理图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主要思想
1.采集图像
2.预处理之频域变换(建立背景+高斯滤波)
3.图像差分(在空间域处理)
4.lines_gauss函数提取线条

代码如下:
*轻微印痕检测
*差分+频域的思想
*关闭窗口
dev_close_window ()
*更新窗口
dev_update_off ()
*路径定义
Path := ‘lcd/mura_defects_blur_’
*读取图片
read_image (Image, Path + ‘01’)
*获取图像大小
get_image_size (Image, Width, Height)
*打开一个窗口
dev_open_window_fit_size (0, 0, Width, Height, 640, 480, WindowHandle)
*设置字体
set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
*设置填充模式
dev_set_draw (‘margin’)
*设置线宽
dev_set_line_width (3)
*设置颜色
dev_set_color (‘red’)
*缩放因子变量0.4
ScaleFactor := 0.4
*用于计算下面的lines_gauss的参数的,输入时前面两个,输出是后面3个
*参数1,是被提取线的最大宽度。参数2是要被提取的线的对比度。后面3个是输出值
calculate_lines_gauss_parameters (17, [25,3], Sigma, Low, High)
for f := 1 to 3 by 1
*读取图像
read_image (Image, Path + f$’.2i’)
*将彩色图像拆分3个,R,G,B的图像
decompose3 (Image, R, G, B)
*改成fft
fft_generic (B, ImageFFT, ‘to_freq’, -1, ‘none’, ‘dc_center’, ‘complex’)
*rft频谱中心在4个脚上
*rft_generic (B, ImageFFT, ‘to_freq’, ‘none’, ‘complex’, Width)
gen_gauss_filter (ImageGauss, 100, 100, 0, ‘n’, ‘dc_center’, Width, Height)
*使用滤波器
convol_fft (ImageFFT, ImageGauss, ImageConvol)
*从频域变换成空间域
fft_generic (ImageConvol, ImageFFT1, ‘from_freq’, 1, ‘none’, ‘dc_center’, ‘byte’)
*rft_generic (ImageConvol, ImageFFT1, ‘from_freq’, ‘none’, ‘byte’, Width)
原图和经过滤波器处理的图像,进行相减2+100
sub_image (B, ImageFFT1, ImageSub, 2, 100)
*将图像按照比例因子缩放
zoom_image_factor (ImageSub, ImageZoomed, ScaleFactor, ScaleFactor, ‘constant’)
*从图像到区域
get_domain (ImageZoomed, Domain)
*将区域腐蚀后输出,变小区域
erosion_rectangle1 (Domain, RegionErosion, 7, 7)
*再进行抠图
reduce_domain (ImageZoomed, RegionErosion, ImageReduced)
*提取线和线的宽度
*重点函数
*参数1,输入图。参数2是输出线条。参数3是高斯系数。
*参数4,5是高低阈值。参数6是提取亮的还是暗的。参数7是是否提取线的宽度
*参数8是获取线的时候的模型时用哪一种,参数9是交叉点是否提取
lines_gauss (ImageReduced, Lines, Sigma, Low, High, ‘dark’, ‘true’, ‘gaussian’, ‘true’)
*创建一个新的矩阵
hom_mat2d_identity (HomMat2DIdentity)
*放大的矩阵
hom_mat2d_scale_local (HomMat2DIdentity, 1 / ScaleFactor, 1 / ScaleFactor, HomMat2DScale)
*进行缩小后的线条。经过矩阵放大后的新的大线条
affine_trans_contour_xld (Lines, Defects, HomMat2DScale)
* 显示图像
dev_display (Image)
*显示缺陷
dev_display (Defects)
if (f < 3)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
endif
endfor

*上面的缩放也可以不变换

对应示例程序:
detect_indent_fft.hdev

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值