精华内容
下载资源
问答
  • 目前网络关于分数阶傅里叶变换可靠的代码来源主要有一下几个: (1)来源一: M.A. Kutay. fracF: Fast computation of the fractional Fourier transform, 1996. www.ee.bilkent.edu.tr/~haldun/fracF.m. (2)...
  • 将常用的连续函数的傅里叶变换及其对偶性质整理成文档,便于查阅
  • 逆透视变换matlab 代码

    热门讨论 2016-07-15 10:57:15
    逆透视变换详解 及 代码实现(二) 中的相关代码!! http://blog.csdn.net/yeyang911/article/details/51915348 轻松掌握逆透视变换
  • Hough变换检测直线

    2016-04-15 13:38:34
    使用MATLAB实现Hough变换,检测车道线的demo程序
  • 在信号处理领域,存在诸多变换,比如标题中的五个变换。本文将对这五个变换进行介绍和比较。在开始之前,我们需要先理清什么是平稳信号,什么是非平稳信号。 我们知道,自然界中几乎所有信号都是非平稳信号,比如...

    在信号处理领域,存在诸多变换,比如标题中的五个变换。本文将对这五个变换进行介绍和比较。在开始之前,我们需要先理清什么是平稳信号,什么是非平稳信号。

    我们知道,自然界中几乎所有信号都是非平稳信号,比如我们的语音信号就是典型的非平稳信号。那么何谓平稳信号和非平稳信号呢?一个通俗的理解即,平稳信号在不同时间得到的采样值的统计特性(比如期望、方差等)是相同的,非平稳信号则与之相反,其特性会随时间变化。在信号处理中,这个特性通常指频率。

    通常傅里叶变换只适合处理平稳信号,对于非平稳信号,由于频率特性会随时间变化,为了捕获这一时变特性,我们需要对信号进行时频分析,就包括短时傅里叶变换小波变换希尔伯特变换希尔伯特黄变换这几种变换。以下逐一进行分析介绍。

    傅里叶变换(Fourier Transform, FT)


    首先考虑一个连续信号 f ( t ) f(t) f(t)的傅里叶变换和它的反变换,如下
    F ( ω ) = F [ f ( t ) ] = ∫ − ∞ + ∞ f ( t ) e − j ω t d t F(\omega)=F[f(t)]=\int_{-\infty}^{+\infty}f(t)e^{-j\omega t}dt F(ω)=F[f(t)]=+f(t)ejωtdt

    f ( t ) = F − 1 [ F ( ω ) ] = 1 2 π ∫ − ∞ + ∞ F ( ω ) e j ω t d ω f(t)=F^{-1}[F(\omega)]=\frac{1}{2\pi}\int_{-\infty}^{+\infty}F(\omega)e^{j\omega t}d\omega f(t)=F1[F(ω)]=2π1+F(ω)ejωtdω

    在实际应用中,计算机只能处理离散信号,所以对连续信号 x ( t ) x(t) x(t)进行时域采样,得到一组离散样本 x ( n ) x(n) x(n),对它进行傅里叶变换得到
    X ( ω ) = ∑ n = − ∞ ∞ x ( n ) e − j ω n X(\omega)=\sum\limits_{n=-\infty}^\infty x(n)e^{-j\omega n} X(ω)=n=x(n)ejωn
    上式即为离散时间傅里叶变换(DTFT),由于变换后得到的频域值仍然是连续的,我们继续对频域进行采样,得到
    X ( k ) = ∑ n = 0 N − 1 x ( n ) e − j 2 π k n N X(k)=\sum\limits_{n=0}^{N-1}x(n)e^{-j\frac{2πkn}{N}} X(k)=n=0N1x(n)ejN2πkn
    上式就是离散傅里叶变换(DFT),当前计算机中常用的快速傅里叶变换(FFT),就是DFT的快速算法。如下即为信号 x ( t ) = c o s ( 200 π t ) + 0.5 c o s ( 400 π t ) x(t)=cos(200\pi t)+0.5cos(400\pi t) x(t)=cos(200πt)+0.5cos(400πt)的采样信号和经过FFT得到的幅度谱,其中采样频率 f s = 500 H z f_s=500Hz fs=500Hz

    01-FFT

    可以看到,该信号由两个频率分别为100Hz和200Hz的分量构成。利用频谱分析,我们可以发现一些时域中看不到的信息,比如信号的频率分量组成、信号能量在频域上的分布等。

    然而,傅里叶变换是一种全局的变换,时域信号经过傅里叶变换后,就变成了频域信号,从频域是无法看到时域信息的,我们可以从上节中的傅里叶变换和反变换公式进行解释,进行正变换时,积分区间为整个时域,所以变换结果将不包含时域信息,反变换同理。

    如果信号的频率特性在任何时间都不发生改变(即该信号是平稳信号)的话,使用傅里叶变换是没有问题的,然而如果该信号是非平稳信号,这时候时域信息就相当重要了。举个栗子,以下分别是0100Hz线性递增扫频信号和1000Hz线性递减扫频信号的幅度谱,这两个信号都是非平稳信号,可以看到它们的幅度谱是相同的,很显然我们无法知道每一个频率分量出现的时间,即无法知道扫频信号的模式。

    01-FFT

    上述例子可能比较简单,可以直接从时域信号看出扫频模式,但是对于一些复杂的信号和它的幅度谱,比如以下的两路扫频信号叠加后的信号和它的幅度谱

    02-STFT-01

    仅仅通过时域信号或者幅度谱,我们是很难分析这段非平稳信号的特征的。下面我们将引入一个时频分析( Time-Frequency Analysis)方法——短时傅里叶变换(STFT)。

    短时傅里叶变换(Short-Time Fourier Transform, STFT)


    短时傅里叶变换定义为
    X ( n , ω ) = ∑ m = − ∞ ∞ x ( m ) w ( n − m ) e − j ω m X(n,\omega)=\sum_{m=-\infty}^\infty x(m)w(n-m)e^{-j\omega m} X(n,ω)=m=x(m)w(nm)ejωm
    其中 x ( m ) x(m) x(m)为输入信号, w ( m ) w(m) w(m)是窗函数,它在时间上反转并且有n个样本的偏移量。 X ( n , ω ) X(n,\omega) X(n,ω)是时间 n n n和频率 ω \omega ω的二维函数,它将信号的时域和频域联系起来,我们可以据此对信号进行时频分析,比如 S ( n , ω ) = ∣ X ( n , ω ) ∣ 2 S(n,\omega)=|X(n,\omega)|^2 S(n,ω)=X(n,ω)2就是语音信号所谓的语谱图(Spectrogram)。

    画出上节中两路扫频信号叠加后的信号的语谱图,如下图

    02-STFT-02

    可见该信号是由一个0 ~ 250Hz二次递增的扫频信号和一个250 ~ 0Hz二次递减的扫频信号的叠加。通过STFT,我们可以很容易地得出非平稳信号的时变特性。

    继续对STFT进行分析。

    计算语谱 S ( n , ω ) S(n,\omega) S(n,ω)时采用不同窗长度,可以得到两种语谱图,即窄带和宽带语谱图。长时窗(至少两个基音周期)常被用于计算窄带语谱图,短窗则用于计算宽带语谱图。窄带语谱图具有较高的频率分辨率和较低的时间分辨率,良好的频率分辨率可以让语音的每个谐波分量更容易被辨别,在语谱图上显示为水平条纹。相反宽带语谱图具有较高的时间分辨率和较低的频率分辨率,低频率分辨率只能得到谱包络,良好的时间分辨率适合用于分析和检验英语语音的发音。

    如下图所示,分别为一段语音的帧长为128和512的语谱图。

    02-STFT-03

    可见,对于帧长固定的短时傅里叶变换,在全局范围内的时间分辨率和频率分辨率是固定的。如果我们想要在低频区域具有高频率分辨率,在高频区域具有高时间分辨率,显然STFT是不能满足要求的。我们继续引入另一种时频分析方法——小波变换。

    小波变换(Wavelet Transform, WT)


    对于任意能量有限信号 f ( t ) f(t) f(t),其连续小波变换(CWT)定义为
    W f ( a , b ) = 1 a ∫ − ∞ + ∞ f ( t ) ψ ∗ ( t − b a ) d t W_f(a,b)=\frac{1}{\sqrt a}\int_{-\infty}^{+\infty}f(t)\psi^*(\frac{t-b}{a})dt Wf(a,b)=a 1+f(t)ψ(atb)dt
    其中 ψ ( t ) \psi(t) ψ(t)是母小波或者基本小波,它满足 ψ ( ± ∞ ) = 0 \psi(±\infty)=0 ψ(±)=0 ψ ( 0 ) = 0 \psi(0)=0 ψ(0)=0 ∫ − ∞ + ∞ ψ ( t ) d t = 0 \int_{-\infty}^{+\infty}\psi(t)dt=0 +ψ(t)dt=0,前两个条件表明 ψ ( t ) \psi(t) ψ(t)在时域上是一个有限长的函数,最后一个条件则表明 ψ ( t ) \psi(t) ψ(t)必须时正时负地波动,否则它的积分结果不会为零,因此它在频域上也是有限的。所以不同于傅里叶变换的基函数是一个无限长的正弦波,小波变换的基函数是一个经过衰减处理的有限长小波,小波基函数在时域和频域上都是局部化的,如下图分别为傅里叶变换和小波变换的基函数

    02-STFT-03

    ψ ( t ) \psi(t) ψ(t)进行伸缩和平移得到一族函数 ψ a , b ( t ) \psi_{a,b}(t) ψa,b(t),称为分析小波,这就是小波变换的基函数族,其中 a a a为伸缩参数,当 a > 1 a>1 a>1时,沿时间轴方向拉伸,因子 1 / a 1/\sqrt a 1/a 是为了保持伸缩之后能量不变; b b b为平移参数。

    使用MATLAB的小波变换工具箱画出上节两路扫频信号叠加信号的小波变换结果,如下图,其中纵轴(频率轴)是对数轴。

    03-CWT-01

    可见在低频区域的变换结果具有较高的频率分辨率(频率轴是对数轴,在低频区域跨度较小),在高频区域具有较高的时间分辨率。

    一些总结

    我们对上述方法进行总结,可以发现上述方法的区别都可以归结为选取的时频窗尺寸不同。画出时域信号、频域信号、使用STFT得到的时频域信号、使用小波变换得到的时频域信号的时频窗,如下图,每一个小方块表示一个时频窗,沿时间方向的边长表示时间分辨率,沿频率方向的边长表示频率分辨率

    00-时频窗

    由上图可以知道:

    • 对于时域信号,它可以有很高的时间分辨率,然而其频率分辨率为零。

    • 经过傅里叶变换得到的频域信号可以实现很高的频率分辨率,然而其时间分辨率为零。

    • 对于短时傅里叶变换(STFT),它在时域和频域都有一定的分辨率,并且在全局范围内STFT的时频分辨率都是一样的。但是由于Heisenberg不确定原理(也就是量子力学中的测不准原理)的制约,每一个时频窗的面积都是固定的,即时间分辨率和频率分辨率成反比,所以这两个分辨率不能同时很高。

    • 小波变换在不同时间和频率上具有不同尺寸的时频窗,可以在低频区域实现较高的频率分辨率,然而其仍然受到Heisenberg不确定原理的限制,时间分辨率和频率分辨率不能两全其美。同时小波变换的时频窗并非完全是自适应的,它还需要人为地选择基函数。

    上述的方法都会受到Heisenberg不确定原理的限制,而且并不是完全自适应的方法。接下来介绍一种不受Heisenberg不确定原理限制、同时还有更好的自适应性的时频分析方法——希尔伯特黄变换

    希尔伯特变换(Hilbert Transform, HT)


    在介绍希尔伯特黄变换之前,我们先介绍一下希尔伯特变换。

    希尔伯特变换也是傅里叶变换的一种扩展,它常常用于通信系统中的调制解调,当然它也可以用于信号的时频分析。其计算方法为

    1. 计算输入信号的FFT,保存为向量F

    2. 创建一个向量h,其中
      h ( i ) = { 1 , i = 1 , n 2 + 1 2 , i = 2 , 3 , ⋯   , n 2 0 , i = n 2 + 2 , ⋯   , n h(i)=\begin{cases}1&,i=1,\frac{n}{2}+1 \\2&,i=2,3,\cdots,\frac{n}{2}\\0&,i=\frac{n}{2}+2,\cdots,n\end{cases} h(i)=120,i=1,2n+1,i=2,3,,2n,i=2n+2,,n

    3. 计算F与h的内积

    4. 计算上步得到的序列的iFFT

    稍微介绍下它在通信系统中的应用,利用MATLAB中的hilbert函数对一个扫频信号进行希尔伯特变换,得到的结果是一个解析信号,在同一坐标系画出该解析信号的实数部分和虚数部分,如下图

    04-Hilbert-01

    可见虚数部分较实数部分滞后 π / 2 \pi / 2 π/2,我们可以利用这个性质消掉负频率。使用MATLAB中的fft函数对一个信号进行傅里叶变换,结果中的负频率保存在下半轴。如下是一个扫频信号的幅度谱以及使用希尔伯特变换得到的解析信号的幅度谱

    04-Hilbert-02

    由上图可见,解析信号的幅度谱没有负频率,并且各个频率分量的幅度是原来实信号的两倍。

    通过希尔伯特变换可以得到没有负频率的解析信号,基于此可以实现信号的单边带调制,从而节省带宽和降低发射功率。感兴趣可以继续查看使用希尔伯特变换进行单边带幅度调制

    继续探讨基于希尔伯特变换的时频分析。在时频分析领域,希尔伯特变换主要用于瞬时频率估计。

    由上述分析可知使用希尔伯特变换可以得到原始信号的解析信号,假设解析信号为 z ( t ) z(t) z(t)
    z ( t ) = c ( t ) + j y ( t ) = a e j θ ( t ) z(t)=c(t)+jy(t)=ae^{j\theta(t)} z(t)=c(t)+jy(t)=aejθ(t)
    其中 a ( t ) = c ( t ) 2 + y ( t ) 2 a(t)=\sqrt{c(t)^2+y(t)^2} a(t)=c(t)2+y(t)2 ,表示瞬时幅值, θ ( t ) = a r c t a n y ( t ) c ( t ) \theta(t)=arctan\frac{y(t)}{c(t)} θ(t)=arctanc(t)y(t),表示瞬时相位, ω = d θ ( t ) d t \omega=\frac{d\theta(t)}{dt} ω=dtdθ(t),表示瞬时频率。由瞬时幅值和瞬时频率可将信号表示为
    x ( t ) = a ( t ) e j ∫ ω ( t ) d t x(t)=a(t)e^{j\int\omega(t)dt} x(t)=a(t)ejω(t)dt
    若使用 ∣ a ( t ) ∣ 2 |a(t)|^2 a(t)2表示瞬时能量,则可在时间-频率面上画出信号的瞬时能量分布,这个分布谱图就是Hilbert谱,记为 H ( ω , t ) H(\omega,t) H(ω,t)。如下为一个0~100Hz扫频信号的时域信号和它的Hilbert谱

    04-Hilbert-03

    上图中的信号为单频率成分信号,即同一时刻只有一个频率分量的信号,我们可以由Hilbert谱很好地观察出信号的时频特征,且有很高的的时间分辨率,但是信号边界处的误差往往较大。

    如果是对一个多频率成分信号(同一时刻有多个频率分量的信号)进行希尔伯特变换,结果会怎样呢?如下为两路扫频信号叠加信号的Hilbert谱

    04-Hilbert-04

    从上图中的Hilbert谱我们并不能概括出该信号的时频特征,所以对多频率成分信号不能直接进行Hilbert变换,我们还需要对其进行进一步处理,将原始信号分解成单频率信号的叠加,这就要用到希尔伯特黄变换中的EMD分解。

    希尔伯特黄变换(Hilbert-Huang Transform, HHT)


    相比于HT,HHT就多了一个经验模态分解(Empirical Mode Decomposition, EMD),EMD就是把复杂信号分解成从高频到低频的若干个固有模态函数(Intrinsic Mode Function, IMF),IMF需要满足两个条件:

    1. 信号极值点的数量与零点数相等或相差为1
    2. 信号的由极大值定义的上包络和由极小值定义 的下包络的局部均值为0(即包络上下对称)

    简单的理解就是,EMD是依次提取信号在每个局部的最高频分量的过程,所以每个IMF实际上是一个单频率分量信号,这样我们就可以对每个IMF分量进行Hilbert变换,从而得到每个分量的Hilbert谱。如下是对两个扫频信号叠加后的信号进行EMD分解得到的IMF分量

    04-Hilbert-05-EMD

    对上述的IMF分量进行Hilbert变换,求得Hilbert谱,如下

    04-Hilbert-06-HHT

    从上图我们大致可以看出信号的时频特性:该信号是一个0 ~ 250Hz二次递增的扫频信号和一个250 ~ 0Hz二次递减的扫频信号的叠加。

    当然HHT并不是完美的,目前对于它的关键步骤EMD分解的研究尚不完善,缺乏一些理论基础。从上图我们也可以看到,HHT在低频区域可能会出现一些不存在的频率分量。

    参考


    https://blog.csdn.net/Forlogen/article/details/88535027

    https://www.sohu.com/a/246972969_607269

    唐晓初. 小波分析及其应用[M]. 重庆大学出版社, 2006.

    Marple L . Computing the discrete-time “analytic” signal via FFT[J]. IEEE Transactions on Signal Processing, 1999.

    罗利春. 用希尔伯特变换构造解析信号进行时频分析[J]. 航天电子对抗, 2003(03):27-30.

    Qian S , Chen D . Joint time-frequency analysis[J]. IEEE Signal Processing Magazine, 1999, 16(2): P.52-67.

    展开全文
  • OpenCV中的图像变换——傅里叶变换

    万次阅读 多人点赞 2021-07-22 20:11:24
    这篇博客将介绍OpenCV中的图像变换,包括用Numpy、OpenCV计算图像的傅里叶变换,以及傅里叶变换的一些应用;

    这篇博客将介绍OpenCV中的图像变换,包括用Numpy、OpenCV计算图像的傅里叶变换,以及傅里叶变换的一些应用;

    2D Discrete Fourier Transform (DFT)二维离散傅里叶变换
    Fast Fourier Transform (FFT) 快速傅里叶变换

    傅立叶变换用于分析各种滤波器的频率特性。对于图像采用二维离散傅立叶变换(DFT)求频域。一种称为快速傅立叶变换(FFT)的快速算法用于DFT的计算。

    • OpenCV使用cv2.dft()、cv2.idft() 实现傅里叶变换,效率更高一些(比OpenCV快3倍)
    • Numpy使用np.ifft2() 、np.fft.ifftshift() 实现傅里叶变换,使用更友好一些;

    1. 效果图

    灰度图 VS 傅里叶变换效果图如下:
    可以看到白色区域大多在中心,显示低频率的内容比较多。
    在这里插入图片描述
    傅里叶变换去掉低频内容后效果图如下:

    可以看到使用矩形滤波后,效果并不好,有波纹的振铃效果;用高斯滤波能好点;
    在这里插入图片描述
    傅里叶变换去掉高频内容后效果图如下:
    删除图像中的高频内容,即将LPF应用于图像,它实际上模糊了图像。
    在这里插入图片描述
    各滤波器是 HPF(High Pass Filter)还是 LPF(Low Pass Filter),一目了然:
    拉普拉斯是高频滤波器;
    在这里插入图片描述

    2. 原理

    • DFT的性能优化:在一定的阵列尺寸下,DFT计算的性能较好。当数组大小为2的幂时,速度最快。大小为2、3和5的乘积的数组也可以非常有效地处理。

    为达到最佳性能,可以通过OpenCV提供的函数cv2.getOptimalDFTSize() 寻找最佳尺寸。
    然后将图像填充成最佳性能大小的阵列,对于OpenCV,必须手动填充零。但是对于Numpy,可以指定FFT计算的新大小,会自动填充零。

    通过使用最优阵列,基本能提升4倍的效率。而OpenCV本身比Numpy效率快近3倍;

    拉普拉斯是高通滤波器(High Pass Filter)

    3. 源码

    3.1 Numpy实现傅里叶变换

    # 傅里叶变换
    
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('ym3.jpg', 0)
    
    # 使用Numpy实现傅里叶变换:fft包
    # fft.fft2() 进行频率变换
    # 参数1:输入图像的灰度图
    # 参数2:>输入图像 用0填充;  <输入图像 剪切输入图像; 不传递 返回输入图像
    f = np.fft.fft2(img)
    
    # 一旦得到结果,零频率分量(直流分量)将出现在左上角。
    # 如果要将其置于中心,则需要使用np.fft.fftshift()将结果在两个方向上移动。
    # 一旦找到了频率变换,就能找到幅度谱。
    fshift = np.fft.fftshift(f)
    magnitude_spectrum = 20 * np.log(np.abs(fshift))
    
    plt.subplot(121), plt.imshow(img, cmap='gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.show()
    
    # 找到了频率变换,就可以进行高通滤波和重建图像,也就是求逆DFT
    rows, cols = img.shape
    crow, ccol = rows // 2, cols // 2
    fshift[crow - 30:crow + 30, ccol - 30:ccol + 30] = 0
    f_ishift = np.fft.ifftshift(fshift)
    img_back = np.fft.ifft2(f_ishift)
    img_back = np.abs(img_back)
    
    # 图像渐变章节学习到:高通滤波是一种边缘检测操作。这也表明大部分图像数据存在于频谱的低频区域。
    # 仔细观察结果可以看到最后一张用JET颜色显示的图像,有一些瑕疵(它显示了一些波纹状的结构,这就是所谓的振铃效应。)
    # 这是由于用矩形窗口mask造成的,掩码mask被转换为sinc形状,从而导致此问题。所以矩形窗口不用于过滤,更好的选择是高斯mask。)
    plt.subplot(131), plt.imshow(img, cmap='gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(132), plt.imshow(img_back, cmap='gray')
    plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
    plt.subplot(133), plt.imshow(img_back)
    plt.title('Result in JET'), plt.xticks([]), plt.yticks([])
    
    plt.show()
    

    3.2 OpenCV实现傅里叶变换

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('ym3.jpg', 0)
    rows, cols = img.shape
    print(rows, cols)
    
    # 计算DFT效率最佳的尺寸
    nrows = cv2.getOptimalDFTSize(rows)
    ncols = cv2.getOptimalDFTSize(cols)
    print(nrows, ncols)
    
    nimg = np.zeros((nrows, ncols))
    nimg[:rows, :cols] = img
    img = nimg
    
    # OpenCV计算快速傅里叶变换,输入图像应首先转换为np.float32,然后使用函数cv2.dft()和cv2.idft()。
    # 返回结果与Numpy相同,但有两个通道。第一个通道为有结果的实部,第二个通道为有结果的虚部。
    dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
    dft_shift = np.fft.fftshift(dft)
    
    magnitude_spectrum = 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(magnitude_spectrum, cmap='gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.show()
    
    rows, cols = img.shape
    crow, ccol = rows // 2, cols // 2
    
    # 首先创建一个mask,中心正方形为1,其他均为0
    # 如何删除图像中的高频内容,即我们将LPF应用于图像。它实际上模糊了图像。
    # 为此首先创建一个在低频时具有高值的掩码,即传递LF内容,在HF区域为0。
    mask = np.zeros((rows, cols, 2), np.uint8)
    mask[crow - 30:crow + 30, ccol - 30:ccol + 30] = 1
    
    # 应用掩码Mask和求逆DTF
    fshift = dft_shift * mask
    f_ishift = np.fft.ifftshift(fshift)
    img_back = cv2.idft(f_ishift)
    img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])
    
    plt.subplot(121), plt.imshow(img, cmap='gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(img_back, cmap='gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.show()
    

    3.3 HPF or LPF?

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    # 简单的均值滤波
    mean_filter = np.ones((3, 3))
    
    # 构建高斯滤波
    x = cv2.getGaussianKernel(5, 10)
    gaussian = x * x.T
    
    # 不同的边缘检测算法Scharr-x方向
    scharr = np.array([[-3, 0, 3],
                       [-10, 0, 10],
                       [-3, 0, 3]])
    # Sobel_x
    sobel_x = np.array([[-1, 0, 1],
                        [-2, 0, 2],
                        [-1, 0, 1]])
    # Sobel_y
    sobel_y = np.array([[-1, -2, -1],
                        [0, 0, 0],
                        [1, 2, 1]])
    # 拉普拉斯
    laplacian = np.array([[0, 1, 0],
                          [1, -4, 1],
                          [0, 1, 0]])
    
    filters = [mean_filter, gaussian, laplacian, sobel_x, sobel_y, scharr]
    filter_name = ['mean_filter', 'gaussian', 'laplacian', 'sobel_x', \
                   'sobel_y', 'scharr_x']
    fft_filters = [np.fft.fft2(x) for x in filters]
    fft_shift = [np.fft.fftshift(y) for y in fft_filters]
    mag_spectrum = [np.log(np.abs(z) + 1) for z in fft_shift]
    
    for i in range(6):
        plt.subplot(2, 3, i + 1), plt.imshow(mag_spectrum[i], cmap='gray')
        plt.title(filter_name[i]), plt.xticks([]), plt.yticks([])
    
    plt.show()
    
    

    参考

    展开全文
  • 小波变换 完美通俗解读 对小波变换进行解读 适合新手
  • 图像线性变换是仿射变换的子集,包括图像的旋转、错切、缩放以及几者的组合叠加,线性变换的图像和原图像相比,坐标原点保持不变、直线变换后是直线或原点,平行线变换后还是平行。所有图像线性变换都可以使用图像...
    展开全文
  • 本文介绍了仿射变换的类型及其关系以及仿射变换矩阵,基本的仿射变换包括平移、旋转、缩放和错切,镜像可以看做特殊的缩放。实际中一般图像的仿射变换就是平移、旋转、缩放和错切的叠加组合,每叠加一个处理,就进行...
    展开全文
  • 本文介绍了组合(也称复合)仿射变换的概念、变换过程以及变换矩阵,并以绕指定点旋转的组合变换、指定直线作为依赖轴的组合变换详细介绍了变换过程和变换矩阵的构成,有助于深入理解仿射变换的概念和处理过程。
  • 作者丨咚懂咚懂咚@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/22450818转载丨极市平台导读想要正确的认识小波变换就必须先了解傅里叶变换,本文作...
  • 这个文件适合基于小波变换图像压缩方法,对图像进行小波变换的压缩!希望你能用的到!
  • 拉普拉斯变换

    千次阅读 2021-02-25 18:00:24
    阅读本文之前,建议先阅读我的另一篇文章《傅里叶级数与傅里叶变换公式推导》,这是本文的基础。 另外可参考视频【中文翻译配音】3D动画详细解释傅里叶与拉普拉斯变换! 以及 珂学原理」No. 26「拉普拉斯变换了什么 ...
  • 浅谈傅里叶变换、小波变换、HHT变换

    千次阅读 多人点赞 2019-08-29 12:18:42
    浅谈傅里叶变换、小波变换、HHT变换一、傅里叶变换1.1傅里叶变换介绍二、小波变换2.1小波变换正反变换公式2.2小波变换适应场景及其优缺点2.3小波变换的应用三、HHT变换3.1HHT产生的背景3.1 HHT变换介绍3.2 HHT对信号...
  • 傅里叶梅林变换参考matlab代码

    热门讨论 2015-12-14 22:08:49
    网上找的傅里叶梅林变换matlab代码,可以参考,缩放部分没有实现
  • DCT变换

    千次阅读 2019-09-26 10:41:01
    DCT变换 1.DCT变换公式及其性质 傅里叶变换表明,任何信号都能表示为多个不同振幅和频率的正弦或者余弦信号的叠加。如果采用的是余弦函数,则信号分解过程称为余弦变换;若输入信号是离散的,则称之为离散余弦变换...
  • 2020-03-19拉氏变换与傅立叶变换拉氏变换(Laplace transform)是应用数学中常用的一种积分变换,其符号为 L[f(t)] 。拉氏变换是一个线性变换,可将一个有实数变数的函数转换为一个变数为复数 s 的函数: 拉氏变换在...
  • 复习一下解析几何中关于正交变换和仿射变换的内容,教材是《解析几何》丘维声。
  • ... 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况...可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图: 参考:http://wenku.baidu.com/view/826a796027d3240c8447...
  • 傅里叶变换和傅里叶逆变换的C++代码,亲测,有详细的解释。 有问题可以留言。
  • 拉普拉斯变换的几何直观理解

    千次阅读 多人点赞 2021-02-22 22:05:03
    傅里叶变换具有非常广泛的应用,但是也有明显的缺点,就是对函数的要求太苛刻,主要便现在: 要求函数在绝对可积,即满足, 傅里叶变换存在.这个条件要求当,,事实上,很多函数都不满足这个条件,比如,正弦和余弦...
  • 全面解析傅立叶变换(非常详细)

    万次阅读 2020-12-21 11:17:05
    前言第一部分、 DFT第一章、傅立叶变换的由来第二章、实数形式离散傅立叶变换(Real DFT)从头到尾彻底理解傅里叶变换算法、下第三章、复数第四章、复数形式离散傅立叶变换前言:“关于傅立叶变换,无论是书本还是在...
  • [Python图像处理六] :Opencv图像傅里叶变换和傅里叶逆变换原理及实现 一、傅里叶变换 1、傅里叶变换原理 2、自定义傅里叶变换功能函数 3、OpenCV库函数实现傅里叶变换 二、傅里叶逆变换 1、傅里叶逆变换原理 2、...
  • 在matlab中对图像进行傅里叶变换和逆变换。注意:m文件中的文件路径是在本人电脑上的路径,用户应修改成在您电脑中图片的绝对路径。谢谢大家的支持!
  • 在机器视觉系统中,镜头是重要成像部件之一,而基于小孔成像原理的工业镜头往往会产生透视畸变现象,如何校正畸变是进行图像分析的前提,这其中就会用到投影变换,也是几何变换的一种。除此之外,图像处理中常用到的...
  • 小波变换一之Haar变换

    千次阅读 多人点赞 2019-01-17 04:48:09
    小波变换一之Haar变换Haar变换案例一简单一维信号变换案例二多分辨率一维信号变换 注: 小波变换系列博文打算记录自己学习小波变换的心路历程,每篇博文尽量简短,宗旨是用最少的数学公式说明白如何使用小波变换 我...
  • 傅里叶变换和小波变换分析

    万次阅读 多人点赞 2018-06-23 10:32:04
    一、前言 &nbsp; &nbsp; &nbsp;&...我们经常接触到的信号,正弦信号,余弦信号,甚至是...得到变换域的信号,通常接触到的变换主要有傅里叶变换、拉普拉斯变换、Z变换、小波变换等等,今天主要讨论下...
  • 小波变换的理解

    千次阅读 多人点赞 2020-11-01 21:26:25
    文章目录前言一、傅里叶变换的劣势以及小波变换的优势二、连续小波变换(CWT)的理解2.1 什么是小波变换?2.2 为什么小波变换能确定信号频率和其对应的时间区间?2.3 连续小波变换最大的特点是什么?2.4 其它补充三...
  • 傅里叶变换(一)——认识傅里叶变换

    万次阅读 多人点赞 2018-05-29 22:36:07
    注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!...一、什么是傅里叶变换   时域及频域  在讲...
  • 傅立叶变换、Gabor变换与小波变换

    万次阅读 多人点赞 2018-05-08 21:25:16
    傅立叶变换数字图像处理的方法主要分成两种:空域分析法和频域分析法。空域分析法就是对图像矩阵进行处理;频域分析法是通过图像变换将图像从空域变换到频域,从另外一个角度来分析图像的特征并进行处理。频域分析法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 725,339
精华内容 290,135
关键字:

变换

友情链接: chatsvc.rar