精华内容
下载资源
问答
  • 傅里叶变换在计算机中的应用
    2021-04-22 08:15:00

    图像处理论文,非常专业

    第29卷第5期运城学院学报

    JournalofYunchengUniversity

    Vol.29No.5

    2011年10月Oct.2011

    MATLAB在傅里叶变换中的应用

    玲①

    (运城学院物理与电子工程系,山西运城044000)

    要:针对信号与系统中傅里叶变换具有抽象度高、难于理解的特点,利用MATLAB强大的信号处理功

    结合傅里叶变换、傅里叶级数、卷积定理的内容,通过MATLAB程序设计实现傅里叶变换中各种运算的直观能,

    演示。通过MATLAB编程加深对信号时域和频域概念、分析方法的理解。

    关键词:MATLAB;傅里叶变换;信号与系统中图分类号:TP391

    文献标志码:A

    文章编号:1008-8008(2011)05-0029-04

    [6]

    如表1所示。不同形式的傅里叶变换,

    表1傅里叶变换形式

    随着计算机和信息技术的飞速发展,信号处理在各种工程技术领域获得了越来越广泛的应用。其中,在通信与控制采用频域的分析方法较之系统的理论研究和实际应用之中,

    经典的时域方法有许多突出的优点。当今,傅里叶分析方法已经成为信号分析与系统设计不可缺少的重要工具。

    MATLAB是一套高性能的数值计算和可视化软件,它集矩阵计算、信号处理和图形显示于一体,构成了方数值分析、便、友好的用户界面环境。MATLAB提供的信号处理(signalprocessing)工具箱函数,为信号与系统的分析提供了强有力的工具。

    MATLAB在信号与系统中的应用有方程求解应目前,

    用,图形演示谐波的合成情况,还有在高频电子线路、通信原

    [1-4]

    。本文结合信号与系统中的理、数字信号处理中的应用

    傅里叶变换、傅里叶级数、卷积定理的内容,通过MATLAB

    时域信号特性非周期连续信号周期性连续信号非周期离散信号

    频谱特性连续频谱离散频谱连续频谱

    变换名称傅里叶变换傅里叶级数序列傅里叶变换离散傅里叶级数离散傅里叶变换

    周期性离散信号周期性离散频谱

    离散信号(有限样本点)

    周期性离散频谱

    2.1傅里叶变换

    MATLAB实现信号傅里叶变换的常用方法有:(1)MAT-LAB提供了符号函数fourier和ifourier实现傅里叶变换和逆变换;(2)数值计算方法。

    工程应用中经常需要对抽样数据进行傅里叶分析,这种情况下往往无法得到信号的解析表达式,因而数值计算方法是应用傅里叶变换的主要途径。数值计算方法实现傅里叶变换的途径有:(1)直接计算法(循环法);(2)矢量计算法;(3)矩阵计算法。

    由于MATLAB对矩阵运算作了很大优化,所以采用矩阵计算法可以优化程序,提高运行效率。

    1(-1/2<t<1/2)

    试求解信号f(t)=的傅里叶变

    程序设计实现傅里叶变换中各种运算的直观演示。通过MATLAB编程加深对信号时域和频域概念、分析方法的理解。

    1.傅里叶变换

    信号的分析方法有时域分析法和变换域分析法,在变换域分析中,常用的一种分析方法是傅里叶分析法。傅里叶分析法是将信号分解为含有各种频率的正弦信号,建立信号频谱的概念,所以,傅里叶变换域分析法又称为频率域(频域)分析法。信号频谱概念的建立是以信号的傅里叶变换为基础,以下将从三个方面,即傅里叶变换、傅里叶级数和卷积定理举例介绍MATLAB在傅里叶变换中的应用。

    2.MATLAB在傅里叶变换中的应用[5]

    傅里叶变换是建立以时间为自变量的“信号”与以频率

    “频谱函数”为自变量的之间的某种变换关系。所以,当自“时间”“频率”变量或取连续值或离散值时,就形成了几种

    {

    换和逆变换。

    程序:

    T=2%定义时域抽样区间长度N=200;%定义时域抽样点数t=linspace(-T/2,T/2-T/N,N)';%定义时域抽样点

    收稿日期:2011-02-28

    作者简介:周玲(1981-),女,山西新绛人,运城学院物理与电子工程系讲师,硕士,研究方向为电子测量及信号与信息处理。

    ·29·

    更多相关内容
  • 傅里叶变换在图像处理应用

    千次阅读 2022-08-23 17:37:18
    傅里叶变换&图像滤波 傅里叶变换原理 傅里叶变换应用 滤波

    傅里叶变换原理

    傅里叶级数是将一个周期函数(非周期函数可以视为周期为无穷)拆分成无数的频率与幅度不同的简单sin函数的方法,这个方法对于任意的时域函数都适用,大家可以在这里查看形象的分解。
    最直观的函数在工程上都是时域函数。所谓时域,即值随时间变化的函数。举一个简单例子,对于一个普通的sin函数,其时域表达是这样的:
    在这里插入图片描述
    而在频域中,它的表达是这样的:
    在这里插入图片描述

    也就是说,频域分析抛弃了时间轴,而是选择频率(f)作为横轴,幅度(A)作为纵轴来分析函数。因为复杂的时域函数都是多个简单sin函数合成的,所以其频域表达就会是类似这样的:
    在这里插入图片描述

    当然,我们的频域图没有办法表达全部的sin函数信息,比如这张图上没有相位(φ)的信息,也就是说我们还需要另一幅图像对φ加以表达。借用一位知乎网友的图来解释频域和时域的关系:
    在这里插入图片描述

    需要详细了解的小伙伴可以从这里查看大佬的解读。

    傅里叶变换的应用

    从傅里叶变换的公式中可以看出,越是高频的分量,其幅度越低,这个特点在连续域和离散域都是成立的。图像是一个离散域,以某一个像素点为参考,他周围八个方向有八个不同的像素值,某个方向相邻的像素值差距较大,就代表了这个方向的频率高,反之就是这个方向的频率低。从之前的学习之中不难理解,频率高的部分是图像的边界,也即图像的细节,反过来,频率低的地方细节信息就少。如果我们把一副普通图像转换成频率图,就可以根据频率的高低重新构建一张图像。这张图片之中,高频分量与高频分量聚集,低频分量与低频分量聚集。如果我们使用掩码盖住某个高频点所在的区域,就会一口气挡住相当多的细节信息,这就是低通滤波的原理。
    OpenCV给我们提供了可以帮我们对图像矩阵进行傅里叶变换的函数,变换过程如下:

    • 使用cv2.dft()或cv2.idft()函数处理图像,需注意输入图像需要先转换成np.float32 格式;
    • 处理后得到的矩阵低频分量在各个角落,我们需要把它们拉到图像的中心,这个过程叫做频谱中心化,使用shift变换来实现;
    • cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示,这一步需要进行20×logAB运算。
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    font = font_manager.FontProperties(fname=r"c:\windows\fonts\msyh.ttc", size=10)
    
    img = cv2.imread('lena.jpg',0)
    
    img_float32 = np.float32(img) # 格式转换
    # 傅里叶变换
    dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
    # 频谱中心化
    dft_shift = np.fft.fftshift(dft)
    # 得到灰度图能表示的形式
    magnitude_spectrum1 = 20*np.log(cv2.magnitude(dft[:,:,0],dft_shift[:,:,1]))
    magnitude_spectrum2 = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
    
    plt.subplot(131),plt.imshow(img, cmap = 'gray'),plt.title('原图',fontproperties=font)
    plt.xticks([]), plt.yticks([])
    plt.subplot(132),plt.imshow(magnitude_spectrum1, cmap = 'gray'),plt.title('傅里叶变换(未中心化)',fontproperties=font)
    plt.xticks([]), plt.yticks([])
    plt.subplot(133),plt.imshow(magnitude_spectrum2, cmap = 'gray'),plt.title('傅里叶变换(中心化)',fontproperties=font)
    plt.xticks([]), plt.yticks([])
    plt.show()
    

    在这里插入图片描述

    滤波

    滤波分为高通滤波和低通滤波,高通滤波就是利用掩码把中心化傅里叶变换图像中中心点附近的值遮住,低通滤波刚好相反,把中心点附近的内容保留,其余部分值遮住。滤波工作做完之后,我们还需要进行去中心化(使用ifftshift函数)和逆傅里叶变换(使用idft函数)才能显示图像:

    img = cv2.imread('lena.jpg',0)
    img_float32 = np.float32(img)
    dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
    dft_shift = np.fft.fftshift(dft)
    
    rows, cols = img.shape
    crow, ccol = int(rows/2) , int(cols/2)     # 找到中心位置
    
    # 低通滤波掩膜
    mask = np.zeros((rows, cols, 2), np.uint8)
    for i in range(rows):
        for j in range(cols):
            if (i-crow)**2+(j-ccol)**2<=15**2:
                mask[i, j] = 1
    # 高通滤波掩膜
    mask2=np.ones((rows, cols, 2), np.uint8)
    for i in range(rows):
        for j in range(cols):
            if (i-crow)**2+(j-ccol)**2<=15**2:
                mask2[i, j] = 0
    
    # 滤波
    fshift = dft_shift*mask   # 低通滤波
    fshift2 = dft_shift*mask2 # 高通滤波
    # 去中心化
    f_ishift = np.fft.ifftshift(fshift)
    f_ishift2 = np.fft.ifftshift(fshift2)
    # 傅里叶逆变换
    img_back1 = cv2.idft(f_ishift)
    img_back2 = cv2.idft(f_ishift2)
    # 转换成可显示的图像矩阵
    img_back1 = cv2.magnitude(img_back1[:,:,0],img_back1[:,:,1])
    img_back2 = cv2.magnitude(img_back2[:,:,0],img_back2[:,:,1])
    
    plt.subplot(221),plt.imshow(img, cmap = 'gray')
    plt.title('原输入',fontproperties=font), plt.xticks([]), plt.yticks([])
    plt.subplot(222),plt.imshow(img_back1, cmap = 'gray')
    plt.title('低通滤波',fontproperties=font), plt.xticks([]), plt.yticks([])
    plt.subplot(224),plt.imshow(img_back2, cmap = 'gray')
    plt.title('高通滤波',fontproperties=font), plt.xticks([]), plt.yticks([])
    
    plt.show()
    

    在这里插入图片描述
    滤波除了可以帮我们把低频信息和高频信息分开,还可以帮我们除掉噪声。现实中的图片很多必须先经过滤噪才可以继续进行其他操作,因此傅里叶变换的地位也就十分重要了。
    今天的内容就到这了,小伙伴们下次见咯~

    展开全文
  •  为了减小匹配傅里叶变换分析的计算量,提出了一种基于快速...同时给出了其雷达信号处理线性调频信号的检测与参数估计的应用。理论及计算机仿真结果表明了该算法的有效性和精确性,有良好的工程应用前景。
  • 傅里叶变换在图像滤波应用

    千次阅读 2020-09-26 17:44:18
    傅里叶变换在图像滤波应用 1回顾傅里叶变换   首先回顾一下《信号与系统》这门课主要学习了什么。第一章中,学习了与信号和系统的数学表示有关的某些基本概念,特别练习了信号的某些变换(如时移和尺度...

    傅里叶变换在图像滤波中的应用

    1回顾傅里叶变换

      首先回顾一下在《信号与系统》这门课中主要学习了什么。在第一章中,学习了与信号和系统的数学表示有关的某些基本概念,特别练习了信号的某些变换(如时移和尺度变换),接着又学习了几个非常重要的基本连续时间信号和离散时间信号(复指数信号、单位冲击阶跃等),最后学习了系统的六个基本性质,如线性、时不变性等。第二章建立在上述两个性质的基础之上,即线性时不变系统LTI,学习了如何计算LTI系统的卷积以及卷积的性质。最后,介绍了一些奇异函数(阶跃、冲击和冲击偶等)及其在描述和分析连续时间线性时不变系统中的作用。第三章引入了傅里叶级数的概念,且主要在学习连续时间周期信号的傅里叶级数。针对分析公式和综合公式,做了相应的练习,学习到的傅里叶级数的性质可以帮助我们对一个周期信号快速傅里叶展开。学习这一章,有如下两个基本理由:1)大部分的信号都可以表示成复指数信号的加权和或加权积分。2)线性时不变系统对复指数输入信号的响应比较简单。在本章的最后,指出可以利用傅里叶展开将一个时域的周期信号变换到频域上,之后在频域范围内进行滤波。第四章的傅里叶变换是傅里叶展开的延伸,将一个非周期信号扩展成周期信号,再利用傅里叶展开求级数,之后将周期取极限就得到了傅里叶变换的公式,由此也能看出傅里叶级数和傅里叶变换之间的关系。在这一章中,学习的是连续时间的傅里叶变换,第五章会将离散时间的傅里叶变换,但我们没有着重学习。学习卷积性质,可以为频率选择性滤波提供另一个审视角度。
      从以上回顾中可以看出,本课程的重点是傅里叶变换,可以说前三章的内容都是为傅里叶变换做铺垫的。下面给出连续时间傅里叶变换的公式[1]
    x ( t ) = 1 2 π ∫ − ∞ ∞ X ( j w ) e j w t d w (1) x(t)=\frac1{2π}\int_{-\infin}^\infin X(jw)e^{jwt}dw\tag{1} x(t)=2π1X(jw)ejwtdw(1)
    X ( j w ) = ∫ − ∞ ∞ x ( t ) e − j w t d t (2) X(jw)=\int_{-\infin}^\infin x(t) e^{-jwt}dt\tag{2} X(jw)=x(t)ejwtdt(2)
      公式(1)和公式(2)分别称为傅里叶变换的综合公式和分析公式,从中可以看出连续时间的傅里叶变换是借助积分实现的。现在摆在我们面前的有两个问题,一是计算机进行运算时很难处理连续的信号,二是公式(1)和(2)只是一维的傅里叶变换,而本文讨论的图像是二维的,因此有必要引出二维离散傅里叶变换。

    2二维离散傅里叶变换的定义

      在计算机中存储的所有图像,都是经过数字化处理之后的,此时可以用一个二维离散信号f(m,n)来表示。对于二维离散信号{f (m, n) |m=0, 1, …, M-1, n=0, 1, …, N-1}, 其离散傅立叶变换定义为[2]
    F ( u , v ) = 1 M N ∑ m = 0 M − 1 ∑ n = 0 N − 1 f ( m , n ) e − j 2 π [ m u M + n v N ] ) (3) F(u,v)=\frac1{\sqrt M \sqrt N}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)e^{-j2π[\frac {mu}{M}+\frac{nv}{N}])} \tag{3} F(u,v)=M N 1m=0M1n=0N1f(m,n)ej2π[Mmu+Nnv])(3)
      上式当中,u=0, 1, …, M-1, v=0, 1, …, N-1, 称为空间频率。j为虚数单位, j 2 j^2 j2=-1。
      傅里叶反变换定义为
    f ( m , n ) = 1 M N ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ( u , v ) e − j 2 π [ m u M + n v N ] (4) f(m,n)=\frac 1{\sqrt M \sqrt N} \sum_{u=0}^{M-1}∑_{v=0}^{N-1}F(u,v)e^{-j2π[\frac {mu}M+\frac {nv}N]}\tag{4} f(m,n)=M N 1u=0M1v=0N1F(u,v)ej2π[Mmu+Nnv](4)
      式中, m=0, 1, …, M-1, n=0, 1, …, N-1。
      在图像处理时, 一般选取图像块为N×N的方阵, 即M=N取, 这时二维离散傅立叶变换和反变换式为
    F ( u , v ) = 1 N ∑ m = 0 N − 1 ∑ n = 0 N − 1 f ( m , n ) e − j 2 π [ m u + n v N ] (5) F(u,v)=\frac 1N ∑_{m=0}^{N-1}∑_{n=0}^{N-1}f(m,n)e^{-j2π[\frac{mu+nv}N]}\tag{5} F(u,v)=N1m=0N1n=0N1f(m,n)ej2π[Nmu+nv](5)
    f ( m , n ) = 1 N ∑ u = 0 N − 1 ∑ v = 0 N − 1 F ( u , v ) e − j 2 π [ m u + n v N ] (6) f(m,n)=\frac 1N ∑_{u=0}^{N-1}∑_{v=0}^{N-1}F(u,v)e^{-j2π[\frac{mu+nv}N]}\tag{6} f(m,n)=N1u=0N1v=0N1F(u,v)ej2π[Nmu+nv](6)
      在 (5) (6) 两式中, u, v, m, n=0, 1, …, N-1。它们就是二维离散傅里叶变换的综合公式和分析公式。

    3傅里叶变换滤波原理

      从前面的讨论中可以看出,傅里叶变换的主要工作就是把一个信号从时域映射到频域。傅里叶变换算法表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加[3]。
      根据傅立叶变换理论,任何满足条件的信号都可以表示为一系列正弦信号的叠加。在图像处理中,每个灰度图像都可以表示为由正弦信息组成的图像。每个正弦信息都包含三个变量:频率,幅度和相位。转换后的图像是图像的频谱图(或功率图)。在频谱图中,频率和幅度更为重要,并且相位参数被丢弃(在相图中表示)[4]。
      在一维情况下,与图像相对应的频谱图可以表示为二维坐标系,其中水平轴是频率,垂直轴是振幅。频率为0的水平轴的中心点表示直流频率,即整个图像的平均亮度。频率为f的其他信号在图中显示为一个单峰,横坐标为f,且峰高是信号的幅度。
      二维图像的频谱图形成与一维相似,不同之处在于二维图像需要进行列扫描和行扫描,然后叠加。不同的是,频谱图的水平轴和垂直轴都代表频率,每个像素代表正弦信号的频率值,而正弦信号的幅度由像素的亮度代表。在没有频移的情况下,频谱图的中心点代表图像的直流频率(平均亮度)。频谱图中的点越亮,灰度的对比度越强(对比度越大)。图中的点与灰度图像中的点没有对应关系,但是反映了灰度图像的梯度分布(灰度图像中的明暗变化)。频谱图中有许多亮点,这意味着图像更锐利,否则图像更柔和。
      为了更好的理解上述概念,可以看一下不同图片的幅度谱(中心化后)和相位谱。
    海大校徽

    图1 海大校徽

    在这里插入图片描述

    图2 海大鱼山

      从图1和图2中可以看出,海大校徽和海大鱼山的照片的相位谱、幅度谱都不相同。图像的相位信息是非常重要的[5],但这不是我们研究的重点,我们着重讨论图像的频率信息。对于一个频谱图,它的频率分布如图3所示。
    在这里插入图片描述

    图3 频率分布

      现在我们应该已经知道,当把一副图片经过傅里叶变换到频域上时,中间部分是低频,越远离中心,频率越高,亮度代表幅度的大小。频谱图上的点越亮,表示它所处的频率成分越多。

    4三种滤波方法

    4.1高通滤波

      高通滤波,顾名思义就是只让高频分量通过,而阻挡住低频分量。在频谱图中的体现就是把中间的部分去掉,四周部分保留,公式化的定义如下:
    H ( u , v ) = { 0 , D ( u , v ) ≤ D 0 1 , D ( u , v ) > D 0 (7) H(u,v)= \begin{cases} 0,\quad D(u,v)≤D_0\\ 1,\quad D(u,v)>D_0\\ \end{cases} \tag{7} H(u,v)={0,D(u,v)D01,D(u,v)>D0(7)

      其中, D 0 D_0 D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下:
    D ( u , v ) = ( u − M 2 ) 2 + ( v − N 2 ) 2 (8) D(u,v)= \sqrt{(u-\frac M2)^2+(v-\frac N2)^2 }\tag{8} D(u,v)=(u2M)2+(v2N)2 (8)
      M,N的含义同公式(1),即表示频谱图像的大小,(M/2, N/2)即为频谱图像的中心。
      根据公式(7)(8),我们可以构建一个中心为0,四周全为1的模板矩阵,然后将其与中心化后的频谱图相乘,再将该频谱图进行逆变换就可以得到高通滤波之后的图像。对海大鱼山进行高通滤波,如图4所示。
    在这里插入图片描述

    图4 高通滤波

      原始图像的大小为500*333,D是一个以(255,166)为中心,边长为60的正方形,也就是说把频谱上处于此范围的低频分量给过滤掉。前面我们已经讨论过,低频分量存储的主要是图像的细节,高频分量存储的主要是图像的轮廓,现在我们使用的是高,通滤波器,把低频分量给过滤去了,只保留下高频分量,从图4中可以清晰的看出,滤波之后的图像只有轮廓信息了。而滤波之后的频谱图中间是黑色的,结合前面的讨论,频谱图中用像素点的亮度表示振幅的大小,即相应频率分量的比例,因为我们把低频部分给过滤掉了,所以频谱图中中间的低频部分为黑色。

    4.2低通滤波

      低通滤波与高通滤波恰好相反,它是把图像中的高频成分过滤掉,只保留下低频成分。低通滤波的公式化定义与公式(7)类似,如下式:
    H ( u , v ) = { 1 , D ( u , v ) ≤ D 0 0 , D ( u , v ) > D 0 (9) H(u,v)= \begin{cases} 1, \quad D(u,v)≤D_0\\ 0, \quad D(u,v)>D_0\\ \end{cases} \tag{9} H(u,v)={1D(u,v)D00D(u,v)>D0(9)
      D0仍是通带半径,D(u,v)的计算公式与公式(8)相同。
      现在根据公式(7)(9),我们可以构造一个中心为1,四周全为0的矩阵模板,然后将其与中心化后的频谱图相乘,再将该频谱图进行逆变换就可以得到低通滤波后的图像。对海大鱼山进行低通滤波,如图5所示。
    在这里插入图片描述

    图5 低通滤波

      原始图像的大小为500*333,D是一个以(255,166)为中心,边长为60的正方形,现在是把D之外的频率分量给过滤掉。如高通滤波中所进行的讨论,现在是保留低频分量,过滤掉高频分量。从图5中可以看出,滤波之后的图像变得模糊了起来,但是仍能看出大体形状。低通滤波会把图像钝化,淡化边缘信息,但是仍然保留大部分细节信息。从滤波之后的频谱图中可以得知,滤波器把高频分量给阻隔掉了。

    4.3带通滤波

      前面已经介绍了高通滤波和低通滤波的概念,我们会很自然的联想到带通滤波,即将高通滤波和低通滤波结合起来。在带通滤波中,我们可以指定某个频率范围内的分量可以通过,而其余的频率分量则进行阻隔。公式化定义如下:
    F ( u , v ) = { 1 , D 0 ≤ D ( u , v ) ≤ D 1 0 , e l s e F(u,v)= \begin{cases} 1, \quad D_0≤D(u,v)≤D_1\\ 0, \quad \quad \quad \quad else\\ \end{cases} F(u,v)={1,D0D(u,v)D10,else
      对海大鱼山进行带通滤波,如图6所示。
    在这里插入图片描述

    图6 带通滤波

      从图6中可以看出,滤波之后的图像,细节信息要多于高通滤波,边缘信息要多于低通滤波。
      与带通滤波器相对应的是带阻滤波器,其实只要对带通滤波器取反就可以得到带阻滤波器,即将原先的1变为0,0变为1。
      带阻滤波可以用于某些周期性噪声的清除,如图(7),原始图像中含有周期性的噪声,这会让变换出来的频谱图中产生尖峰信号(如图圈出的部分),可以通过带通滤波的方式去除这种噪声。
      低通滤波和高通滤波各有优缺点,而带阻滤波器是结合了低通、高通滤波器在图像处理中的优势, 不但避免了低通、高通滤波的局限性, 而且可以同时发挥两者的优点, 在对指纹图像滤波处理过程中, 不但可以滤除噪声, 而且还对图像边缘进行了增强。
    在这里插入图片描述

    图7 过滤周期噪声

    5.总结

      本文首先回顾了《信号与系统》课程上学到的主要内容,并将其与傅里叶变换串连起来,之后由一维连续时间傅里叶变换引出图像处理中需要的二维离散时间傅里叶变换公式。针对傅里叶变换的形式,对滤波的原理进行了讨论。最后结合具体的实例,分别论述了高通滤波、低通滤波和带通(阻)滤波的原理和实现方法。限于篇幅,本文主要讲解这三种滤波方法的实现原理,给出的滤波实例仅是为了说明问题,在实际的使用中,还是需要结合具体的问题具体分析。
      傅里叶变换为我们提供了一种思考世界的新思路,正如我们所认知的空间域中的图像,可理解为无数频率域中彼此无关的正弦曲线的叠加投影,伴随着正弦曲线幅值、频率、相位的变化,投影出的便是缤纷灿烂的大千世界。而图像处理恰恰就扮演了这样一个幕后之手的角色,通过对频率域的筛选与改变,得到期望的图像。

    参考文献:

    [1]奥本海姆.信号与系统[M].电子工业出版社,2015.
    [2] 王文发,刘彦保.傅立叶变换用于图像处理时的特性分析[J].延安大学学报 (自然科学版),2006(03):22-24.
    [3]杨帆.数字图像处理与分析[M].北京航空航天大学出版社,2010.
    [4]马晓凯,付禹.浅谈傅里叶变换在图像处理中的应用[J].科技资 讯,2018,16(08):80-81.
    [5]罗进.基于相位信息的图像边缘检测算法研究[D].湖南大学,2017.


    附源代码

    #仅附高通滤波器源代码,低通和带通(阻)滤波器只需做少许修改即可
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    def dft_matrix(N):
        i, j = np.meshgrid(np.arange(N), np.arange(N))
        omega = np.exp(-2j * np.pi / N)
        w = np.power(omega, i * j)
        return w
    def dft2d(image):
        h, w = image.shape[:2]
        output = np.zeros((h, w), np.complex)
        output = dft_matrix(h).dot(image).dot(dft_matrix(w))
        return output
    
    if __name__ == '__main__':
        img = cv2.imread("f:/daitong.png", 0)
        f = dft2d(img)
        img_shift = np.fft.fftshift(f)  # 中心化,把低频信号移到中心
        center = np.log(np.abs(img_shift))  # 使用对数变化进行图像增强
        ph_fshift = np.angle(img_shift)  # 相位谱
        h, w = img.shape
        mask = np.ones(img.shape)
        mask[int(h / 2 - 30):int(h / 2 + 30), int(w / 2 - 30):int(w / 2 + 30)] = 0
        output_shift = img_shift * mask  # 高通滤波
        output = np.fft.ifftshift(output_shift)
        output = np.fft.ifft2(output)
        output = np.abs(output)  # 逆变换
        center = (center - np.amin(center)) / (np.amax(center) - np.amin(center))
        output_shift = np.copy(center)
        output_shift = output_shift * mask
        plt.subplot(2, 2, 1), plt.imshow(img, 'gray'), plt.title('origin')
        plt.subplot(2, 2, 2), plt.imshow(output, 'gray'), plt.title('output')
        plt.subplot(2, 2, 3), plt.imshow(center, 'gray'), plt.title('origin Amplitude')
        plt.subplot(2, 2, 4), plt.imshow(output_shift, 'gray', vmin=0,vmax=1), plt.title('output Amplitude')
        plt.show()
    
    展开全文
  • 傅里叶变换在科学研究中运用非常广泛,刚开始出现时,主要用于信号分析与处理,通过将信号从时域转换到频域,可以很好的表示复杂的信号。此外,它还可以用于图像处理,将一张图片进行傅里叶变换后将表示这张图片...

    随着科学技术的不断发展,许多用于加快计算速度的算法应运而生,快速傅里叶变换就是其中之一,快速傅里叶变换是傅里叶变换的一种快速计算方式。傅里叶变换在科学研究中运用非常广泛,刚开始出现时,主要用于信号分析与处理,通过将信号从时域转换到频域,可以很好的表示复杂的信号。此外,它还可以用于图像处理中,将一张图片进行傅里叶变换后将表示这张图片各个像素的梯度大小。还可用于目标跟踪,快速傅里叶变换可以高效的进行卷积运算和相关操作,其中基于相关滤波的目标跟踪已经成为计算机视觉跟踪领域的一大模块,具有举足轻重的作用,本文将首先论述傅里叶变换在科学研究中的意义,然后具体介绍一下傅里叶变换的概念以及表达式,接着重点论述了下快速傅里叶变换的推导及实现过程,

    最后由于我的研究方向的目标跟踪,所以具体讲解了下快速傅里叶变换在目标跟踪领域中的具体运用。通过快速傅里叶变换,我们可以将一个O( )的计算规模,减少为O(nlogn)。并且计算量越大,效果越明显。

    1,傅里叶变换的意义

    人们想让计算机能处理信号 但由于信号都是连续的、无限的,计算机不能处理,于是就有了傅里叶级数、傅里叶变换,将信号由时域变到频域,把一个信号变为有很多个不同频率不同幅度的正弦信号组成,这样计算机就能处理了,但又由于傅里叶变换中要用到卷积计算,计算量很大,计算机也算不过来,于是就有了快速傅里叶变换,大大降低了运算量,使得让计算机处理信号成为可能。快速傅里叶变换是傅里叶变换的快速算法而已,主要是能减少运算量和存储开销,对于硬件实现特别有利。

    傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。它的实质是将一个信号分离为无穷多多正弦/复指数信号的加成,也就是说,把信号变成正弦信号相加的形式——既然是无穷多个信号相加,那对于非周期信号来说,每个信号的加权应该都是零——但有密度上的差别,你可以对比概率论中的概率密度来思考一下——落到每一个点的概率都是无限小,但这些无限小是有差别的所以,傅里叶变换之后,横坐标即为分离出的正弦信号的频率,纵坐标对应的是加权密度。

    傅里叶变换也可用于图像处理中,频域反应了图像在空域灰度变化剧烈程度,也就是图像灰度的变化速度,也就是图像的梯度大小。对图像而言,图像的边缘部分是突变部分,变化较 快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像平缓变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像, 可以将图像从灰度分布转化到频率分布上来观察图像的特征。书面一点说就是,傅里叶变换提供了一条从空域到频率自由转换的途径。

    2,傅里叶变换

    2.1,傅里叶变换的概念

    傅里叶变换。简称DFT,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换,本文主要探究离散傅里叶变换。

    傅里叶变换可以实现时间域到频率域的转换,很多实际问题在时间域内很难求解,但在频率域内就很简单,下面给出时域和频域的概念。

    时域:描述数学函数或物理信号对时间的关系,可以理解为是一种以时间为自变量的函数。

    频域:主要针对的是三角函数,主要分析三角函数的频率,也可理解为是一种以频率为自变量的函数。

    其实,在现实中,频域里的结果,我们人类是理解不了的,毕竟我们是生活在一个时域的世界,所以这就要求我们还要实现从频域到时域的转换,这个过程称为傅里叶逆变换。

    2.2,傅里叶变换的表达式

    离散傅里叶变换的数学表达式式如下(一维形式):

      表示为频域下的值, 表示时域下的值,N表示离散点的总数。

      从定义我们可以得出,傅里叶变换是将一般函数转化为三角函数,但是依照上面的表达式并没有三角函数,这里引进一个特别伟大的公式-欧拉公式:

     之所以说它伟大,是因为它将复数、三角函数以及指数三者联系起来,现在令θ =-2π jk/N,将(2)式代入(1)式得:

     同理,傅里叶逆变换表达式为:

    3,快速傅里叶变换

    3.1,快速傅里叶变换的概念

    快速傅里叶变换 (fast Fourier transform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。DFT需要O(N2^{})的计算时间,而FFT仅需要O(NlogN)的计算时间。

    3.2,快速傅里叶变换的推导

    但是当N很大的话,计算量那是无法承受的,所以我们引入了快速傅里叶变换。

    观察(4)式,想要简化这种计算的话,只能从wNjk 下功夫,因为它既可以表示成复数型指数 ,又可以表示成三角型复数,接下来我们先简单介绍一下它的性质。

    我们假设N是2的整次幂 

    (5)式说明,对于一个点的傅里叶变换来说,如果需要求的W的值有2k个,则最多只有k个w的值不同。

    (6)式说明,对于求N个点的傅里叶变换来说,将N个点二等分后,前后部分的W值大小相等,方向相反

    下面我们从一种非常简单明了的推理去理解FFT是如何进行快熟运算的。

    我们把(4)式展开,这里先把 取掉,它只起均分的作用,最后再加上就可以了,

    我们可以把它化成一个更一般的形式,令 ,f=a;上式将变成: 

    通过观察(10)和(11)式,我们会发现,这两个式子只有正负号不同,其他的都相同,也就是说通过求A( )和B( ),可以同时求出 的值。

    通过以上分析,我们就可以利用递归分治策略去求N个点的傅里叶变换,这样计算速度就可以达到O(nlogn),FFT也有一个很明显的缺陷,它只可以计算2的N次幂的傅里叶变换。至于傅里叶逆变换,它的过程和上面推导的类似,只不过 换下位置而已。

    分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。具体流程如下图所示

    但是这里也有一个问题,递归会占用计算机很多的内存,且消耗的时间也多,所以需要对它进行改进。下面介绍一种迭代版FFT。

    3.3,迭代版快速傅里叶变换

    我们在分治的过程中,可以对原序列进行重新分配排序,如上图所示,将原序列重新排为0,4,2,6,1,5,3,7等序列后,直接将0、4,2、6,1、5,3、7等两两合并,变为0、4、2、6和1、5、3、7两个组,再将他们进行合并,即可求出原序列的傅里叶变换,这样就可以跳过递归这一过程,节省了大量空间。我们还可以将序列用二进制表示,这样可以在计算机中直接按地址号存放序列。

    图2,迭代版FFT

    3.4,快速傅里叶变换代码

    下面是FFT算法的C++代码

    void fft(E *g,int type) 

        for(int i=0;i<n;i++)//排序 

          if(i<p[i]) 

            swap(g[i],g[p[i]]); 

        for(int i=1;i<n;i<<=1)//枚举小段长度 

        { 

            E wn(cos(py/i),type*sin(py/i)); 

            for(int j=0;j<n;j+=2*i)//枚举每一大段 

            { 

                E w(1,0);  

                for(int k=j;k<j+i;k++,w*=wn)//枚举第一小段内的每一个元素 

                { 

                    E x=g[k],y=g[k+i]*w; 

                    g[k]=x+y;g[k+i]=x-y;第一小段是+,第二小段是-。 

                } 

            } 

        } 

    }

    4,傅里叶变换在目标跟踪领域的应用

    计算机视觉中的目标跟踪由于其应用领域广泛,近来吸引了大批学者,而基于目标跟踪的研究基本可以分为两大类,第一类是基于相关滤波的跟踪,这种方法主要是用到相关性操作,进而求出样本图像与目标模板的相似性,第二类是基于深度学习的目标跟踪,该方式在进行跟踪时不需要很多先验性知识,而且准确率很高,所以是目前比较热门的研究话题,但是他的缺点是速度低下,比如说深度学习中,卷积神经网络的卷积层需要进行很多的卷积运算,导致计算量很大。

    无论是相关滤波还是卷积神经网络,其中最主要的操作是卷积运算,而傅里叶变换正好有一个特别重要的理论,卷积理论:时域上的卷积等于频域上的乘积。下面分别从卷积神经网络和相关滤波两方面来介绍快速傅里叶变换在目标跟踪中的运用。

    4.1卷积神经网络的卷积运算

    卷积神经网络是目前人工智能领域比较前沿的深度学习算法之一,被广泛应用在自然语言处理、图像识别等多个领域。 卷积层这一重要组成部分主要由卷积运算实现,但由于资源消耗严重,故在高实时性的应用场合很难满足数据处理时间的要求。下面我们将傅里叶变换运用到卷积运算中去,以加快其运算速度。

    我们先简单介绍一下传统的卷积运算;

    传统的卷积运算主要由一个二维矩阵X和一个二维的卷积核 W(n,m) 组成,其输出的也是一个二维矩阵,输出矩阵的元素S(i,j)可以由以下公式计算:

    卷积其实可以看作大小与W相同的窗口在X上滑动,将每次取出的矩阵与W对应做矩阵乘法,再填入到输出矩阵对应的位置中去,然后继续滑动,从左到右,从上到下,直到X矩阵遍历完为止,下面以4×4的X矩阵与2×2的W矩阵为例(⊗表示卷积 ): 

    (12)式我们可以看成两个两个多项式相乘,而根据上面FFT的推导,多项式可以用傅里叶变换表示,现在我们将FFT引入到(12)式中,并结合卷积定理可得如下公式(IFFT表示傅里叶逆变换):

    即将输入矩阵与卷积核分别做FFT,再将他们做矩阵乘法,得到的结果再进行IFFT还原回来,从而去加快卷积运算,但是这里有一个问题,为了使进行了FFT的矩阵可以直接进行矩阵相乘,需要保持两者的维度相同,所以W矩阵需要用0进行填充,下面以4×4的X矩阵与2×2的W矩阵为例

     通过比较这两幅图,我们可以很明显的观察到,进行了快速傅里叶变换的卷积运算比传统卷积运算的计算速度快。

    4.2,目标跟踪中的相关滤波

    相关滤波在目标跟踪中主要用来在样本模板中确定目标的位置,我们用f(x,y)表示原始图像,h(x,y)表示目标模板,将两个函数做相关操作,如果匹配成功,则相关值会在f所对应的h的位置上达到最大,从而确定目标所在的位置。具体表达式如下所示

    我们观察到(13)式与(12)式非常相像,只有一点不同,h*(n,m) 为h(x,y)的复共轭矩阵,其实(13)式也是卷积运算,只不过将h(x,y)变为h*(n,m) 了而已,所以(13)式也可以进行快速傅里叶变换,其公式如下: 

     依靠这个公式,基于相关滤波的目标跟踪有了快速的发展,尽管目前最热门的还属基于深度学习的目标跟踪,但是由于他的高速度,代码内存占有小等特点,所以在现实生活中运用特别广泛。

    展开全文
  • 快速傅里叶变换在信号处理应用

    万次阅读 多人点赞 2018-09-12 16:41:09
    傅里叶变换FT(Fourier Transform)是一种将信号从时域变换到频域的变换形式。它声学、信号处理等领域有广泛的应用计算机处理信号的要求是...它是傅里叶变换在离散域的表示形式。但是一般来说,DFT的运算量是非...
  • 作者:赵越链接:傅立叶变换,时域,频域 - 赵越的文章 - 知乎专栏来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。目录信号分析方法概述时域频域时域与频域的互相转换傅立叶变换 ...
  • 频域处理图像变换频域与频域变换傅立叶的两个最主要的贡献傅立叶变换(一种正交变换)连续函数的傅立叶变换例子离散傅立叶变换一维离散傅立叶变换的计算举例1-D傅里叶变换矩阵格式2-D傅里叶变换矩阵表示例子离散傅立叶...
  • 傅里叶算法微机继电保护应用传统的微机继电保护算法 ,一般使用梯形算法来计算周期信号的直流分量和各次谐波的系数 ,此方法计算比较复杂 。本文提出了一种基于 FFT 的算法 。该算法利用 FFT 可以由输入序列...
  • 本文摘要法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被世人铭记的最大的贡献是:他指出任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式...这种情况下的公式就是傅里叶公式。比如说我们以制作一个......
  • 傅里叶变换及拉普拉斯变换应用

    千次阅读 2022-02-03 23:42:47
    傅里叶变换公式: 傅里叶变换公式: 用到的比较重要的一个公式,欧拉公式: 高数叔里面讲的傅里叶变换的定义: 拉普拉斯变换的定义: 拉普拉斯变换定义式: 拉普拉斯变换的性质(来源高数叔 17:30 之后): ...
  • § 傅里叶变换应用 29傅里叶变换应用求解常微分方程例 用傅里叶变换法解常微分方程′′ ′y (x) + y (x) − xy (x) = 0.解 记F [y (x)] = Y (α). 对方程两端作傅里叶变换 利用线性性质、微分性质和...
  • 针对尺度缩放和角度旋转变化目标相关识别率低的问题,联合相关识别加入傅里叶祷林变换方法。采用傅里叶祷林变换 ( F MT ) 的对数极坐标变换、梅林变换傅里叶变换具有的旋转、尺度、平移 ( RST) 不变性,可以...
  • 卷积神经网络 (CNN) 得到了广泛的应用并且事实证明他是非常成功的。但是卷积的计算很低效,滑动窗口需要很多计算并且限制了过滤器的大小,通常 [3,3] 到 [7,7] 之间的小核限制了感受野(最近才出现的大核卷积可以...
  • 针对现有多核结构上快速傅里叶变换(FFT)并行算法没有利用多级缓存和线程级并行等多核特性问题,通过运用多核多级存储特性合理划分数据,采取子序列FFT 计算和多线程并行逐对计算FFT 相结合的方法,给出一个N 点、一...
  • 实验二 应用快速离散傅里叶变换 (FFT)对信号进行频谱分析 一、实验目的 1、通过这一实验,能够熟练掌握快速离散傅里叶变换(FFT)的原理及其用FFT进行频谱分析的基本方法。 2、通过计算机上用软件实现FFT及信号...
  • 实验十二 离散傅里叶变换实验一、实验目的和要求二、实验内容三、实验仪器、设备四、实验原理五、实验步骤六、实验注意事项七、实验结果八、实验总结 一、实验目的和要求   理解傅立叶变换的基本原理;掌握实现傅...
  • Q:简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换)(1) 傅里叶变换定义:表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。傅立叶变换是一种...
  • scipy之傅里叶变换

    千次阅读 2022-05-08 00:00:29
    本篇文章主要介绍了傅里叶变换,说明了什么是傅里叶变换?以及傅里叶变换应用有哪些?并且通过scipy来详细介绍了,如何通过傅里叶变换来移除信号的噪声。
  • c语言实现傅里叶变换,c语言实现快速排序,c语言傅里叶变换,二维傅里叶变换c语言,快速傅里叶变换,matlab快速傅里叶变换,快速傅里叶变换算法,快速傅里叶变换原理快速傅里叶变换FFT的C语言实现及应用快速傅里叶变换简介 ...
  • matlab图像傅里叶变换处理实验

    千次阅读 2021-04-23 19:44:01
    不知道哪个学校的,先登记着,回头自己试试看第一部分 图像的傅立叶变换一、 实验目的1.了解图像变换的意义和...应用傅立叶变换进行图像处理傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,具体情况,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • [音频处理]傅里叶变换去噪

    千次阅读 2020-05-31 21:12:50
    前面 不是科研狗,基础理论薄弱,写的比较匆忙,有理解...2 傅里叶变换在音频的应用 3 离散傅里叶变换处理音频的C语言代码及讲解 背景 最近接触音视频处理比较多,就遇到了采集的音频数据有噪音的情况。可不可以用
  • 得到的结果频率为0的部分会左上角,通常要转换到中心位置,可以通过shift变换来实现。 cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)。 import numpy ...
  • 信号处理领域,存在诸多变换,比如标题的五个变换。本文将对这五个变换进行介绍和比较。开始之前,我们需要先理清什么是平稳信号,什么是非平稳信号。 我们知道,自然界几乎所有信号都是非平稳信号,比如...
  • 图像变换傅里叶变换 目标  本小节我们将要学习:  • 使用 OpenCV 对图像进行傅里叶变换  • 使用 Numpy FFT(快速傅里叶变换)函数 ...关于傅里叶变换的细节知识可以任意一本图像处理或信号处理的书
  • OpenCV的图像处理 —— 傅里叶变换+模板匹配

    千次阅读 多人点赞 2022-05-02 16:46:28
    OpenCV的图像处理 —— 傅里叶变换+模板匹配 现在也逐渐深入啦,希望跟大家一起进步越来越强 目录OpenCV的图像处理 —— 傅里叶变换+模板匹配1. 傅里叶变换1.1 Numpy实现傅里叶变换1.2 OpenCV实现傅里叶变换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,124
精华内容 3,249
热门标签
关键字:

傅里叶变换在计算机中的应用

友情链接: lipoee.zip