傅里叶变换
在halcon中,傅里叶变换是将图像从空间域转换到频域,在频域中进行滤波,再从频域转换到空间域,然后进行图像处理。
空间域 --> 频域 -->滤波 --> 空间域 --> 图像处理
滤波的作用
高通滤波器,会将图像中的轮廓提取出来(噪声和轮廓就是灰度值变化剧烈的地带)。
低通滤波器,只显示灰度值变化不剧烈的区域,会过滤掉边缘轮廓和噪声,使得图片变得模糊。
图片来源图像处理
滤波器 一般有三种方法:
1、直接使用算子gen_highpass(),gen_lowpass() 生成高通和低通滤波器;
使用算子gen_gauss_filter()生成一个高斯滤波器(低通滤波器,sigma值越大,通过的信号更加的集中在低频,这样做的目的是得到背景)。
2、使用算子power_real()生成一个复杂图像的功率谱,把功率谱图像当成正常的空域图像进行BLOB分析即可。
3、在频域图中通过画区域paint_region()来遮挡高频或低频的部分。
算子说明可以参考傅里叶变换涉及的算子
4、高通滤波与低通滤波的效果图
空间域 => 频域
1、最简单的形式:
fft_image(Image : ImageFFT : : )
2、通用算子:既可以变换到频域,又可以变换回频域
fft_generic(Image,ImageFFT,'to_freq',-1,'sqrt','dc_center','complex') 低频成分在图像中心
fft_generic(Image,ImageFFT,'to_freq',-1,'n','dc_edge','complex') 低频成分在图像4个角
3、通用算子,既可以变换到频域,又可以变换回频域,
与fft_generic的最主要差异是rft_generic低频成分在图像4个角
rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width : )
频域=>空间
1、最简单的形式:
fft_image_inv
2、变换到空间域常用的形式
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : )
fft_generic(Image,ImageFFT,'from_freq',1,'sqrt','dc_center','byte')
fft_generic(Image,ImageFFT,'from_freq',1,'none','dc_edge','byte')
3、通用算子,既可以变换到频域,又可以变换回频域
rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width : )
例程说明
1、画区域paint_region()来遮挡高频的部分,图片顺序
代码实现:
read_image (Image11, 'H:/BaiduNetdiskDownload/图片/11.png')
rgb1_to_gray (Image11, GrayImage)
fft_image (GrayImage, ImageFFT)
gen_rectangle1 (ROI_0, -0.5, 399.311, 169.691, 423.571)
gen_rectangle1 (TMP_Region, 158.828, 313.914, 225.215, 455.595)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle1 (TMP_Region, 220.387, 397.37, 298.844, 421.63)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle1 (TMP_Region, 291.602, 399.311, 303.672, 421.63)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle1 (TMP_Region, 313.328, 404.163, 616.293, 418.719)
union2 (ROI_0, TMP_Region, ROI_0)
paint_region (ROI_0, ImageFFT, ImageResult, 0, 'fill')
fft_image_inv (ImageResult, ImageFFTInv)
更多例程可见例程