说明
低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。
傅里叶变换公式如下:
关键算子
optimize_rft_speed( : : Width, Height, Mode : )
优化当前选择的FFT算法,halcon中有好多FFT算法,在不同的数据规模和硬件下有多种不同的选择,调用该方法可自动评估出最合适的算法,显著提升FFT的速度。
rft_generic和fft_generic
rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width)
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType)
这两个算子的不同点:
1.简单理解,rft_generic算子只计算和存储了复数图像的左半部分(右边是共轭的),而fft_generic算子计算和存储的是复数图像,前者大大提升了运算速率;
2.fft_generic算子可以通过参数Mode设置原点的位置:如果设置的是’dc_edge’,那么原点在左上角(即左上角是低频成分);如果设置的是’dc_center’,那么就会将原点平移到中心位置(中心是低频成分,四角是高频)。fft_generic算子一般会设置为’dc_center’。对于rft_generic算子,因为没有设置项,所以默认原点位置为左上角。
相同点:
1.Direction,分别是’to_freq’ 和’from_freq’
2.Norm,‘none’, ‘sqrt’ and ‘n’,这里其实决定了傅里叶变换公式中前面的系数c,默认值:‘sqrt’(开根号,c=sqrt(MN),转到频域数值最小);也可设置为 ‘n’(图像宽图像高,c=M*N,频域数值中间),‘none’(不使用,c=1,此时频域数值最大)。当正向变换时,一般选择’sqrt’,反向变换时,一般选择’n’(halcon例程)
3.Exponent:对应公式中指数符号,前向变换用-1,一般搭配’to_freq’ 使用,后向变换用1,搭配’from_freq’。
4.ResultType,如果是’to_freq’,那么ResultType一般选择’complex’;如果是’from_freq’,ResultType一般选择’real’(小数图像,需自己按比例转换为灰度)。如果为’byte’,则有可能不准确,全白或全黑。
gen_gauss_filter( : ImageGauss : Sigma1, Sigma2, Phi, Norm, Mode, Width, Height : )
在频率域创建一个高斯滤波器。
Sigma1:主方向的sigma值,越小越平缓,范围越大
Sigma2:垂直主方向的sigma值,这里两个参数相当于高斯滤波中的x方向和y方向分别计算,原理如该公式
传统卷积框如下(核大小为3),计算时复杂度为rowscolsksize*ksize。
而分开计算核如下只有一维:
这样先行计算,再列计算,效果是一样的(因为都要归一化,所有前面是有系数的,未分离的系数是1/16,分离的系数是1/4,此时对一个全1的区域进行卷积,两个结果都是1.)。这两个sigma可以是不同的,也就是说x方向和y方向可以不同的卷积计算。sigma越大,高斯图像越平缓,越矮,滤波效果越差。
Phi:在空间域中主轴的方向
Norm:是否归一化。“n”是不进行归一化,和后面的rft_generic参数Norm类似
Mode:“dc_center”, “dc_edge”, “rft”,dc_center是0频在中间(即低频在中间),dc_edge低频在四角,rft是半张图片,低频在左上和左下。
例如:
gen_gauss_filter (ImageGauss2, 2, 2, 0, 'none', 'rft', Width, Height)
* 注意左上角为1,周边逐渐递减
gen_gauss_filter (ImageGauss1, 10, 10, 0, 'none', 'rft', Width, Height)
convol_fft(ImageFFT, ImageFilter : ImageConvol : : )
进行卷积,实际是复数图像ImageFFT的像素乘以滤波器ImageFilter的相应像素,因此滤波器中黑色的部分对应到频率图中相应位置的数据被清除。