精华内容
下载资源
问答
  • 数字图像处理——第4章 ...上一章学的灰度变换和空间滤波,主要目的是减少噪声和平滑图像,同时也是在空间域进行的图像增强操作。而这章主要是频率域滤波,滤波的概念在上一章节有涉及到,所以先了解下频率域频率域

    数字图像处理——第4章 频率域滤波

    频率域

    上一章学的灰度变换和空间滤波,主要目的是减少噪声和平滑图像,同时也是在空间域进行的图像增强操作。而这章主要是频率域滤波,滤波的概念在上一章节有涉及到,所以先了解下频率域。频率域是指从函数的频率角度出发分析函数,和频率域相对的是时间域。简单说就是如果从时间域分析信号时,时间是横坐标,振幅是纵坐标。而在频率域分析的时候则是频率是横坐标,振幅是纵坐标。那么下一个问题就是为什么要在频率域中进行图像处理? 1). 可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通;2). 滤波在频率域更为直观,它可以解释空间域滤波的某些性质; 3).可以在频率域指定滤波器,做反变换,然后在空间域使用结果滤波器作为空间域滤波器的指导。

    频率域滤波是对图像进行傅里叶变换,将图像由图像空间转换到频域空间,然后在频率域中对图像的频谱作分析处理,以改变图像的频率特征。

    1.傅里叶级数原理

    傅里叶是18世纪法国的一位伟大的数学家。他指出任何周期函数都可以表示为不同频率的正弦和或者余弦和的形式,每个正弦或者余弦乘以不同的系数就是傅里叶级数。无论函数有多复杂,只要它是周期性的,并且满足一定的数学条件,就一定可以用这样的正弦和或者余弦和的形式来表示。翻开考完研没扔的高数,回看到傅里叶级数,公式如下:
    f(x)=a02+n=1(ancosnπlx+bnsinnπlx) f(x)=\frac{a_{0}}{2}+\sum_{n=1}^{\infty}\left(a_{n} \cos \frac{n \pi}{l} x+b_{n} \sin \frac{n \pi}{l} x\right)
    其中:

    an=1lllf(x)cosnπlx dx,n=0,1,2,,a0n=0 a_{n}=\frac{1}{l} \int_{-l}^{l} f(x) \cos \frac{n \pi}{l} x \mathrm{~d} x, n=0,1,2, \cdots,其中a_{0}为n=0时

    bn=1lllf(x)sinnπlx dx,n=0,1,2,, b_{n}=\frac{1}{l} \int_{-l}^{l} f(x) \sin \frac{n \pi}{l} x \mathrm{~d} x, n=0,1,2, \cdots,

    除此之外,若展开式中只有正弦函数,则称其为正弦函数;相反,若展开式中只有余弦函数,则称其为余弦级数。

    1.1.一维傅里叶变换

    傅里叶变换:

    F(μ)=+f(t)ej2πμtdt F(\mu)=\int_{-\infty}^{+\infty} f(t) e^{-j 2 \pi \mu t} d t
    傅里叶反变换:
    f(t)=+F(μ)ej2πμtdμ f(t)=\int_{-\infty}^{+\infty} F(\mu) e^{j 2 \pi \mu t} d \mu
    2πμt其中,2 \pi \mu代表频率,t代表时间。傅里叶变换认为一个周期函数(信号)包含多个频率分量,任意函数(信号)f(t)可通过多个周期函数(基函数)相加而合成。从物理角度理解傅里叶变换是以一组特殊的函数(三角函数)为正交基,对原函数进行线性变换,物理意义便是原函数在各组基函数的投影

    1.2.二维傅里叶变换

    同样连续的傅里叶变换为:
    F(μ,v)=++f(t,z)ej2π(μt+vz)dtdz F(\mu, v)=\int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} f(t, z) e^{-j 2 \pi(\mu t+v z)} d t d z
    它的反变换:
    f(t,z)=++F(μ,v)ej2π(μt+vz)dμdv f(t, z)=\int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} F(\mu, v) e^{j 2 \pi(\mu t+v z)} d \mu d v
    傅里叶逆变换是将图像的频率分布函数变换为灰度分布函数傅里叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,通常用一个二维矩阵表示空间上各点,记为z=f(x,y)。又因空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就必须由梯度来表示,这样我们才能通过观察图像得知物体在三维空间中的对应关系。

    傅里叶频谱图上我们看到的明暗不一的亮点,其意义是指图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅里叶变换后的频谱图,也叫功率图,我们就可以直观地看出图像的能量分布:如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小);反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的、边界分明且边界两边像素差异较大的。

    2.python×傅里叶级数

    理论过于抽象,还是实实在在的用代码折腾一下比较好理解。首先我们需要一个原函数:
    f(x)={exp(x),πx<01,0x<π f(x)=\left\{\begin{array}{lr} \exp (x), & -\pi \leq x<0 \\ 1, & 0 \leq x<\pi \end{array}\right.
    函数图像如下:

    在这里插入图片描述

    可以用numpy和plt画出,代码如下:

    import os
    import cv2
    from pylab import *
    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-3,pi)# 定义x轴
    cond = [True if (i>-pi and i<0) else False for i in x] #使用列表解析的方法
    y=1*(x>0)+np.exp(x)*cond # y的函数
    plt.plot(x,y)
    plt.show()
    

    接着算出该函数的a0,an,bn,最后自定义函数画出傅里叶级数变换,图像如下:

    在这里插入图片描述

    由上图看出,这图像就有正弦余弦内味了,周期函数都可以表示为不同频率的正弦和或者余弦和的形式。代码如下,建议做这种小实验使用jupyter,方便快捷

    import os
    import cv2
    from pylab import *
    import matplotlib.pyplot as plt
    import numpy as np
    x = mgrid[-10:10:0.2]
    n = arange(1, 1000)
    def fourier_transform():
        a0 = (1-exp(-pi))/pi+1
        s = a0 / 2
        for i in range(1, 100, 1):
            s0 = ((1-(-1)**i*exp(-pi))/(pi*(1+i**2))*cos(i*x)+1/pi*( (-i*(1-(-1)**i*exp(-pi)))/(1+i**2) + (1-(-1)**i)/i ) * sin(i*x))
            s = s + s0 
        plot(x,s,'orange',linewidth=0.6)
        title('fourier_transform')
        show() 
    fourier_transform()
    

    2.1.傅里叶变换后的频谱图

    使用傅里叶变换获得的频谱图。图像的主要成分是低频信息,它形成了图像的基本灰度等级,对图像结构的决定作用较小;高频信息形成了图像的边缘和细节,是在中频信息上对图像内容的进一步强化。
    在这里插入图片描述
    如上图所示,中间的亮点代表着图像的低频,其余周围则表示图像的高频信息。若不将低频信息移至中间,则低频信息过于分散,频谱未中心化如下图所示:
    在这里插入图片描述
    代码如下所示:

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    # 读取图片
    img = cv2.imread(' ', 0)
    
    # 进行float32形式转换
    float32_img = np.float32(img)
    
    # 使用cv2.dft进行傅里叶变化
    dft_img = cv2.dft(float32_img, flags=cv2.DFT_COMPLEX_OUTPUT)
    
    # 使用np.fft.shiftfft()将变化后的图像的低频转移到中心位置
    dft_img_ce = np.fft.fftshift(dft_img)
    
    # 使用cv2.magnitude将实部和虚部转换为实部,乘以20是为了使得结果更大
    # img_dft = 20 * np.log(cv2.magnitude(dft_img_ce[:, :, 0], dft_img_ce[:, :, 1]))
    # 频谱未中心化
    img_dft = 20 * np.log(cv2.magnitude(dft_img[:, :, 0], dft_img[:, :, 1]))
    # 进行画图操作
    plt.subplot(121) # 我是第一行第二列的第一个
    plt.imshow(img, cmap='gray')
    plt.subplot(122)
    plt.imshow(img_dft, cmap='gray')
    plt.show()
    

    3.频率域滤波

    3.1.低频与高频

    低频对应图像内变换缓慢的灰度分两。例如在一幅大草原的图像中,低频对应着广袤的颜色趋于一致的草原。总结就是低频是图像中平坦的,灰度变化不大的点,图像中的大部分区域

    高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过度造成的,例如,还是大草原那幅图像,若图像中有一只狮子,则狮子的边缘信息就是高频。总结就是高频是图像中灰度变化剧烈的点,一般是图像轮廓或者是噪声

    根据图像的高频与低频的特征,我们可以设计相应的高通与低通滤波器。通过低频的滤波器叫做低通滤波器,通过高频的滤波器叫做高通滤波器。高通滤波可以检测图像中尖锐、变化明显的地方;低通滤波可以让图像变得光滑,滤除图像中的噪声

    3.2.频率域滤波步骤

    为了方便下述低通高通滤波器的实验,必须先明确频率域滤波的基本步骤。

    1. 首先将图片读取成灰度图且转化为np.float32()
    2. 使用cv2.dft函数进行傅里叶变化
    3. 使用np.fft.fftshift函数将低频转移到图像中心
    4. 定义掩模:生成的掩模中间为1周围为0
    5. 将掩模与傅里叶变化后图像相乘,保留中间部分
    6. 使用np.fft.ifftshift将低频移动到原来的位置
    7. 使用cv2.idft进行傅里叶的反变化
    8. 使用cv2.magnitude转化为空间域内
    9. 使用plt进行绘图展示

    由上述叙述可知,滤波的关键取决于滤波函数,也称为滤波器,因为它在滤波中抑制或除去了频谱中的某些分量,而保留其他的一些频率不受影响,从而达到滤波的目的。而下述的 低通滤波器和高通滤波器的不同点,便在于定义不同的滤波,即步骤中的掩模,不同的滤波将产生不同的效果。

    3.3.低通滤波器

    理想的低通滤波器模板为:
    H(u,v)={1,D(u,v)D00,D(u,v)>D0 H(u, v)=\left\{\begin{array}{ll} 1, & D(u, v) \leq D_{0} \\ 0, & D(u, v)>D_{0} \end{array}\right.
    其中,D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下:
    D(u,v)=(uM/2)2+(vN/2)2 \mathrm{D}(u, v)=\sqrt{(u-M / 2)^{2}+(v-N / 2)^{2}}
    M和N表示频谱图像的大小,(M/2,N/2)即为频谱中心。低通滤波器代码如下所示:

    # 低通滤波器
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    # 第一步读入图片
    img = cv2.imread(' ', 0)# filepath
    # 使用cv2.dft进行傅里叶变化
    dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
    # 使用np.fft.fftshift将低频转移到图像中心
    dft_center = np.fft.fftshift(dft)
    # 定义掩模:生成的掩模中间为1周围为0
    crow, ccol = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得图像的中心点位置
    mask = np.zeros((img.shape[0], img.shape[1], 2), np.uint8)
    mask[crow-30:crow+30, ccol-30:ccol+30] = 1
    
    # 将掩模与傅里叶变化后图像相乘,保留中间部分
    mask_img = dft_center * mask
    
    # 使用np.fft.ifftshift(将低频移动到原来的位置
    img_idf = np.fft.ifftshift(mask_img)
    
    # 使用cv2.idft进行傅里叶的反变化
    img_idf = cv2.idft(img_idf)
    
    # 使用cv2.magnitude转化为空间域内
    img_idf = cv2.magnitude(img_idf[:, :, 0], img_idf[:, :, 1])
    
    # 进行绘图操作
    plt.subplot(121)
    plt.imshow(img, cmap='gray')
    plt.subplot(122)
    plt.imshow(img_idf, cmap='gray')
    plt.show()
    

    在这里插入图片描述

    由实验可以看出,图片经过低通滤波器,使低频通过而使高频衰减 ,降低了图像变换的幅度。平滑且模糊掉了尖锐和边缘部分。保留了图像的整体概貌(低频部分),去掉了图像的细节(高频部分)

    3.4.高通滤波器

    和低通滤波器相反,理想的高通滤波器为:
    H(u,v)={0,D(u,v)D0)1,D(u,v)>D0) H(u, v)=\left\{\begin{array}{ll} 0, & \left.\mathrm{D}(\mathrm{u}, \mathrm{v}) \leq D_{0}\right) \\ 1, & \left.\mathrm{D}(\mathrm{u}, \mathrm{v})>D_{0}\right) \end{array}\right.
    其中,D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下:
    D(u,v)=(uM/2)2+(vN/2)2 \mathrm{D}(u, v)=\sqrt{(u-M / 2)^{2}+(v-N / 2)^{2}}

    常见的巴特沃斯高通滤波器(BHPF)公式如下:
    H(u,v)=11+[D0/D(u,v)]2n H(u, v)=\frac{1}{1+\left[D_{0} / D(u, v)\right]^{2 n}}
    还有高斯高通滤波器(GHPF):
    H(u,v)=1eD2(u,v)/2σ2,σ=D0 H(u, v)=1-e^{-D^{2}(u, v) / 2 \sigma^{2}}, \sigma=D_{0}

    # 实现高通滤波器
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    #读取图像
    img = cv2.imread(' ', 0) # filepath
    #傅里叶变换
    dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
    fshift = np.fft.fftshift(dft)
    #设置高通滤波器
    rows, cols = img.shape
    crow,ccol = int(rows/2), int(cols/2) #中心位置
    mask = np.ones((rows, cols, 2), np.uint8) # 低通滤波器这是np.zeros
    mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # 低通滤波器这就是1
    #掩膜图像和频谱图像乘积
    f = fshift * mask
    #傅里叶逆变换
    ishift = np.fft.ifftshift(f)
    iimg = cv2.idft(ishift)
    res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
    #显示原始图像和高通滤波处理图像
    plt.subplot(121), plt.imshow(img, 'gray')
    plt.subplot(122), plt.imshow(res, 'gray')
    plt.show()
    

    实现效果如下图所示:

    在这里插入图片描述

    由上述实验可以看出:高通滤波器使高频通过而使低频衰减,被高通滤波的图像比原始图像少灰度级的平滑过渡而突出边缘等细节部分,保留了图像的细节,模糊了概貌。也就是边缘信息更加突出,例如轮廓

    3.5.低通与高通滤波器实验总结

    由上述实验可看出,低通滤波器的滤波定义为:

    crow, ccol = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得图像的中心点位置
    mask = np.zeros((img.shape[0], img.shape[1], 2), np.uint8)
    mask[crow-30:crow+30, ccol-30:ccol+30] = 1
    

    高通滤波器的滤波为:

    crow, ccol = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得图像的中心点位置
    mask = np.ones((img.shape[0], img.shape[1], 2), np.uint8) # 低通滤波器这是np.zeros
    mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # 低通滤波器这就是1
    

    相同点在于定义的掩模大小和图片大小相同,不同点在于低通滤波器中间为1,那么经过傅里叶变换的图像和掩模相乘之后,便只保留中间部分;相反,高通滤波器中间为0,经过傅里叶变换的图像和掩模相乘之后,便只保留边缘部分

    展开全文
  • 很多情况下,频率域滤波和空间域滤波可视为对于同一图像增强问题的殊途同归的两种解决方式。一些在空间域困难的增强任务,在频率域中变得非常普通。 傅里叶级数:任何周期函数可表示为不同频域的正弦和/或余弦之和的...


    本章主要介绍傅里叶变换的基本原理,并在基本的图像滤波中使用傅里叶变换。
    很多情况下,频率域滤波和空间域滤波可视为对于同一图像增强问题的殊途同归的两种解决方式。一些在空间域困难的增强任务,在频率域中变得非常普通。

    傅里叶级数:任何周期函数可表示为不同频域的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数,这个和的形式称为傅里叶级数。
    傅里叶变换:非周期函数(但该曲线下的面积是有限的)也可以用正弦和/或余弦乘以加权函数的积分表示。

    傅里叶级数或傅里叶变换表示的函数特征完全可以通过傅里叶反变换来重建,且不丢失任何信息。故傅里叶变换可以使我们工作在频率域,而在转换回空间域时不丢失任何信息。

    一、傅里叶变换基础知识

    1.1 复数

    在这里插入图片描述
    R和I是实数,j是一个等于-1的平方根的虚数。R表示实部,I表示虚部。
    复数C的共轭复数(实部相等,虚部相反):
    在这里插入图片描述
    欧拉公式
    在这里插入图片描述

    1.2 傅里叶级数

    具有周期T的连续变量t的周期函数f(t)可描述为乘以适当系数的正弦和余弦之和,这个和即为傅里叶级数,形式如下:
    在这里插入图片描述
    其中
    在这里插入图片描述

    1.3 一维连续函数傅里叶变换对

    f(t)为非周期函数。
    正变换
    在这里插入图片描述
    f(x)表示原函数,F(u)表示变换之后的函数。u为频率域变量。
    反变换
    在这里插入图片描述

    1.4 一维离散傅里叶变换对(DFT)

    一维函数f(x) (其中x = 0,1,2,……,M-1)。
    在这里插入图片描述

    • 在频域下变换F(u)也是离散的,其定义域仍为0~M-1 ,因为F(u)是周期性的,周期为M。
      在这里插入图片描述
    • 1/M的系数也可以位于正变换前。更一般的情况是保证正变换和反变换前的系数乘积为1/M即可。

    1.5 二维连续傅里叶变换对

    在这里插入图片描述

    1.6 二维离散傅里叶变换对

    在这里插入图片描述
    f(x,y)是大小为M x N的数字图像。(x,y)表示空间域坐标,(u,v)表示频率域坐标。
    同样,1/MN的位置并不重要,也可放在正变换前面。正反变换前的系数乘积为1/MN即可。

    1.7 卷积定理

    在频率域中,我们感兴趣的是具有连续变量t的两个连续函数的卷积。
    空间域中两个函数的卷积的傅里叶变换,等于两个函数的傅里叶变换在频率域的乘积。反之,有频率域两个变换的乘积,可通过计算傅里叶反变换得到空间域的卷积。
    空间域中两个函数的乘积的傅里叶变换,等于两个函数的傅里叶变换在频率域的卷积;反之,有频率域两个变换的卷积,可以通过计算傅里叶反变换得到空间域的乘积。
    在这里插入图片描述
    卷积的离散等价表示:
    在这里插入图片描述
    x = 0,1,2……M-1
    星号算子表示卷积。t所在的域为空间域,u所在的域为频率域。
    卷积定理是频率域滤波的基础。

    1.8 二维卷积定理

    在这里插入图片描述
    在这里插入图片描述
    第一个公式:
    两个空间函数的卷积可以通过计算两个傅立叶变换函数的乘积的逆变换得到;相反,两个空间函数卷积的傅立叶变换恰好等于两个函数的傅立叶变换的乘积
    第二个公式同理。

    1.9 二维离散傅里叶变换的性质

    周期性

    二维傅里叶变换及其反变换在u方向和v方向是无限周期的。
    在这里插入图片描述
    其中k1和k2是整数。

    傅里叶谱和相角

    二维DFT通常是复函数,可用极坐标形式表示:
    在这里插入图片描述
    傅里叶谱(频谱)
    在这里插入图片描述
    频谱是图像增强中最关心的主要对象,频域下每一点(u,v)的|F(u,v)|可用来表示该频率的正弦(余弦)平面波在叠加中所占的比例。频谱直接反应频率信息,是频率域滤波的一个主要依据。
    相位角
    在这里插入图片描述
    相位角表面上看并不那么直观,但它隐含着实部与虚部之间的某种比例关系,因此与图像结构息息相关。
    功率谱(谱密度)
    在这里插入图片描述
    R和I分别为F(u,v)的实部和虚部。

    对称性

    实函数f(x,y)的傅里叶变换是共轭对称的。
    在这里插入图片描述
    虚函数f(x,y)的傅里叶变换是共轭反对称的。
    在这里插入图片描述
    傅里叶谱关于原点偶对称
    在这里插入图片描述
    相位角关于原点奇对称
    在这里插入图片描述

    均值

    二维傅里叶正变换如下
    在这里插入图片描述
    若将系数1/MN放在正变换前,则:
    在这里插入图片描述
    故:
    在这里插入图片描述
    又因为
    在这里插入图片描述
    所以,F(0,0),即原点处的傅里叶变换值为原图像f(x,y)的平均灰度级。

    小结
    DFT定义及相应表达式
    在这里插入图片描述
    DFT对小结
    在这里插入图片描述
    其中第12项和第13项中的闭合表达式仅对连续变量有效。通过对闭合形式的连续表达式取样后,它们也可用于离散变量。

    二、快速傅里叶变换

    DFT的直接实现效率很低。一种计算离散傅里叶变换的高效算法应运而生,即为快速傅里叶变换(FFT)。
    matlab中提供了fft2和ifft2函数分别计算二维傅里叶变换和反变换。它们都经过了优化,运算速度非常快;使用fftshift函数,将傅里叶频谱图中的零频点移动到频谱图的中心位置。

    2.1 fft2函数

    用于执行二维快速傅里叶操作,可直接用于数字图像处理。调用语法为:
    Y = fft2(X)
    Y = fft2(X,m,n)
    其中,X为输入图像;
    m和n分别用于将X的第一和第二维规整到指定的长度。当m和n均为2的整数次幂时,算法的执行速度要比m和n均为素数时更快;
    Y是计算得到的傅里叶变换,是一个复数矩阵。
    计算abs(Y)可得到频谱,计算angle(Y)可得到相位角

    I1 = imread('C:\Users\win\Desktop\fence-climbing.jpg');
    I2 = imread('C:\Users\win\Desktop\city-street.jpg');
    
    img1 = rgb2gray(I1);
    img2 = rgb2gray(I2);
    
    F1 = fft2(img1);  % 对图像进行快速傅里叶变换
    temp = fftshift(F1);  % 将零点移到中心
    final1 = log(1 + abs(temp)); % 对频率进行对数变换,以压缩动态范围
    
    F2 = fft2(img2);
    temp = fftshift(F2);
    final2 = log(1 + abs(temp));
    
    figure();
    subplot(2,2,1);
    imshow(img1);
    title('fence-climbing');
    
    subplot(2,2,2);
    imshow(img2);
    title('city-street');
    
    subplot(2,2,3);
    imshow(final1,[]);
    title('fence-climbing FFT');
    
    subplot(2,2,4);
    imshow(final2,[]);
    title('city-street FFT');
    

    实验结果:
    在这里插入图片描述
    小结:

    • 原图与频谱图相比较,低频对应图像中变化较缓慢的像素区,如图像的平滑部分;高频对应灰度变化较剧烈的像素区,如边缘和噪声等尖锐部分。
    • 图city-street较为平滑,在其傅里叶频谱图中,低频部分对应的幅值比较高;而图fence-climbing中,人及围栏杆的灰度变化比较剧烈,对应的频谱中高频分量较强(但整体还是低频区域更多,大部分的黑色区还是属于低频)。故,图像经过快速傅里叶变换后,频谱可以反映原图像中的灰度变化情况。

    2.2 fftshift函数

    在fft2函数输出的频谱分析数据中,是按照原始计算所得的顺序来排列频谱的,而没有以零频为中心来排列,因此造成了零频在频谱矩阵的角上,显示幅度谱图像时表现为4个亮度较高的角(零频处的幅值较高)。
    在这里插入图片描述
    fftshift函数利用了频谱的周期性特点,将输出图像的一半平移到另一端,从而使零频被移动到图像的中间。调用语法为:
    Y = fftshift(X)
    Y = fftshift(X,dim)
    其中,X为要平移的频率谱;
    dim指出了在多维数组的哪个维度上执行平移操作;
    Y为经过平移后的结果。
    对于二维图像矩阵,fftshift函数的评议过程如下:
    输出矩阵被分为了4个部分,其中1、3两部分对换,2、4两部分对换。这样,原来在角上的零频率点(原点)位置就移动到了图像的中央位置。参数dim则可指定在多维数组的哪个维度上执行对换操作。
    在这里插入图片描述

    2.3 ifft2函数

    用于对图像(矩阵)执行逆傅里叶变换。输出矩阵的大小与输入矩阵的大小相同。调用形式为:
    Y = ifft2(X)
    Y = ifft2(X,m,n)
    其中,X为要计算反变换的频率谱;
    m、n的意义与fft2中相同;
    Y是反变换后得到的原始图像。
    ==注:==在只想ifft2函数前,如果曾经使用fftshift函数对频域图像进行过原点平移,则还需要使用ifftshift函数将原点平移回原位置。

    小示例:交换两幅图像的相位谱

    %交换两幅图像的相位角
    A = imread('C:\Users\win\Desktop\girl.jpg');
    B = imread('C:\Users\win\Desktop\dog.jpg');
    
    % A = rgb2gray(f1);
    % B = rgb2gray(f2);
    %对两幅图像进行傅里叶变换
    YA = fft2(A);
    YB = fft2(B);
    
    %分别求两幅图像的频谱和相位角
    YA1 = abs(YA);
    YA2 = angle(YA);
    
    YB1 = abs(YB);
    YB2 = angle(YB);
    
    %交换相位角并重建复数矩阵
    YAR = YA1.*cos(YB2) + YA1.*sin(YB2).*i;
    YBR = YB1.*cos(YA2) + YB1.*sin(YA2).*i;
    
    %傅里叶反变换
    XA = abs(ifft2(YAR));
    XB = abs(ifft2(YBR));
    
    %显示图像
    figure();
    subplot(2,2,1);
    imshow(A);
    title('girl');
    
    subplot(2,2,2);
    imshow(B)
    title('dog');
    
    subplot(2,2,3);
    imshow(XA/256);  % 将图像矩阵转换到0-1之间,用来显示彩色图像
    % imshow(XA,[]);  % 加‘[]’可以自动调整数据的范围以便于显示,用来显示黑白图像。使用时先将读入的图像转换成灰度图,如5、6行
    title('girl的频谱+dog的相位角');
    subplot(2,2,4);
    imshow(XB/256);
    % imshow(XB,[]);
    title('dog的频谱+girl的相位角');
    

    具体可参见imread()和imshow()

    彩色图结果:
    在这里插入图片描述
    灰度图结果:
    在这里插入图片描述
    小结:

    • 两幅图经过相位交换后,图像的内容与相位角所对应的图像一致,表明相位角决定图像的轮廓结构
    • 图像的明暗、灰度变化趋势等则取决于频谱谱,即频谱反映了图像整体上各个方向的频率分量的相对强度。

    三、频率域滤波基础

    3.1 傅里叶变换的频率分量和图像空间特征之间的联系

    • 频率成分(u = v = 0)对应图像的平均灰度级
    • 当从变换的原点移开时,低频对应着图像的慢变化分量,如图像的平滑部分。
    • 进一步离开原点时,较高的频率对应图像中变化越来越快的灰度级,如边缘或噪声等尖锐部分。

    3.2 频率域滤波步骤

    在这里插入图片描述
    1、给定一幅大小为MxN的输入图像f(x,y),选择填充参数P=2M.Q=2N;
    2、对f(x,y)添加必要数量的0,形成大小为PXQ的填充图像 fp(x,y);
    3、用(−1)x+y乘以fp(x,y),移到其变换中心;
    4、计算上图的DFT,得到F(u,v);
    5、生成一个实的,对称的滤波函数H(u,v),其大小为PXQ,中心在(P/2,Q/2)处。用阵列相乘得到乘积G(u,v)=H(u,v)F(u,v);即G(i,k)=H(i,k)F(i,k);
    6、得到处理后的图像:
    在这里插入图片描述
    其中,为忽略由于计算不准确导致的寄生复成分,选择实部,下标p指出我们处理的是填充后的图像。
    7、 gp(x,y)的左上象限提取MxN区域,得到最终处理结果 g(x,y)
    H(u,v)称为滤波器。它在滤波中抑制或除去了频谱中的某些分量,而保留其他的一些频率不受影响,从而达到滤波的目的。类似于日常生活中的筛子,它可以严格按照尺寸使一些物体通过而同时阻止其他物体。

    四、使用频率域滤波器平滑图像

    低频通过,高频衰减。处理后的图像少尖锐的细节部分而突出平滑过渡的部分。
    一幅图像中的边缘和其他急剧灰度变换(如噪声)主要影响其傅里叶变换的高频内容。在频率域平滑可通过衰减高频来达到,即使用低通滤波。
    频域滤波器需结合频域滤镜(ff)一起来实现具体的频域滤波功能。
    频域滤波函数imfreqfilt(),具体形式如下:
    function out=imfreqfilt(I,ff)
    imfreqfilt函数:对灰度图像进行频域滤波
    imfreqfilt.m

    function out=imfreqfilt(I,ff)
    % imfreqfilt函数      对灰度图像进行频率滤波
    % 参数 I               输入原图像(空间域图像)
    % 参数 ff              频域滤镜(大小与原图像相等)
    % 返回值 out          滤波后的图像(空间域图像)
    
    %若是RGB,需转换为Gray
    if(ndims(I)==3) && (size(I,3)==3) %RGB图像  size(I,3)表示I的第三维分量大小,ndims(I)代表I的维数
        I=rgb2gray(I);
    end
    
    %检查输入
    if( size(I) ~= size(ff) )  % ‘~=’不等于号
       msg1=sprintf('%s:滤镜与原图像不等大,请检查输入',mfilename);  % mfilename: File name of currently running code
       msg2=sprintf('%s:滤镜操作已经取消',mfilename);
       eid=sprintf('Image:%s: ImgSizeNotEqual',mfilename);
       error(eid,'%s %s',msg1,msg2);
    end
    
    %快速FFT
    I1=fft2(double(I));
    I1=fftshift(I1); % 将原点移动到频率中心
    
    %应用滤镜及反变换
    G=I1.*ff;  % 对应元素相乘实现滤波。 频域相乘 I(u,v)H(u,v)
    G=ifftshift(G); % 将原点从频率中心移回原位
    out=ifft2(G); % IFFT得空间域函数
    
    %求幅度
    out=abs(out);
    
    %归一化以便显示
    out=out/max(out(:));
    

    4.1 理想低通滤波器(ILPF)

    在以原点为圆心,以D0为半径的圆内,无衰减地通过所有频率,而在该圆外“阻断”所有频率的二维低通滤波,称为理想低通滤波器。由下述函数确定:
    在这里插入图片描述
    D0是一个正常数,D(u,v)是频率域中,点(u,v)与频率矩形中心(0,0)的距离:
    在这里插入图片描述
    P和Q是填充后的尺寸
    理想:在半径为D0的圆内,所有频率无衰减的通过,圆外的所有频率则完全被衰减(滤除)。
    理想低通滤波器关于原点径向对称,故其可由一个径向横截面定义,将横截面旋转360度则可得到二维滤波器。
    D0为截止频率。
    在这里插入图片描述
    半径D0越大,通过的高频越多,图像模糊度越小,反之亦反。
    理想低通滤波器的频率特性在截止频率处十分陡峭,无法用硬件实现,即其称之为理想的原因。
    振铃现象是理想滤波器的一种特性。
    下图为一幅测试图像即其傅里叶谱。由于填充,该谱的大小为图像大小的两倍,但它是以一半大小来显示的,故页面是匹配的。谱上重叠的圆的半径分别为10,30,60,160和460像素。这些圆包含的图像功率分别为87.0%,93.1%,95.7%,97.8%和99.2%。谱迅速衰落,功率主要集中在圆心附近。
    在这里插入图片描述

    4.1.1 构造滤镜:

    理想低通滤镜:imidealflpf()
    ff=imidealflpf(I,freq)
    功能:构建理想的频域低通滤波器(即滤镜)
    imidealflpf.m

    function ff=imidealflpf(I,freq)
     % imidealflpf函数     构造理想的频域低通滤波器
     % I参数               输入的灰度图像
     % freq参数            低通滤波器的截止频率
     % 返回值 ff           与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             if (sqrt (((i-M/2)^2+ (j-N/2)^2 ))>freq)  
                 ff(i,j)=0; %高于截止频率 设为0
             end
         end
     end
    

    4.1.2 应用

    idel_LPF.m

    img = imread('C:\Users\win\Desktop\dog.jpg');
    img = rgb2gray(img);
    %生成滤镜  截止频率为20
    ff = imidealflpf(img,20);
    out = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为40
    ff = imidealflpf(img,40);
    out1 = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为80
    ff = imidealflpf(img,80);
    out2 = imfreqfilt(img,ff);
    
    figure(1);
    subplot(1,4,1);
    imshow(img);
    title('原图');
    
    subplot(1,4,2);
    imshow(out);
    title('截止频域为20');
    
    subplot(1,4,3);
    imshow(out1);
    title('截止频率为40');
    
    subplot(1,4,4);
    imshow(out2);
    title('截止频率为80');
    
    %展示频域的频谱
    f = fft2(img);
    f = abs(fftshift(f)); % 频谱
    f = log(1 + f);  %压缩频率的范围
    
    f1 = fft2(out);
    f1 = abs(fftshift(f1)); % 频谱
    f1 = log(1 + f1);  %压缩频率的范围
    
    f2 = fft2(out1);
    f2 = abs(fftshift(f2)); % 频谱
    f2 = log(1 + f2);  %压缩频率的范围
    
    f3 = fft2(out2);
    f3 = abs(fftshift(f3)); % 频谱
    f3 = log(1 + f3);  %压缩频率的范围
    
    figure(2)
    subplot(1,4,1);
    imshow(f,[]);
    title('原图对应的频谱');
    
    subplot(1,4,2);
    imshow(f1,[]);
    title('freq = 20 的图像对应的频谱');
    
    subplot(1,4,3);
    imshow(f2,[]);
    title('freq = 40 的图像对应的频谱');
    
    subplot(1,4,4);
    imshow(f3,[]);
    title('freq = 80 的图像对应的频谱');
    

    实验结果:
    在这里插入图片描述
    在这里插入图片描述
    小结:当截止频率非常低时,只有非常靠近原点的低频才能通过滤波器,得到的图像较模糊;截止频率越大,通过的频率越多,得到的图像越清晰。理想低通滤波器并不能很好的兼顾滤除噪声与保留细节两个方面。

    4.2 布特沃斯低通滤波器(BLPF)

    截止频率位于距原点D0处的n阶布特沃斯低通滤波器的传递函数定义为:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    D0越大,通过的高频越多,清晰度越高。
    n越大,通过的低频越小,模糊度越高。
    经过BLPF处理(n = 2时)的图像中没有可见的振铃现象,归因于该滤波器在低频和高频之间的平滑过渡。
    空间域的一阶布特沃斯滤波器没有振铃现象。在二阶滤波器中,振铃现象通常很难察觉,但更高阶数的滤波器中振铃现象会很明显。故,二阶BLPF是在有效低通滤波和可接受的振铃特性之间的较好折中。

    4.2.1构造滤镜

    imbutterworthflpf.m

    function ff=imbutterworthflpf(I,freq,n)
     % imbutterworthflpf函数     构造布特沃斯的频域低通滤波器
     % I参数                     输入的灰度图像
     % freq参数                  低通滤波器的截止频率
     % n参数                     阶数
     % 返回值 ff                 与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             ff(i,j) = 1/(1 + (sqrt((i - M/2)^2 + (j - N/2)^2)/freq)^(2*n));
         end
     end
    

    4.2.2 应用

    img = imread('C:\Users\win\Desktop\dog.jpg');
    img = rgb2gray(img);
    %生成滤镜  截止频率为20,阶数为2
    ff = imbutterworthflpf(img,20,2);
    out = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为20,阶数为5
    ff = imbutterworthflpf(img,20,5);
    out1 = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为80,阶数为2
    ff = imbutterworthflpf(img,80,2);
    out2 = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为80,阶数为5
    ff = imbutterworthflpf(img,80,5);
    out3 = imfreqfilt(img,ff);
    
    figure(1);
    subplot(1,5,1);
    imshow(img);
    title('原图');
    
    subplot(1,5,2);
    imshow(out);
    title('freq = 20,n = 2');
    
    subplot(1,5,3);
    imshow(out1);
    title('freq = 20,n = 5');
    
    subplot(1,5,4);
    imshow(out2);
    title('freq = 80,n = 2');
    
    subplot(1,5,5);
    imshow(out3);
    title('freq = 80,n = 5');
    %展示频域的频谱
    f = fft2(img);
    f = abs(fftshift(f)); % 频谱
    f = log(1 + f);  %压缩频率的范围
    
    f1 = fft2(out);
    f1 = abs(fftshift(f1)); % 频谱
    f1 = log(1 + f1);  %压缩频率的范围
    
    f2 = fft2(out1);
    f2 = abs(fftshift(f2)); % 频谱
    f2 = log(1 + f2);  %压缩频率的范围
    
    f3 = fft2(out2);
    f3 = abs(fftshift(f3)); % 频谱
    f3 = log(1 + f3);  %压缩频率的范围
    
    f4 = fft2(out3);
    f4 = abs(fftshift(f4)); % 频谱
    f4 = log(1 + f4);  %压缩频率的范围
    
    
    figure(2)
    subplot(1,5,1);
    imshow(f,[]);
    title('原图对应的频谱');
    
    subplot(1,5,2);
    imshow(f1,[]);
    title('freq = 20,n = 2的频谱');
    
    subplot(1,5,3);
    imshow(f2,[]);
    title('freq = 20,n = 5的频谱');
    
    subplot(1,5,4);
    imshow(f3,[]);
    title('freq = 80,n = 2的频谱');
    
    subplot(1,5,5);
    imshow(f4,[]);
    title('freq = 80,n = 5的频谱');
    

    实验结果:
    在这里插入图片描述
    在这里插入图片描述

    4.3 高斯低通滤波器(GLPF)

    在这里插入图片描述
    D(u,v)为距频率中心的距离,σ是关于中心的扩展度的度量。令σ = D0,可以使介绍介绍中的表达式比较统一。即:
    在这里插入图片描述
    D0为截止频率。当D(u,v) = D0时,GLPF下降到其最大值的0.607处。
    在这里插入图片描述
    D0越大,通过的高通越大,清晰度越高。
    GLPF中没有振铃现象。

    4.3.1 生成滤镜

    imgaussflpf.m

    function ff=imgaussflpf(I,sigma)
     % imgaussflpf函数     构造高斯的频域低通滤波器
     % I参数               输入的灰度图像
     % sigma参数           高斯函数的sigma
     % 返回值 ff           与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             ff(i,j) = exp(-((i - M/2).^2 + (j - N/2).^2) / 2 /(sigma.^2));
         end
     end
    

    4.3.2 应用

    Gauss_LPF.m

    img = imread('C:\Users\win\Desktop\dog.jpg');
    img = rgb2gray(img);
    %生成滤镜  截止频率为20
    ff = imgaussflpf(img,20);
    out = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为40
    ff = imgaussflpf(img,40);
    out1 = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为80
    ff = imgaussflpf(img,80);
    out2 = imfreqfilt(img,ff);
    
    figure(1);
    subplot(1,4,1);
    imshow(img);
    title('原图');
    
    subplot(1,4,2);
    imshow(out);
    title('sigma = 20');
    
    subplot(1,4,3);
    imshow(out1);
    title('sigma = 40');
    
    subplot(1,4,4);
    imshow(out2);
    title('sigma = 80');
    
    %展示频域的频谱
    f = fft2(img);
    f = abs(fftshift(f)); % 频谱
    f = log(1 + f);  %压缩频率的范围
    
    f1 = fft2(out);
    f1 = abs(fftshift(f1)); % 频谱
    f1 = log(1 + f1);  %压缩频率的范围
    
    f2 = fft2(out1);
    f2 = abs(fftshift(f2)); % 频谱
    f2 = log(1 + f2);  %压缩频率的范围
    
    f3 = fft2(out2);
    f3 = abs(fftshift(f3)); % 频谱
    f3 = log(1 + f3);  %压缩频率的范围
    
    figure(2)
    subplot(1,4,1);
    imshow(f,[]);
    title('原图对应的频谱');
    
    subplot(1,4,2);
    imshow(f1,[]);
    title('sigma = 20的频谱');
    
    subplot(1,4,3);
    imshow(f2,[]);
    title('sigma = 40的频谱');
    
    subplot(1,4,4);
    imshow(f3,[]);
    title('sigma = 80的频谱');
    

    在这里插入图片描述
    在这里插入图片描述
    由图可知,sigma越大,截止频率越大,通过的高频越多,图像越清晰。

    五、使用频率域滤波器锐化图像

    图像的锐化可在频率域通过高通滤波器来实现,高通滤波会衰减傅里叶变换中的低频成分而不会扰乱高频信息。
    高频通过,低频衰减,处理后的图像比原始图像少灰度级的平滑过渡而突出边缘等细节部分。
    高通滤波器可从低通滤波器得到:
    在这里插入图片描述
    HLP(u,v)是低通滤波器的传递函数。

    5.1 理想高通滤波器(IHPF)

    二维理想高通滤波器定义为:
    在这里插入图片描述
    在这里插入图片描述
    IHFP
    代码与理想低通滤波相似,只需要改动imidealflpf.m中的部分代码,即滤波器函数H(u,v)的内容,将函数命名再改动一下即可。不再赘述。

    5.2 布特沃斯高通滤波器(BHPF)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    代码实现同低通布特沃斯滤波器类似,不再赘述。

    5.3 高斯高通滤波器(GHPF)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    以实现高斯高通滤波及其应用为例,说明高通滤波器的效果。

    5.3.1 生成滤镜

    imgaussfhpf.m

    function ff=imgaussfhpf(I,sigma)
     % imgaussfhpf函数     构造高斯的频域低通滤波器
     % I参数               输入的灰度图像
     % sigma参数           高斯函数的sigma
     % 返回值 ff           与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             ff(i,j) = 1 - exp(-((i - M/2).^2 + (j - N/2).^2) / 2 /(sigma.^2));
         end
     end
    

    5.3.2 应用

    Gauss_HPF.m

    img = imread('C:\Users\win\Desktop\dog.jpg');
    img = rgb2gray(img);
    %生成滤镜  截止频率为20
    ff = imgaussfhpf(img,20);
    out = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为40
    ff = imgaussfhpf(img,40);
    out1 = imfreqfilt(img,ff);
    
    %生成滤镜  截止频率为80
    ff = imgaussfhpf(img,80);
    out2 = imfreqfilt(img,ff);
    
    figure(1);
    subplot(1,4,1);
    imshow(img);
    title('原图');
    
    subplot(1,4,2);
    imshow(out);
    title('sigma = 20');
    
    subplot(1,4,3);
    imshow(out1);
    title('sigma = 40');
    
    subplot(1,4,4);
    imshow(out2);
    title('sigma = 80');
    
    %展示频域的频谱
    f = fft2(img);
    f = abs(fftshift(f)); % 频谱
    f = log(1 + f);  %压缩频率的范围
    
    f1 = fft2(out);
    f1 = abs(fftshift(f1)); % 频谱
    f1 = log(1 + f1);  %压缩频率的范围
    
    f2 = fft2(out1);
    f2 = abs(fftshift(f2)); % 频谱
    f2 = log(1 + f2);  %压缩频率的范围
    
    f3 = fft2(out2);
    f3 = abs(fftshift(f3)); % 频谱
    f3 = log(1 + f3);  %压缩频率的范围
    
    figure(2)
    subplot(1,4,1);
    imshow(f,[]);
    title('原图对应的频谱');
    
    subplot(1,4,2);
    imshow(f1,[]);
    title('sigma = 20的频谱');
    
    subplot(1,4,3);
    imshow(f2,[]);
    title('sigma = 40的频谱');
    
    subplot(1,4,4);
    imshow(f3,[]);
    title('sigma = 80的频谱');
    

    实验结果:
    在这里插入图片描述
    在这里插入图片描述
    小结:
    高斯高通滤波器可以较好的提取图像中的边缘信息;
    sigma越小,截止频率越低,通过的低频成分越多,边缘提取越不精确,会包含更多的非边缘信息;反之,sigma越大,边缘提取越精确,但可能包含不完整的边缘信息。

    5.4 拉普拉斯滤波器

    在第三章,已经使用过拉普拉斯算子对空间域的图像进行增强。现在使用拉普拉斯算子在频率域对图像进行增强。频域的拉普拉斯滤波器由下述函数确定:
    在这里插入图片描述
    在这里插入图片描述

    5.4.1 生成滤镜

    laplacehpf.m

    function ff=laplacehpf(I)
     % laplacehpf函数     构造laplace滤波器
     % I参数               输入的灰度图像
     % 返回值 ff           与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             ff(i,j) = -4.*(pi.^2).*((i - M/2).^2 + (j - N/2).^2);
         end
     end
    

    5.4.2 实现

    img = imread('C:\Users\win\Desktop\fence-climbing.jpg');
    img = rgb2gray(img);
    %生成滤镜  
    ff = laplacehpf(img);
    out = imfreqfilt(img,ff);
    
    figure(1);
    subplot(1,2,1);
    imshow(img);
    title('原图');
    
    subplot(1,2,2);
    imshow(out);
    title('laplace滤波图像');
    
    %展示频域的频谱
    f = fft2(img);
    f = abs(fftshift(f)); % 频谱
    f = log(1 + f);  %压缩频率的范围
    
    f1 = fft2(out);
    f1 = abs(fftshift(f1)); % 频谱
    f1 = log(1 + f1);  %压缩频率的范围
    
    figure(2)
    subplot(1,2,1);
    imshow(f,[]);
    title('原图对应的频谱');
    
    subplot(1,2,2);
    imshow(f1,[]);
    title('laplace滤波图像对应的频谱');
    

    实验结果:
    在这里插入图片描述
    在这里插入图片描述

    5.5 锐化滤波器

    前面介绍过:F(0,0),即原点处的傅里叶变换值为原图像f(x,y)的平均灰度级。可以看到F(0,0)的值是非常大的。将F(0,0)称为直流分量,直流分量比其他的成分要大好几个数量级。所以,这也就是傅里叶谱为什么需要使用对数变换才能看清楚的原因。
    对于高通滤波器而言,由于直流分量被衰减,所以,所得到的图像的动态范围是非常狭窄的,也就造成了图像偏灰。
    锐化滤波器是保持直流(DC)分量,对别的部分进行增幅,可以增强图像的细节。通用公式如下:
    在这里插入图片描述
    即,先将原图的傅里叶谱F(u,v)保留下来,再加上高通滤波器的结果HHP(u,v)F(u,v),所得到的图像就是锐化后的图像了。为了调整锐化程度,引入了两个变量k1、k2
    k1 >= 0控制距原点的偏移量,即调整直流分量的衰减程度;
    k2 >= 0控制高频的贡献,即调整高频分量的增幅程度。

    六、选择滤波器

    高通和低通滤波器对图像进行处理,它们都是在整个图像的频率矩阵上操作,但是在很多应用中,我们感兴趣是处理指定的频段或频率矩形的小区域,因此需要使用选择性滤波,选择性滤波主要有两类:

    • 带阻滤波器和带通滤波器
    • 陷波滤波器

    6.1 带阻和带通滤波器

    所谓“带阻”就是阻止频谱中某一频带范围的分量通过,其他频率成分不受影响。
    在这里插入图片描述
    带通滤波器是由带阻滤波器得到的:
    在这里插入图片描述
    在这里插入图片描述
    带阻滤波器常用于处理含有周期性噪声的图像。周期性噪声可能由多种因素引入,如图像获取系统中的电子元件等。
    这里以高斯带阻滤波器为例进行说明。
    高斯带阻滤波器的实现:
    imgaussbrf.m

    function ff=imgaussbrf(I,freq,width)
     % imgaussbrf函数            构造高斯带阻滤波器
     % I参数                     输入的灰度图像
     % freq参数                  截止频率
     % width参数                 阻带宽度
     % 返回值 ff                 与I等大的频域滤镜   
     
     [M,N]=size(I);
     ff=ones(M,N);
     for i=1:M
         for j=1:N
             ff(i,j) = 1 - exp(-((((i - M/2).^2 + (j - N / 2).^2) - freq.^2) / (sqrt((i - M/2).^2 + (j - N / 2).^2) * width)).^2); %gauss带阻滤波器公式
         end
     end
    

    Gauss_br_filter.m

    img = imread('C:\Users\win\Desktop\dog.jpg');
    img = rgb2gray(img);
    [M,N] = size(img);
    I = img;
    for i = 1:M
        for j = 1:N;
            I(i,j) = I(i,j) + 20 * sin(20 * i) + 20 * sin(20 * j); %给原图像添加周期性噪声
        end
    end
    
    %得到频谱
    f = fft2(img); 
    f = abs(fftshift(f));  %频谱
    f = log(1 + f);   %压缩频率范围
    
    f1 = fft2(I); 
    f1 = abs(fftshift(f1));  %频谱
    f1 = log(1 + f1);   %压缩频率范围
    
    %带阻滤波
    ff = imgaussbrf(I,150,120); % 构造带阻滤波器,截止频率为50,阻带宽度为5
    out = imfreqfilt(I,ff);  % 带阻滤波
    
    figure();
    subplot(3,2,1);
    imshow(img);
    title('原图');
    
    subplot(3,2,2);
    imshow(I);
    title('added noise');
    
    subplot(3,2,3);
    imshow(f,[]);
    title('原图频谱');
    
    subplot(3,2,4);
    imshow(f1,[]);
    title('added noise 频谱');
    
    subplot(3,2,5);
    imshow(ff,[]);
    title('高斯带阻滤波器');
    
    subplot(3,2,6);
    imshow(out,[]);
    title('带阻滤波结果');
    

    实验结果:
    在这里插入图片描述
    可以看到周期噪声在频率域被很好的消除了,这样的效果在空间域是很难实现的。

    6.2 陷波滤波器

    陷波带阻滤波器也用于去除周期噪声,虽然带阻滤波器也能可以去除周期噪声,但是带阻滤波器对噪声以外的成分也有衰减。而陷波带阻滤波器主要对某个点进行衰减,对其余的成分不损失。
    在这里插入图片描述
    可以看到,图像伴随着周期性噪声,从其频谱中也能看出来噪声在哪里(用红圈圈出来的)。
    由于傅里叶的周期性,傅里叶频谱上不可能单独存在一个点的噪声,而是关于原点对称的噪声对,因此,一个中心位于(u0,v0)的陷波在位置(-u0,-v0)必须有一个对应的陷波。
    陷波带阻滤波器可以用中心已被平移到陷波滤波器中心高通滤波器的乘积来构造。一般形式为:
    在这里插入图片描述
    Hk(u,v)和Hk(u,v)是高通滤波器,它们的中心分别是(uk,vk)和(-uk,-vk)。这些中心是根据频率中心(M/2,N/2)确定的。对每个滤波器,距离的计算由下式执行:
    在这里插入图片描述
    例如,下面是一个n阶布特沃斯陷波带阻滤波器,它包含三个陷波对:
    在这里插入图片描述
    常数D0k对每队陷波对都是相同的,但对于不同的陷波对,可以不同。

    针对上图,设计布特沃斯陷波带阻滤波器,进行噪声的去除。
    实验结果:
    在这里插入图片描述
    图一为布特沃斯陷波带阻滤波器乘以傅里叶变换后的结果,图二维滤波后的图像。可以很明显的看到噪声被有效的去除,原图像的画质明显提高。
    陷波带通滤波器可由陷波带阻滤波器得到:
    在这里插入图片描述

    展开全文
  • 实现快速的图像增强算法,提出在离散余弦变换(DCT)的对比度测度下。通过I'K"I、矩阵中不同频率的系数关系对DCT系数块进行分类。对不同类型的系数块做不同强度的自适应增强算法,并在FPGA 上得到实现。提出的方法在不...
  • 图像增强处理:设计一套空间域与频率域结合的图像增强算法,处理噪声图像,去除噪声,提高图像质量。已知:噪声为随机噪声和周期噪声混合噪声。通过完成该题目的设计和实现,了解图像去噪增强方法,掌握图像去噪增强...
  • 图像增强可以在空间域进行,也可以在频率域中进行。 空间域滤波主要利用空间模板进行,如3*3,5*5模板等,一般来说,使用大小为m×n 的滤波器对大小为M×N 的图像f进行空间滤波,可表示成: 其中,m=2a+...

    1,实验原理

    图像增强是数字图像处理的基本内容之一,其目的是根据应用需要突出图像中的某些“有用”信息,削弱或去除不需要的信息,以改善图像的视觉效果,或突出图像的特征,便于计算机处理。图像增强可以在空间域进行,也可以在频率域中进行。

    空间域滤波主要利用空间模板进行,如3*3,5*5模板等,一般来说,使用大小为m×n 的滤波器对大小为M×N 的图像f进行空间滤波,可表示成:

    其中,m=2a+1, n=2b+1, w(s,t)是滤波器系数,f(x,y)是图像值

    均值滤波器是一种空间平滑滤波器,它是对包含噪声的图像上的每个像素点,用它邻域内像素的平均值替代原来的像素值。例如,采用一个3×3的模板,待处理的像素为f(i,j),则处理后图像对应的像素值为g(i-1,j+1)

    g(i,j)=1/9*(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1));    

    中值滤波器也是一种空间平滑滤波器,它是对以图像像素点为中心的一个滑动窗口内的诸像素灰度值排序,用中值代替窗口中心像素的原来灰度值,因此它是一种非线性的图像平滑法。

    2,实验要求

    对原图像分别加入高斯噪声、椒盐噪声

    利用邻域平均法,分别采用3´3,5´5模板对加噪声图像进行平滑处理,显示原图像、加噪图像和处理后的图像

    利用中值滤波法,分别采用3´3,5´5模板对加噪声图像进行去噪处理,显示原图像、加噪图像和处理后的图像

    3,实验过程和结果

    clc;
    clear;
    close all;
    
    I = imread('test3.gif','gif');        %自己设置路径
    imshow(I);
    subplot(5,4,1);
    imshow(I);
    title('原图');
    
    G1 = imnoise(I,'gaussian',0.02);
    subplot(5,4,2);
    imshow(G1);
    title('加入高斯噪声');
    
    G2 = imnoise(I,'salt & pepper',0.05);
    subplot(5,4,3);
    imshow(G2);
    title('加入椒盐噪声');
    
    G3 = imnoise(I,'speckle',0.04);
    subplot(5,4,4);
    imshow(G3);
    title('均匀分布的随机噪声');
    
    H1 = fspecial('average',[3,3]);
    
    G331 = imfilter(I,H1);
    subplot(5,4,5);
    imshow(G331);
    title('原图3*3均值滤波');
    
    G332 = imfilter(G1,H1);
    subplot(5,4,6);
    imshow(G332);
    title('高斯噪声3*3均值滤波');
    
    G333 = imfilter(G2,H1);
    subplot(5,4,7);
    imshow(G333);
    title('椒盐噪声3*3均值滤波');
    
    G334 = imfilter(G3,H1);
    subplot(5,4,8);
    imshow(G334);
    title('均匀分布的随机噪声3*3均值滤波');
    
    
    H2 = fspecial('average',[5,5]);
    
    G551 = imfilter(I,H2);
    subplot(5,4,9);
    imshow(G331);
    title('原图5*5均值滤波');
    
    G552 = imfilter(G1,H2);
    subplot(5,4,10);
    imshow(G552);
    title('高斯噪声5*5均值滤波');
    
    G553 = imfilter(G2,H2);
    subplot(5,4,11);
    imshow(G553);
    title('椒盐噪声5*5均值滤波');
    
    G554 = imfilter(G3,H2);
    subplot(5,4,12);
    imshow(G554);
    title('均匀分布的随机噪声5*5均值滤波');
    
    K331 = medfilt2(I,[3,3]);
    subplot(5,4,13);
    imshow(K331);
    title('原图3*3中值滤波');
    
    K332 = medfilt2(G1,[3,3]);
    subplot(5,4,14);
    imshow(K332);
    title('高斯噪声3*3中值滤波');
    
    K333 = medfilt2(G2,[3,3]);
    subplot(5,4,15);
    imshow(K333);
    title('椒盐噪声3*3中值滤波');
    
    K334 = medfilt2(G3,[3,3]);
    subplot(5,4,16);
    imshow(K334);
    title('均匀分布的随机噪声3*3中值滤波');
    
    
    K551 = medfilt2(I,[5,5]);
    subplot(5,4,17);
    imshow(K551);
    title('原图5*5中值滤波');
    
    K552 = medfilt2(G1,[5,5]);
    subplot(5,4,18);
    imshow(K552);
    title('高斯噪声5*5中值滤波');
    
    K553 = medfilt2(G2,[5,5]);
    subplot(5,4,19);
    imshow(K553);
    title('椒盐噪声5*5中值滤波');
    
    K554 = medfilt2(G3,[5,5]);
    subplot(5,4,20);
    imshow(K554);
    title('均匀分布的随机噪声5*5中值滤波');

    4,实验结果

    采用邻域平均法即均值滤波对高斯噪声比较有效,但造成一定的模糊,邻域越大,模糊越严重。但均值滤波不能很好地处理椒盐噪声。

    采用中值滤波法,不适用于去除高斯噪声,而且造成图像模糊严重。但可以很好的抑制椒盐噪声,3*3模板处理过的图像接近原图像,但模板增大即邻域扩大,加强去噪声能力的同时,使图像模糊严重。

    最后附上实验原图

    展开全文
  • 图像增强 李影 通信092 092302 一 实验目的 1掌握图像灰度变换的基本原理 2掌握图像灰度级修正方法即直方图均衡化法 3图像平滑的主要目的是减少噪声噪声有很多种类不同的噪声有不同的抑制措施要 求掌握常用的图像...
  • 实验二 图像增强 李影 通信092 092302 一?实验目的 1掌握图像灰度变换的基本原理 2掌握图像灰度级修正方法即直方图均衡化法 3图像平滑的主要目的是减少噪声噪声有很多种类不同的噪声有不同的抑制措施要 求掌握常用的...
  • 研究并总结了指纹识别的基本原理及目前主要的指纹识别的算法,描述了在空间域和频率域图像增强技 术,分析和讨论了空间域和频率域方法在指纹上的应用。由于采用单一的图像增强技术不能达到令人满意的效果, 有必要...
  • 其中,傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理。基础性文章,希望对你有所帮助。同时,该部分知识均为杨秀璋查阅资料撰写,转载请署名CSDN+杨秀璋及原地址出处,...

    该系列文章是讲解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 )


    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    展开全文
  • 图像增强除可在空域进行外,也可以在变换域进行。最常用的变换域就是频率域 • 对图像进行傅里叶变换就可转到频率域 • 频域增强有直观的物理意义,增强是通过改变图像中不同频率分量来实现的,而不 是对逐个...
  • 傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。傅里叶变换(Fourier Transform,FT)后,对同一事物的观看角度随之改变,可以从频域里发现一些从时域里不易察觉的特征。...
  • 医学成像原理图像处理一:概论

    千次阅读 2015-09-29 21:07:38
    前半部分内容为图像处理基础内容,包括图像的灰度级处理、空间域滤波、频率域滤波、图像增强和分割等;后半部分内容为医学影象技术,包括常规胶片X光机、CR、DR、CT、DSA等X射线摄影技术、超声成像技术、磁共振成像...
  • 《国外电子与通信教材系列:数字图像处理(第6版)》共15章,内容贯穿从图像获取到应用的整个过程,具体包括图像获取、人类视觉、打印和存储、成像缺陷修正、空间域图像增强频率域图像处理、分割和阈值处理、二值...
  • 传统图像处理

    2021-03-19 14:33:24
    图像增强的目标 点处理 基于直方图的对比度增强 形态学(可以弱化些,是一些传统方法) 空间域处理:卷积 卷积的应用(平滑,边缘检测、锐化) 频率域处理(傅里叶变换,小波变换),傅里叶变换是为小波变换...
  • 全书共15章,内容贯穿从图像获取到应用的整个过程,具体包括图像获取、人类视觉、打印和存储、成像缺陷修正、空间域图像增强频率域图像处理、分割和阈值处理、二值图像处理、全局图像测量、特定特征的测量、形状...
  • 图像增强的目标3. 图像处理办法1.点运算(去雾、增加对比度)2. 形态学运算3.滤波(卷积)4. 图像缩放5. 傅里叶变换6.频率域(对比空间域) 1.图像显示与存储原理 每个像素的颜色,可以用红、绿、蓝、透明度四个值...
  • 计算机视觉基础~图像预处理(上)

    千次阅读 2018-11-11 11:58:43
    图像增强的目标 点运算:基于直方图的对比度增强  形态学处理 空间域处理:卷积 卷积的应用(平滑、边缘检测、锐化等) 频率域处理:傅里叶变换、小波变换 应用案例:平滑、边缘检测、CLAHE等 1.图像的显示...
  •  o 图像显示与存储原理(略) o 图像增强的目标  o 图像处理方法 o 点运算:基于直方图的对比度增强 o 形态学处理(略) o 空间域处理:卷积 o 卷积的应用(平滑、边缘检测、锐化等) o 频率域处理:傅里叶...
  • 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。 本文通过实现直方图均衡和线性变换分别对图像进行处理,研究其原理及...
  • 图像增强的目标 点运算:基于直方图的对比度增强 形态学处理 空间与处理:卷积 卷积的应用(平滑、边缘检测、锐化等) 频率域处理:傅里叶变换,小波变换 应用案例:平滑、边缘检测、CLAHE等 一、颜色空间 ...
  • 这主要由于平时的工作和环境引起的,图像增强是减弱噪音,增强对比度。想得到比较干净清晰的图像并不是容易的事情。为这个目标而为处理图像所涉及的操作是设计一个适合、匹配的滤波器和恰当的阈值。常用的有高斯滤波...
  • 同态滤波:是把频率滤波和空域灰度变换结合起来的一种图像处理方法,它根据图像的照度/反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。 同态滤波的原理 一幅图像可..
  • 傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。 傅里叶变换(Fourier Transform,FT)后,对同一事物的观看角度随之改变,可以从频域里发现一些从时域里不易察觉的特征。...
  • 掌握知识点:灰度调整,对比度增强,直方图均衡,局部平滑,中值滤波,频率域平滑与锐化的原理与方法 运用知识点:学会编写MATLAB函数来实现上述方法 实验二:编写MATLAB函数实现最近临元法,双线性插值法 掌握...
  • 3.3.2 指纹图像增强 28 3.3.3 指纹识别的基本原理 29 3.3.4 系统问题 30 3.3.5 系统性能评估 31 3.3.6 一套指纹识别算法库的构成 32 3.4 指纹的粗分类与匹配 89 3.5 基于Matlab的指纹识别系统 92 3.5.1...
  • 《数字图像处理》冈萨雷斯 第三版part1(共1-3部分)

    千次下载 热门讨论 2014-11-12 13:50:07
    本书在介绍MATLAB编程基础知识之后,讲述了图像处理的主要内容,具体包括亮度变换、线性和非线性空间滤波、频率域滤波、图像复原与配准、彩色图像处理、小波、图像数据压缩、形态学图像处理、图像分割、区域和边界...
  • Matlib期末总结

    2019-08-22 10:33:33
    1、 图像增强的基本方法及原理 2、 直方图均衡算法的原理,算法步骤 原理:对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。从而达到清晰图像的目的。 流程: 图像平滑和锐化的基本原理...
  • MATLAB 数字图像处理技术4 MATLAB 图像增强4.1 原理、方法... 体系:图像增强:空间域、频率域、彩色增强空间域:像素点处理(图像灰度变换、直方图修正(中值滤波、均值滤波))、领域处理(图像平滑滤波、图像锐化滤波)...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
热门标签
关键字:

频率域图像增强原理