频率特征是图像的灰度变化特征,低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。
一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。什么时候使用傅里叶变换进行频域分析?
1、具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现。
2、需要提取对比度低或者信噪比低的特征。
3、图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。
在halcon中,使用频域进行检测,有两个步骤是比较关键的:①生成合适的滤波器;②空间域和频域之间的转换。
1、高通滤波法
图像中的边缘或细条等细节部分与图像频谱的高频分量相对应,因此采用高通滤波让高频分量顺利通过,使图像的边缘或细条等细节变得清楚,实现图像的锐化。高通滤波可用空频法或频域法来实现。在空间域是用卷积方法,与空域低通滤波的邻域平均法类似,不过其中的冲激响应方阵H不同。
- gen_gauss_filter— 在频域生成高斯滤波器
gen_gauss_filter( : ImageGauss : Sigma1, Sigma2, Phi, Norm, Mode, Width, Height : )
参数:
ImageGauss(out) :生成的滤波器图像
Sigma1:空域(像素域)中,高斯分布在滤波器主方向的标准差
Sigma2:空域(像素域)中,高斯分布在垂直于滤波器主方向的标准差。注:Sigma1和Sigma2确定空间域内高斯函数的平滑量
Phi:滤波器在空间域的主要方向
Norm:滤波器的归一化因子。注:如果使用fft_image和fft_image_inv进行过滤,必须设置参数Norm = 'none’和Mode = ‘dc_center’(本文未使用)
Mode:频率图中心位置。注: 如果使用实值快速傅里叶变换算子rft_generic, 则Mode = ‘rft’ ;如果使用快速傅里叶变换算子fft_generic,则可以使用Mode = 'dc_edge’来提高效率
Width, Heigh:生成滤波图像的宽、高
原理:首先产生一个高斯核,然后根据输入的参数对这个高斯核矩阵做傅里叶变换(实现从空域或时域到频域的转换工具),得到特定模式和特定分辨率的所谓频域的滤波器,例如我要进行rft_generic的变换,那么我的高斯滤波器模式就要写为‘rft’。并通过设置参数保持频域滤波器和原图像一致。
- rft_generic— 计算图像的实值快速傅里叶变换,一般需要使用两次,因为在频域处理完之后,还需要转换成空间域。
rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width : )
参数:
Image:输入图像
ImageFFT(out) :傅里叶变换输入图像
Direction:计算正向或反向变换。‘to_freq’是空间域—>频域的变换,ResultType一般选择’complex’;‘from_freq’是频域—>空间域的变换,ResultType一般选择’byte’(灰度图像)。
Norm:变换的归一化因子
ResultType:输出图像的图像类型,配合Direction参数设置
Width :输入图像的宽度
原理:其实gen_gauss_filter得到的滤波器,就是一个图像,虽然是频域滤波器,但是单纯看物理意义,他就是一个图像。与时域空间卷积核的物理意义是相同的。对这幅频域图进行卷积(卷积过程与时域无差别),卷积之后图像就产生了变化,比如外环得到减弱,内环得到保留(高低通滤波器的效果),或者在某个方向上得到保留(gabor滤波器的效果),再还原到时域,发现跟原图变化很大。
- convol_fft— 在频域用滤波器对图像进行卷积
convol_fft(ImageFFT, ImageFilter : ImageConvol : : )
原理:将复合图像ImageFFT的像素乘以滤波图像滤波器的对应像素。
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png') get_image_size (Image, Width, Height) *在频域中生成高斯滤波器 gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'rft', Width, Height) *对图像进行傅里叶变换 rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width) *对傅里叶图像做卷积,使用之前创建的高斯滤波器作为卷积核 convol_fft (ImageFFT, ImageGauss, ImageConvol) *将卷积后的傅里叶图像还原为空间域图像。可见图像的突变部分得到了增强 rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width) sub_image (Image, ImageFFT1, ImageSub, 5, 100) *对图像进行缩放,一般图像特别大的时候,缩放一下,提取效果会更好 zoom_image_factor (ImageSub, ImageZoomed, 0.4, 0.4, 'constant') *将图像中的有灰度差异的线条提取出来 lines_gauss (ImageZoomed, Lines1, 0.2, 3, 8, 'light', 'true', 'gaussian', 'true')
注:当图像质量不理想时,提取线条的效果不好时,不妨试试这种方法,亲测效果很好。
标签:滤波器,rft,卷积,频域,halcon,Width,图像处理,图像 From: https://www.cnblogs.com/QuincyYi/p/18417917