图像处理傅里叶平移_图像空间平移傅里叶 - CSDN
  • 傅里叶变化的平移性: matlab代码验证过程实现: %% 研究傅里叶变化 的 平移特性 %空间域 乘以exp ,频率域移动 clc;clear I = imread('rice.jpg'); I = rgb2gray(I); I = im2double(I); figure;subplot(1, ...

     

    傅里叶变化的平移性:

     

    matlab代码验证过程实现:

    %% 研究傅里叶变化 的 平移特性
    %空间域 乘以exp ,频率域移动
    
    clc;clear
    I = imread('rice.jpg');
    I  = rgb2gray(I);
    I = im2double(I);
    figure;subplot(1, 3, 1);imshow(I);title('原图');
    
    %傅里叶变化
    f = fft2(I);
    f = fftshift(log(1+abs(f)));
    subplot(1, 3, 2);imshow(f, []);title('频谱图');
    
    % 图片大小为256*256
    % 假设,图像大小为10mm , 那么采样频率为25.6,系统可采集最高频率为25.6/2,
    % 每个像素大小为10/256 mm,单位频率是0.1
    
    kx=25.6/2;  %频率。  如果为25.6/2,则移动到最边缘。 为25.6则为一个周期重新回来。
    ky=0;  %测试只在x方向(行移动)发生平移
    [M,N]=size(I); 
    MM=linspace(0,10,256);%1-10 分为256个数,存在MM中。10mm的空间分为256份
    NN=linspace(0,10,256);
    for i=1:N
         for j=1:M    %MM(i),NN(j)相当于空间真实坐标
             r(i,j)= exp(1i.*2.*pi.*kx.*MM(i) + 1i.*2.*pi .*ky.*NN(j));  %2pi写在里面了
         end
    end
    I2= I .* r;
    f2 = fft2(I2);
    f2 = fftshift(log(1+abs(f2)));
    subplot(1, 3, 3);imshow(f2, []);title('平移后-频谱图2');

    结果:

    中间频率的解释可以参见我的另一篇博客:

    https://blog.csdn.net/tyfwin/article/details/89840154

    本人的水平有限,还望批评指正。

    展开全文
  • 1、将一幅图分别进行X轴与Y轴上的平移,所得的傅里叶频谱与原图像频谱的傅里叶频谱有什么变化,请说明理由。 2、将一幅图进行离散傅里叶变换,得到其傅里叶频谱图,在对原图像进行一定角度的旋转,得到的频谱图与原...
  • 本文主要讲解图像傅里叶变换的相关内容,在数字图像处理中,有两个经典的变换被广泛应用——傅里叶变换和霍夫变换。其中,傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理...

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
    PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

    同时推荐作者的C++图像系列知识:
    [数字图像处理] 一.MFC详解显示BMP格式图片
    [数字图像处理] 二.MFC单文档分割窗口显示图片
    [数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
    [数字图像处理] 四.MFC对话框绘制灰度直方图
    [数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
    [数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
    [数字图像处理] 七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

    前文参考:
    [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
    [Python图像处理] 二.OpenCV+Numpy库读取与修改像素
    [Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
    [Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
    [Python图像处理] 五.图像融合、加法运算及图像类型转换
    [Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移
    [Python图像处理] 七.图像阈值化处理及算法对比
    [Python图像处理] 八.图像腐蚀与图像膨胀
    [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
    [Python图像处理] 十.形态学之图像顶帽运算和黑帽运算
    [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图
    [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
    [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算
    [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
    [Python图像处理] 十五.图像的灰度线性变换
    [Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换
    [Python图像处理] 十七.图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子和Laplacian算子
    [Python图像处理] 十八.图像锐化与边缘检测之Scharr算子、Canny算子和LOG算子
    [Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割
    [Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
    [Python图像处理] 二十一.图像金字塔之图像向下取样和向上取样

    前面一篇文章我讲解了Python图像量化、采样处理及图像金字塔。本文主要讲解图像傅里叶变换的相关内容,在数字图像处理中,有两个经典的变换被广泛应用——傅里叶变换和霍夫变换。其中,傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理。基础性文章,希望对你有所帮助。同时,该部分知识均为杨秀璋查阅资料撰写,转载请署名CSDN+杨秀璋及原地址出处,谢谢!!

    1.图像傅里叶变换
    2.Numpy实现傅里叶变换
    3.Numpy实现傅里叶逆变换
    4.OpenCV实现傅里叶变换
    5.OpenCV实现傅里叶逆变换


    PS:文章参考自己以前系列图像处理文章及OpenCV库函数,同时参考如下文献:
    《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年.
    《数字图像处理学》(第3版),阮秋琦,电子工业出版社,2008年,北京.
    《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015,北京.
    百度百科-傅里叶变换
    网易云课堂-高登教育 Python+OpenCV图像处理
    安安zoe-图像的傅里叶变换
    daduzimama-图像的傅里叶变换的迷思----频谱居中
    tenderwx-数字图像处理-傅里叶变换在图像处理中的应用
    小小猫钓小小鱼-深入浅出的讲解傅里叶变换(真正的通俗易懂)


    一.图像傅里叶变换原理

    傅里叶变换(Fourier Transform,简称FT)常用于数字信号处理,它的目的是将时间域上的信号转变为频率域上的信号。随着域的不同,对同一个事物的了解角度也随之改变,因此在时域中某些不好处理的地方,在频域就可以较为简单的处理。同时,可以从频域里发现一些原先不易察觉的特征。傅里叶定理指出“任何连续周期信号都可以表示成(或者无限逼近)一系列正弦信号的叠加。”

    下面引用李老师 “Python+OpenCV图像处理” 中的一个案例,非常推荐同学们去购买学习。如下图所示,他将某饮料的制作过程的时域角度转换为频域角度。

    绘制对应的时间图和频率图如下所示:

    傅里叶公式如下,其中w表示频率,t表示时间,为复变函数。它将时间域的函数表示为频率域的函数f(t)的积分。

    傅里叶变换认为一个周期函数(信号)包含多个频率分量,任意函数(信号)f(t)可通过多个周期函数(或基函数)相加合成。从物理角度理解,傅里叶变换是以一组特殊的函数(三角函数)为正交基,对原函数进行线性变换,物理意义便是原函数在各组基函数的投影。如下图所示,它是由三条正弦曲线组合成。

    傅里叶变换可以应用于图像处理中,经过对图像进行变换得到其频谱图。从谱频图里频率高低来表征图像中灰度变化剧烈程度。图像中的边缘信号和噪声信号往往是高频信号,而图像变化频繁的图像轮廓及背景等信号往往是低频信号。这时可以有针对性的对图像进行相关操作,例如图像除噪、图像增强和锐化等。

    二维图像的傅里叶变换可以用以下数学公式(15-3)表达,其中f是空间域(Spatial Domain))值,F是频域(Frequency Domain)值

    对上面的傅里叶变换有了大致的了解之后,下面通过Numpy和OpenCV分别讲解图像傅里叶变换的算法及操作代码。


    二.Numpy实现傅里叶变换

    Numpy中的 FFT包提供了函数 np.fft.fft2()可以对信号进行快速傅里叶变换,其函数原型如下所示,该输出结果是一个复数数组(Complex Ndarry)。

    fft2(a, s=None, axes=(-2, -1), norm=None)

    • a表示输入图像,阵列状的复杂数组
    • s表示整数序列,可以决定输出数组的大小。输出可选形状(每个转换轴的长度),其中s[0]表示轴0,s[1]表示轴1。对应fit(x,n)函数中的n,沿着每个轴,如果给定的形状小于输入形状,则将剪切输入。如果大于则输入将用零填充。如果未给定’s’,则使用沿’axles’指定的轴的输入形状
    • axes表示整数序列,用于计算FFT的可选轴。如果未给出,则使用最后两个轴。“axes”中的重复索引表示对该轴执行多次转换,一个元素序列意味着执行一维FFT
    • norm包括None和ortho两个选项,规范化模式(请参见numpy.fft)。默认值为无

    Numpy中的fft模块有很多函数,相关函数如下:

    #计算一维傅里叶变换
    numpy.fft.fft(a, n=None, axis=-1, norm=None)
    #计算二维的傅里叶变换
    numpy.fft.fft2(a, n=None, axis=-1, norm=None)
    #计算n维的傅里叶变换
    numpy.fft.fftn()
    #计算n维实数的傅里叶变换
    numpy.fft.rfftn()
    #返回傅里叶变换的采样频率
    numpy.fft.fftfreq()
    #将FFT输出中的直流分量移动到频谱中央
    numpy.fft.shift()

    下面的代码是通过Numpy库实现傅里叶变换,调用np.fft.fft2()快速傅里叶变换得到频率分布,接着调用np.fft.fftshift()函数将中心位置转移至中间,最终通过Matplotlib显示效果图。

    # -*- coding: utf-8 -*-
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    
    #读取图像
    img = cv.imread('test.png', 0)
    
    #快速傅里叶变换算法得到频率分布
    f = np.fft.fft2(img)
    
    #默认结果中心点位置是在左上角,
    #调用fftshift()函数转移到中间位置
    fshift = np.fft.fftshift(f)       
    
    #fft结果是复数, 其绝对值结果是振幅
    fimg = np.log(np.abs(fshift))
    
    #展示结果
    plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Fourier')
    plt.axis('off')
    plt.subplot(122), plt.imshow(fimg, 'gray'), plt.title('Fourier Fourier')
    plt.axis('off')
    plt.show()
    

    输出结果如图15-2所示,左边为原始图像,右边为频率分布图谱,其中越靠近中心位置频率越低,越亮(灰度值越高)的位置代表该频率的信号振幅越大。


    三.Numpy实现傅里叶逆变换

    下面介绍Numpy实现傅里叶逆变换,它是傅里叶变换的逆操作,将频谱图像转换为原始图像的过程。通过傅里叶变换将转换为频谱图,并对高频(边界)和低频(细节)部分进行处理,接着需要通过傅里叶逆变换恢复为原始效果图。频域上对图像的处理会反映在逆变换图像上,从而更好地进行图像处理。

    图像傅里叶变化主要使用的函数如下所示:

    #实现图像逆傅里叶变换,返回一个复数数组
    numpy.fft.ifft2(a, n=None, axis=-1, norm=None)
    #fftshit()函数的逆函数,它将频谱图像的中心低频部分移动至左上角
    numpy.fft.fftshift()
    #将复数转换为0至255范围
    iimg = numpy.abs(逆傅里叶变换结果)

    下面的代码分别实现了傅里叶变换和傅里叶逆变换。

    # -*- coding: utf-8 -*-
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    
    #读取图像
    img = cv.imread('Lena.png', 0)
    
    #傅里叶变换
    f = np.fft.fft2(img)
    fshift = np.fft.fftshift(f)
    res = np.log(np.abs(fshift))
    
    #傅里叶逆变换
    ishift = np.fft.ifftshift(fshift)
    iimg = np.fft.ifft2(ishift)
    iimg = np.abs(iimg)
    
    #展示结果
    plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
    plt.axis('off')
    plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')
    plt.axis('off')
    plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')
    plt.axis('off')
    plt.show()
    

    输出结果如图15-4所示,从左至右分别为原始图像、频谱图像、逆傅里叶变换转换图像。


    四.OpenCV实现傅里叶变换

    OpenCV 中相应的函数是cv2.dft()和用Numpy输出的结果一样,但是是双通道的。第一个通道是结果的实数部分,第二个通道是结果的虚数部分,并且输入图像要首先转换成 np.float32 格式。其函数原型如下所示:

    dst = cv2.dft(src, dst=None, flags=None, nonzeroRows=None)

    • src表示输入图像,需要通过np.float32转换格式
    • dst表示输出图像,包括输出大小和尺寸
    • flags表示转换标记,其中DFT _INVERSE执行反向一维或二维转换,而不是默认的正向转换;DFT _SCALE表示缩放结果,由阵列元素的数量除以它;DFT _ROWS执行正向或反向变换输入矩阵的每个单独的行,该标志可以同时转换多个矢量,并可用于减少开销以执行3D和更高维度的转换等;DFT _COMPLEX_OUTPUT执行1D或2D实数组的正向转换,这是最快的选择,默认功能;DFT _REAL_OUTPUT执行一维或二维复数阵列的逆变换,结果通常是相同大小的复数数组,但如果输入数组具有共轭复数对称性,则输出为真实数组
    • nonzeroRows表示当参数不为零时,函数假定只有nonzeroRows输入数组的第一行(未设置)或者只有输出数组的第一个(设置)包含非零,因此函数可以处理其余的行更有效率,并节省一些时间;这种技术对计算阵列互相关或使用DFT卷积非常有用

    注意,由于输出的频谱结果是一个复数,需要调用cv2.magnitude()函数将傅里叶变换的双通道结果转换为0到255的范围。其函数原型如下:

    cv2.magnitude(x, y)

    • x表示浮点型X坐标值,即实部
    • y表示浮点型Y坐标值,即虚部
      最终输出结果为幅值,即:

    完整代码如下所示:

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    
    #读取图像
    img = cv2.imread('Lena.png', 0)
    
    #傅里叶变换
    dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
    
    #将频谱低频从左上角移动至中心位置
    dft_shift = np.fft.fftshift(dft)
    
    #频谱图像双通道复数转换为0-255区间
    result = 20*np.log(cv2.magnitude(dft_shift[:,:,0], dft_shift[:,:,1]))
    
    #显示图像
    plt.subplot(121), plt.imshow(img, cmap = 'gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(result, cmap = 'gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.show()
    

    输出结果如图15-5所示,左边为原始“Lena”图,右边为转换后的频谱图像,并且保证低频位于中心位置。


    五.OpenCV实现傅里叶逆变换

    在OpenCV 中,通过函数cv2.idft()实现傅里叶逆变换,其返回结果取决于原始图像的类型和大小,原始图像可以为实数或复数。其函数原型如下所示:

    dst = cv2.idft(src[, dst[, flags[, nonzeroRows]]])

    • src表示输入图像,包括实数或复数
    • dst表示输出图像
    • flags表示转换标记
    • nonzeroRows表示要处理的dst行数,其余行的内容未定义(请参阅dft描述中的卷积示例)

    完整代码如下所示:

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    
    #读取图像
    img = cv2.imread('Lena.png', 0)
    
    #傅里叶变换
    dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
    dftshift = np.fft.fftshift(dft)
    res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1]))
    
    #傅里叶逆变换
    ishift = np.fft.ifftshift(dftshift)
    iimg = cv2.idft(ishift)
    res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
    
    #显示图像
    plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
    plt.axis('off')
    plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image')
    plt.axis('off')
    plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image')
    plt.axis('off')
    plt.show()
    

    输出结果如图15-6所示,第一幅图为原始“Lena”图,第二幅图为傅里叶变换后的频谱图像,第三幅图为傅里叶逆变换,频谱图像转换为原始图像的过程。


    六.总结

    傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,通过修改频率以达到图像增强、图像去噪、边缘检测、特征提取、压缩加密等目的。下一篇文章,作者将结合傅里叶变换和傅里叶逆变换讲解它的应用。

    时也,命也。
    英语低分数线一分,些许遗憾,但不气馁,更加努力。雄关漫道真如铁,而今迈过从头越,从头越。苍山如海,残阳如血。感谢一路陪伴的人和自己。

    无论成败,那段拼搏的日子都很美。结果只会让我更加努力,学好英语。下半年沉下心来好好做科研写文章,西藏之行,课程分享。同时,明天的博士考试加油,虽然裸泳,但也加油!还有春季招考开始准备。

    最后补充马刺小石匠精神,当一切都看起来无济于事的时候,我去看一个石匠敲石头.他一连敲了100次,石头仍然纹丝不动。但他敲第101次的时候,石头裂为两半。可我知道,让石头裂开的不是那最后一击,而是前面的一百次敲击的结果。人生路漫漫,不可能一路一帆风顺,暂时的不顺只是磨练自己的必经之路,夜最深的时候也是距黎明最近的时刻,经历过漫漫长夜的打磨,你自身会更加强大。

    最后希望这篇基础性文章对您有所帮助,如果有错误或不足之处,请海涵!

    (By:Eastmount 2019-04-23 周二下午6点写于花溪 https://blog.csdn.net/Eastmount )

    展开全文
  • 冈萨雷斯版里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于...

    冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当我们考虑光时,讨论它的光谱或频率谱。同样, 傅立叶变换使我们能通过频率成分来分析一个函数。


    Fourier theory讲的就是:任何信(如图像信号)都可以表示成一系列正弦信号的叠加,在图像领域就是将图像brightness variation 作为正弦变量。比如下图的正弦模式可在单傅里叶中由三个分量编码:频率f、幅值A、相位γ 这三个value可以描述正弦图像中的所有信息。

    1.frequency

      


    frequency在空间域上可由亮度调节,例如左图的frequency比右图的frequency低……


    2.幅值magnitude(amplitude

    sin函数的幅值用于描述对比度,或者说是图像中最明和最暗的峰值之间的差。(一个负幅值表示一个对比逆转,即明暗交换。)

    3.相位表示相对于原始波形,这个波形的偏移量(左or右)。

    =================================================================

    一个傅里叶变换编码是一系列正弦曲线的编码,他们的频率从0开始(即没有调整,相位为0,平均亮度处),到尼奎斯特频率(即数字图像中可被编码的最高频率,它和像素大小、resolution有关)。傅里叶变换同时将图像中所有频率进行编码:一个只包含一个频率f1的信号在频谱上横坐标f为f1的点处绘制一个单峰值,峰值高度等于对应的振幅amplitude,或者正弦曲线信号的高度。如下图所示。


    DC term直流信号对应于频率为0的点,表示整幅图像的平均亮度,如果直流信号DC=0就表示整幅图像平均亮度的像素点个数=0,可推出 灰度图中,正弦曲线在正负值之间交替变化,但是由于灰度图中没有负值,所以所有的真实图像都有一个正的DC term,如上图所示。

    出于某些数学分析原因,我们经常把傅里叶变换用mirror-image表示,在原点的的两端,frequency都是增加的方向,具有相同的幅值。


    上面讲的都是一维信号,一个二维傅里叶变换是一维傅里叶变换在每一个行扫描线和列扫描线上的傅里叶变换的叠加。


    傅里叶谱图上的每一个像素点都代表一个频率值,幅值由像素点亮度变码而得。最中心的亮点是指直流分量,傅里叶谱图中越亮的点,对应于灰度图中对比越强烈(对比度越大)的点。

    由于每一列扫描线上没有变化,所以相应的fourier spectrum上行向量为0, 每一行扫描线上有contrast,所以有频率幅值。




    这里频率比上面的小,相应的亮点比上副图也集中。




    图像傅立叶变换的物理意义

    傅里叶提出任何周期函数都可以表示为不同频率的正弦和/或余弦和的形式,每个正弦和/或余弦乘以不同的系数(傅里叶级数)。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.在噪声点和图像边缘处的频率为高频。

    傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数.

    傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,我们习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样我们可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,我们首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰.






    图像是两个参数的函数,通过一组正交函数的线性组合可以将其分解,而傅里叶就是通过谐波函数来分解的。而对于离散傅里叶变换,傅里叶变换的条件是存在的。

    傅里叶变换进行图像处理有几个特点

    1. 直流成分F(0,0)等于图像的平均值;

    2. 能量频谱|F(u,v)|^2完全对称于原点;其中F=PfQ, f表示原图,P和Q都是对称的实正交矩阵,这个公式表示傅里叶变换就是个正交矩阵的正交变换

    3.图像f平移(a,b)后,F只有exp[-2pij(au/M+bv/M)]的相位变化,能量频谱不发生变化。

    4. 图像f自乘平均等于能量频谱的总和,f的分散等于能量频谱中除直流成分后的总和。

    5.图像f(x,y)和g(x,y)的卷积h(x,y)=f(x,y)*g(x,y)的傅里叶变换H(u,v)等于f(x,y)和g(x,y)各自的傅里叶变换的乘积。


    图像中的每个点通过傅里叶变换都成了谐波函数的组合,也就有了频率,这个频率则是在这一点上所有产生这个灰度的频率之和,也就是说傅里叶变换可以将这些频率分开来。当想除去图像背景时,只要去掉背景的频率就可以了。

     

    在进行傅里叶变换时,实际上在某一特定的频率下,计算每个图像位置上的乘积。什么乘积呢,就是f(x,y)exp[-j2pi(ux+vy)],然后计算下一个频率。这样就得到了频率函数。

    也就是说,我们看到傅里叶变换的每一项(对每对频率u,v,F(u,v)的值)是由f(x)函数所有值的和组成。f(x)的值与各种频率的正弦值和余弦值相乘。因此,频率u, v决定了变换的频率成分(x, y也作用于频率,但是它们相加,对频率有相同的贡献)。

     

    通常在进行傅里叶变换之前用(-1)^(x+y)乘以输入的图像函数,这样就可以将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。

     

    每个F(u,v)项包含了被指数修正的f(x,y)的所有值,因而一般不可能建立图像特定分量和其变换之间的联系。然而,一般文献通常会有关于傅里叶变换的频率分量和图像空间特征之间联系的阐述。变换最慢的频率成分(u=v=0)对应一幅图像的平均灰度级。当从变换的原点移开时,低频对应着图像的慢变换分量,较高的频率开始对应图像中变化越来越快的灰度级。这些事物体的边缘和由灰度级的突发改变(如噪声)标志的图像成分。

     

    在频率域中的滤波基础

    1. (-1)^(x+y)乘以输入图像来进行中心变换

    2. 由(1)计算图像的DFT, 即F(u,v)

    3. 用滤波器函数H(u,v)乘以F(u,v)

    4. 计算(3)中的结果的反DFT

    5. 得到(4)中的结果的实部

    6. 用(-1)^(x+y)乘以(5)中的结果



    另外我还想说明以下几点:

    1、图像经过二维傅立叶变换后,其变换系数矩阵表明:

    若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一幅图像能量集中低频区域。
    2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)


    Reference:

    http://hi.baidu.com/liyaowang/blog/item/9b7f07d7b39fdec0a044df45.html

    http://cns-alumni.bu.edu/~slehar/fourier/fourier.html#filtering

    http://hi.baidu.com/walanlixuming/blog/item/36d49ad5857a22c951da4b26.html

    展开全文
  • 图像平移并不会影响图像的频谱,同时,图像的相位会随着图像的旋转而旋转。   Part I 平移和旋转对频谱的影响 下面我用矩形的频谱图来说明图像中矩形的平移并不会对频谱有丝毫的影响。   Matlab代码:...

    图像傅里叶变换的频谱特征 三

     

    6,平移和旋转

    图像的平移并不会影响图像的频谱,同时,图像的相位会随着图像的旋转而旋转。

     

    Part I 平移和旋转对频谱的影响

    下面我用矩形的频谱图来说明图像矩形的平移并不会对频谱有丝毫的影响

     

    Matlab代码:

     

    1. clear all
    2. close all
    3. %% Author: J27
    4. % Jesus love you!
    5. Isize = 512;
    6. Rwidth = 50;
    7. Rlength = 3*Rwidth;
    8. Irect = zeros(Isize);
    9. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    10. (floor(Isize - Rwidth)/2) + 1:floor((Isize - Rwidth)/2) + Rwidth) = 1;
    11. subplot(3,1,1)
    12. imshowpair(Irect,log(abs(fftshift(fft2(Irect)))+1),'montage')
    13. Irect = zeros(Isize);
    14. Irect(floor((Isize - Rlength)/2) + 150 + 1:floor((Isize - Rlength)/2) + 150 + Rlength,...
    15. (floor(Isize - Rwidth)/2) + 1 + 200:floor((Isize - Rwidth)/2) + Rwidth + 200) = 1;
    16. subplot(3,1,2)
    17. imshowpair(Irect,log(abs(fftshift(fft2(Irect)))+1),'montage')
    18. Irect = zeros(Isize);
    19. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    20. (floor(Isize - Rwidth)/2) + 1 - 80:floor((Isize - Rwidth)/2) + Rwidth - 80) = 1;
    21. subplot(3,1,3)
    22. imshowpair(Irect,log(abs(fftshift(fft2(Irect)))+1),'montage')

     

    再比如下面这个例子:

     

    再来看看频谱随着矩形的旋转而旋转相同的角度

    Matlab代码:

    1. Isize = 512;
    2. Rwidth = 50;
    3. Rlength = 3*Rwidth;
    4. Irect = zeros(Isize);
    5. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    6. (floor(Isize - Rwidth)/2) + 1:floor((Isize - Rwidth)/2) + Rwidth) = 1;
    7. Irot = imrotate(Irect, 15, 'crop', 'bilinear');
    8. subplot(3,1,1)
    9. imshowpair(Irot,log(abs(fftshift(fft2(Irot)))+1),'montage')
    10. Irect = zeros(Isize);
    11. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    12. (floor(Isize - Rwidth)/2) + 1:floor((Isize - Rwidth)/2) + Rwidth) = 1;
    13. Irot = imrotate(Irect, 45, 'crop', 'bilinear');
    14. subplot(3,1,2)
    15. imshowpair(Irot,log(abs(fftshift(fft2(Irot)))+1),'montage')
    16. Irect = zeros(Isize);
    17. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    18. (floor(Isize - Rwidth)/2) + 1:floor((Isize - Rwidth)/2) + Rwidth) = 1;
    19. Irot = imrotate(Irect, 90, 'crop', 'bilinear');
    20. subplot(3,1,3)
    21. imshowpair(Irot,log(abs(fftshift(fft2(Irot)))+1),'montage')

     

     

    Part II 平移和旋转对相位的影响

         先用一个简单的例子来说明图像相位的作用(所用图像为cameraman),在图像的频域分析和滤波中,相位是常常被忽略的。虽然相位分量的贡献很不直观,但是它恰恰很重要。相位是频谱中各正弦分量关于原点的位移的度量

    上面的小实验充分说明了,看似无用的,且常常被忽略的相位,在DFT的频域中起到了多么重要的作用(注意区分实部和虚部(直角坐标系)VS 频谱和相位(极坐标系)!)。

    Matlab代码:

    1. close all;
    2. clear all;
    3. I = im2double(imread('cameraman.tif'));
    4. DFT = fft2(I);
    5. absF = abs(DFT);
    6. Phi = atan2(imag(DFT),real(DFT));
    7. subplot(2,3,1);
    8. imshow(I,[]);
    9. title('Image(Cameraman)');
    10. subplot(2,3,2);
    11. imshow(log(fftshift(absF) + 1),[]);
    12. title('Spectrum');
    13. subplot(2,3,3);
    14. imshow(fftshift(Phi),[]);
    15. title('Phase');
    16. F = absF.*exp(1j*Phi);
    17. Rebuild = im2uint8(real(ifft2(F)));
    18. subplot(2,3,4);
    19. imshow(Rebuild,[]);
    20. title('Rebuild with orginal specturm and phase');
    21. % rebuild with spectrum only
    22. F = absF.*exp(1j*1);
    23. Rebuild = im2uint8(real(fftshift(ifft2(F))));
    24. subplot(2,3,5);
    25. imshow(Rebuild,[]);
    26. title('Rebuild with spectrum only');
    27. % rebuild with Phase only
    28. g = 1.*exp(1j*Phi);
    29. g = im2uint8(real(ifft2(g)));
    30. subplot(2,3,6);
    31. imshow(g,[]);
    32. title('Rebuild with Phase only');

         接下来我们再来看看图像在空间域中的移位和旋转对相位有什么影响。下图中,左边一列是图像,中间一列是频谱,右边一列是相位图。你必须意识到,通过肉眼,你很难从相位图中得到什么有用的信息。

    (上图中最后一行打错了,不是“旋转改变了相位”而是“平移改变了相位”)

    Matlab代码:

    1. clear all
    2. close all
    3. %% Author: J27
    4. % Jesus love you!
    5. % shifting and rotation
    6. Isize = 512;
    7. Rwidth = 50;
    8. Rlength = 3*Rwidth;
    9. Irect = zeros(Isize);
    10. Irect(floor((Isize - Rlength)/2) + 1:floor((Isize - Rlength)/2) + Rlength,...
    11. (floor(Isize - Rwidth)/2) + 1:floor((Isize - Rwidth)/2) + Rwidth) = 1;
    12. Idft = fft2(Irect);
    13. subplot(3,3,1);
    14. imshow(Irect);
    15. subplot(3,3,2);
    16. imshow(log(abs(fftshift(Idft))+1),[]);
    17. subplot(3,3,3);
    18. imshow((atan2(imag(Idft),real(Idft))),[]);
    19. Irot = imrotate(Irect, 45, 'crop', 'bilinear');
    20. Idft = fft2(Irot);
    21. subplot(3,3,4);
    22. imshow(Irot);
    23. subplot(3,3,5);
    24. imshow(log(abs(fftshift(Idft))+1),[]);
    25. subplot(3,3,6);
    26. imshow(atan2(imag(Idft),real(Idft)),[]);
    27. Irect = zeros(Isize);
    28. Irect(floor((Isize - Rlength)/2) + 150 + 1:floor((Isize - Rlength)/2) + 150 + Rlength,...
    29. (floor(Isize - Rwidth)/2) + 1 + 200:floor((Isize - Rwidth)/2) + Rwidth + 200) = 1;
    30. Idft = fft2(Irect);
    31. subplot(3,3,7);
    32. imshow(Irect);
    33. subplot(3,3,8);
    34. imshow(log(abs(fftshift(Idft))+1),[]);
    35. subplot(3,3,9);
    36. imshow(atan2(imag(Idft),real(Idft)),[]);

     

    Matlab代码:

    1. I = im2double(imread('cameraman.tif'));
    2. Idft = fft2(I);
    3. figure;
    4. subplot(2,3,1);
    5. imshow(I,[]);
    6. subplot(2,3,2);
    7. imshow(log(abs(fftshift(Idft))+1),[]);
    8. subplot(2,3,3);
    9. imshow(atan2(imag(Idft),real(Idft)),[]);
    10. Iswap = fftshift(I);
    11. Idft = fft2(Iswap);
    12. subplot(2,3,4);
    13. imshow(Iswap,[]);
    14. subplot(2,3,5);
    15. imshow(log(abs(fftshift(Idft))+1),[]);
    16. subplot(2,3,6);
    17. imshow(atan2(imag(Idft),real(Idft)),[]);

                                                                                    (全文完)

                                                                                     谢谢收看!

    展开全文
  • 傅里叶变换及其反变换1.1 为什么要在频率域研究图像增强?1.2 傅里叶变换 1. 傅里叶变换及其反变换 1.1 为什么要在频率域研究图像增强? 可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强...
  • 目录 1 图像缩放-resize() 2 图像旋转-getRotationMatrix2D(), ...图像几何变换有图像缩放、图像旋转、图像翻转和图像平移等。 1 图像缩放-resize() 图像缩放主要调用 resize() 函数实现,具体如下: resul...
  • 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的...
  • 傅里叶变换是数字图像处理技术的基础,其通过在时域和频域来回切换图像,对图像的信息特征进行提取和分析。 一维傅里叶变换及其反变换 单变量连续函数,f(x)的傅里叶变换F(u)定义为等式:     u=0,1,
  • 图像傅里叶变换的物理意义: 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域...
  • 傅立叶变换在图像处理中有非常重要的作用。因为不仅傅立叶分析涉及图像处理很多方面,傅立 叶改进算法,比如离散余弦变换,gabor与小波在图像处理中也有重要的分量。傅立叶变换在图像处理的重要作用:  1.图像增强...
  • 关于傅里叶变化的讲解,很多大神都写得非常详尽了,通过下面几篇博文,可以让大家对傅里叶变换何相关知识有一个全面的了解,在这里我主要是想从图像处理中的角度谈一谈自己非常浅显的理解。 韩昊-傅里叶分析之掐死...
  • 傅里叶变换实现图像压缩 题目 首先将图像分割为8x8的子图像,对每个子图像进行FFT.对每个子图像中的64个系数,排序后,舍去小的变换系数,只保留靠前的16个系数,实现4: I的图像压缩。 代码 t=imread('a6.jpg'); t=...
  • 一开始在思考怎么样进行傅里叶变换,要怎么进行复数的存储、计算、和表达呢,想了好久没能想出好的办法,百度了一下,没有找到好的文章来说明怎么存储,倒是找到了好多介绍怎么用opencv进行傅里叶变换的文章,详细一...
  • 傅立叶变换在图像处理中有非常非常的作用。简单的说,傅里叶变换就是将图像变换成一个频谱图,显示出各种频率分量。因为不仅傅立叶分析涉及图像处理的很多方面,傅立叶的改进算法, 比如离散余弦变换,gabor与小波在...
  • 解读图像傅里叶变换

    2014-03-21 10:36:10
    傅里叶变换是数字图像处理技术的基础,其通过在时域和频域来回切换图像,对图像的信息特征进行提取和分析。在图像领域就是将图像亮度的变化作为正弦变量。  在冈萨雷斯版里面的解释就非常的形象:一个恰当的比喻是...
  • 听着歌看到好文章,没想到总结得通俗易懂且非常有用,于是暗爽起来,留下来。。。。。。“在时域内对图像作均值滤波就等效...因为不仅傅立叶分析涉及图像处理的很多方面,傅立叶的改进算法, 比如离散余弦变换,gab
  • 数字图像处理傅里叶变换 by方阳 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7068986.html 1. 前言 今天将之前学的数字图像处理的东西放到博客园里,所以下面...
  • 1.理解二维傅里叶变换的定义 ...一个图像尺寸为M×N的 函数的离散傅里叶变换由以下等式给出: 其中 和。其中变量u和v用于确定它们的频率,频域系统是由所张成的坐标系,其中和用做(频率)变量...
1 2 3 4 5 ... 20
收藏数 2,308
精华内容 923
关键字:

图像处理傅里叶平移