首页 > 代码库 > 灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换

灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换

学习DIP第24天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!!

开篇废话

    今天要记录的是二维离散傅里叶变换的一些性质,也是傅里叶在图像处理中要用到的一些性质,所以要重点学习下,并总结下。重点在性质。

二维DFT数学公式

    根据一维离散傅里叶变换,直接给出二维DFT的公式,这个公式的具体代码实现在前面文章中有提到,但是实际中由于DFT计算速度过慢,普遍使用FFT作为快速算法,DFT和IDFT的公式如下:
技术分享
技术分享
    二维DFT公式的推导过程与一维相同,对连续傅里叶变换进行采样或者是将原始数据周期复制后计算傅里叶级数,然后取主值,在此不再赘述。

性质

空间与频率关系

     对于MxN的图像,技术分享技术分享是空间的取样间隔,所以原函数的总长度是Mx技术分享和Nx技术分享,频域间隔u,v为以下关系:
技术分享
技术分享
   所以,频率域样本间隔与空域样本间隔成反比。

平移,旋转与中心化

    将原图像进行平移或者对频域信号进行移动时,与其对应的频率和空域也会有相应的变换,变换关系如下:
技术分享
    可以看出,频率域原点移动到(u0,v0),对应的空域为原信号与后面复指数信号的乘积,这也是所有书上都要说的频谱中心化,也就是(u0,v0)=(M/2,N/2),这样就能得到:
技术分享
       上面的(-1)^(x+y),是M/2,N/2,带入技术分享得到的。
       对于旋转特性,我们选择用极坐标表示二维笛卡尔坐标系,于是有以下变换性质:
技术分享
       得出结论,频谱与空域具有旋转同步性,即空域旋转多少频域就旋转多少,频域旋转空域就旋转多少。
       证明实验如下:
技术分享
原图
技术分享
傅里叶变换后的频谱
技术分享
旋转后的图片
技术分享
旋转后的频谱

微分性质

    微分性质,即一个信号的微分的傅里叶变换具有对高频成分的放大作用
f‘(x,y)<=>j*u*v*F(u,v)
    所以得出微分可以计算边缘-这种高频成分的功能

周期性与对称性

    DFT的周期性与离散周期信号的傅里叶级数一致,即原信号周期,频谱也周期,图像大小为MxN:
技术分享
   k1,k2为整数。
   下面给出原始频谱和中心化后的频谱的图示,来自冈萨雷斯:
技术分享
技术分享
    可以看出,频谱是周期排布的。
    下图总结了其他一些对称的变换性质:
技术分享
    对应几个特殊的性质的解释:
技术分享
技术分享

傅里叶谱与相角

     图像傅里叶转换后的结果是复数矩阵,因为复数没法用在图像中显示,所以在图像中我们看到的都是幅度,也就是结果实部和虚部的平方和的平方根,也就是复数的长度,但是复数还有另一个性质,也就是其相位,根据实验显示,相位存储了图像的轮廓信息,或者叫做机构信息,而幅度存储了灰度信息。下面来看一下实验:
    首先,我们通过FFT得到lena的傅里叶变换结果,也就是等大的复数矩阵,我们将所有元素的长度归一化,也就是用每个像素的实部和虚部除以其距离,这样将得到幅度为1,但相角不同的复数矩阵,然后用IFFT进行逆运算,得到的计算结果在0.001左右,为了显示,将其扩大1000倍进行显示:
技术分享
原图
技术分享
相角重建
    接下来考察幅度的影响,我们将所有元素的相角设为45,135,225,315度,也就是对所有的实部和虚部设为其距离除以根号2,这样得到的IFFT结果如下:
技术分享
    可见,幅度对结构信息没有影响。
    代码:
//将幅度归一,相角保持不变,图中Complex为复数数据
void OneRange(Complex *src,Complex *dst,int width,int height){
    
    double realv=0.0,imaginv=0.0;
    for(int i=0;i<width*height;i++){
        realv=src[i].real;
        imaginv=src[i].imagin;
        double distance=sqrt(realv*realv+imaginv*imaginv);
        dst[i].real=realv/distance;
        dst[i].imagin=imaginv/distance;
        
    }
    
}
//将相角归一,相角保持不变,图中Complex为复数数据
void OneAngel(Complex *src,Complex *dst,int width,int height){
    
    double realv=0.0,imaginv=0.0;
    for(int i=0;i<width*height;i++){
        realv=src[i].real;
        imaginv=src[i].imagin;
        double distance=sqrt(realv*realv+imaginv*imaginv);
        dst[i].real=distance/sqrt(2.0);
        dst[i].imagin=distance/sqrt(2.0);
        
    }
    
}



二维卷积定理

    卷积定义:

技术分享
   频域和空域的卷积关系:
技术分享
   卷积的一个问题在于卷积以后会对原始信号的周期进行一定长度的扩展,比如长度为A和B的信号的卷积,卷积结果的信号长度为A+B-1,所以对于周期信号,卷积后的结果有可能造成信号纠缠:
技术分享
技术分享
    解决这个问题的方法很简单,就是对周期进行用零扩展,长度为A和B的信号卷积,将A和B都扩展成A+B-1,用0填充。f和h的图像进行卷积,首先进行扩展:
技术分享

总结

    至此对图像傅里叶变换的一些性质进行了简要介绍,并总结出下表,方便以后出现问题进行查阅:
技术分享
技术分享
技术分享

    下一篇介绍图像混淆

灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换