当前位置: 首页 > news >正文

做北京塞车网站市场调研报告怎么写的

做北京塞车网站,市场调研报告怎么写的,宿州信息网,wordpress 文件加载顺序OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换1.傅里叶变换理论概述2.Numpy实现傅里叶变换2.1 傅里叶变换2.2 傅里叶逆变换2.3 高通滤波3.OpenCV实现傅里叶变换3.1 实现傅里叶变换3.2 实现傅里叶逆变换3.3 低通滤波作者:Xiou 1.傅里叶变换…

OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换

  • 1.傅里叶变换理论概述
  • 2.Numpy实现傅里叶变换
    • 2.1 傅里叶变换
    • 2.2 傅里叶逆变换
    • 2.3 高通滤波
  • 3.OpenCV实现傅里叶变换
    • 3.1 实现傅里叶变换
    • 3.2 实现傅里叶逆变换
    • 3.3 低通滤波

作者:Xiou

1.傅里叶变换理论概述

图像处理一般分为空间域处理和频率域处理。空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰度变换和空间滤波两种形式。灰度变换是对图像内的单个像素进行处理,比如调节对比度和处理阈值等。空间滤波涉及图像质量的改变,例如图像平滑处理。空间域处理的计算简单方便,运算速度更快。

频率域处理是先将图像变换到频率域,然后在频率域对图像进行处理,最后再通过反变换将图像从频率域变换到空间域。傅里叶变换是应用最广泛的一种频域变换,它能够将图像从空间域变换到频率域,而逆傅里叶变换能够将频率域信息变换到空间域内。傅里叶变换在图像处理领域内有着非常重要的作用。

在图像处理过程中,傅里叶变换就是将图像分解为正弦分量和余弦分量两部分,即将图像从空间域转换到频率域(以下简称频域)。数字图像经过傅里叶变换后,得到的频域值是复数。因此,显示傅里叶变换的结果需要使用实数图像(real image)加虚数图像(complex image),或者幅度图像(magnitude image)加相位图像(phase image)的形式。

因为幅度图像包含了原图像中我们所需要的大部分信息,所以在图像处理过程中,通常仅使用幅度图像。当然,如果希望先在频域内对图像进行处理,再通过逆傅里叶变换得到修改后的空域图像,就必须同时保留幅度图像和相位图像。对图像进行傅里叶变换后,我们会得到图像中的低频和高频信息。

低频信息对应图像内变化缓慢的灰度分量。高频信息对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。例如,在一幅大草原的图像中有一头狮子,低频信息就对应着广袤的颜色趋于一致的草原等细节信息,而高频信息则对应着狮子的轮廓等各种边缘及噪声信息。

傅里叶变换的目的,就是为了将图像从空域转换到频域,并在频域内实现对图像内特定对象的处理,然后再对经过处理的频域图像进行逆傅里叶变换得到空域图像。傅里叶变换在图像处理领域发挥着非常关键的作用,可以实现图像增强、图像去噪、边缘检测、特征提取、图像压缩和加密等。

高频 vs 低频
高频 vs 低频:

高频: 变换剧烈的灰度分量, 例如边界。
低频: 变换缓慢的灰度分量, 例如一片大海。

滤波:
低通滤波器: 只保留低频, 会使得图像模糊。
高通滤波器: 只保留高频, 会使得图像细节增强。

傅里叶变化 (Fourier Transform) 是一种分析信号的方法. 傅里叶变化可分析信号的成分, 也可以用这些成分合成信号。

在这里插入图片描述
在这里插入图片描述

2.Numpy实现傅里叶变换

2.1 傅里叶变换

Numpy模块提供了傅里叶变换功能,Numpy模块中的fft2()函数可以实现图像的傅里叶变换。本节介绍如何用Numpy模块实现图像的傅里叶变换,以及在频域内过滤图像的低频信息,保留高频信息,实现高通滤波。

Numpy提供的实现傅里叶变换的函数是numpy.fft.fft2(),它的语法格式是:

        返回值 = numpy.fft.fft2(原始图像)

这里需要注意的是,参数“原始图像”的类型是灰度图像,函数的返回值是一个复数数组(complex ndarray)。

经过该函数的处理,就能得到图像的频谱信息。此时,图像频谱中的零频率分量位于频谱图像(频域图像)[插图]的左上角,为了便于观察,通常会使用numpy.fft.fftshift()函数将零频率成分移动到频域图像的中心位置。如图所示

在这里插入图片描述

函数numpy.fft.fftshift()的语法格式是:

        返回值=numpy.fft.fftshift(原始频谱)

使用该函数处理后,图像频谱中的零频率分量会被移到频域图像的中心位置,对于观察傅里叶变换后频谱中的零频率部分非常有效。对图像进行傅里叶变换后,得到的是一个复数数组。为了显示为图像,需要将它们的值调整到[0,255]的灰度空间内,使用的公式为:

        像素新值=20*np.log(np.abs(频谱值))

式中np是“numpy”的缩写,来源于“import numpy as np”,后面不再对此进行说明。

代码实例:用Numpy实现傅里叶变换,观察得到的频谱图像。

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('girl1.jpg', 0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(122)
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('result')
plt.axis('off')
plt.show()

输出结果:

在这里插入图片描述

2.2 傅里叶逆变换

需要注意的是,如果在傅里叶变换过程中使用了numpy.fft.fftshift()函数移动零频率分量,那么在逆傅里叶变换过程中,需要先使用numpy.fft.ifftshift()函数将零频率分量移到原来的位置,再进行逆傅里叶变换,该过程如图

在这里插入图片描述

函数numpy.fft.ifftshift()是numpy.fft.fftshift()的逆函数,其语法格式为:

        调整后的频谱 = numpy.fft.ifftshift(原始频谱)

numpy.fft.ifft2()函数可以实现逆傅里叶变换,返回空域复数数组。它是numpy.fft.fft2()的逆函数,该函数的语法格式为:

        返回值=numpy.fft.ifft2(频域数据)

函数numpy.fft.ifft2()的返回值仍旧是一个复数数组(complex ndarray)。逆傅里叶变换得到的空域信息是一个复数数组,需要将该信息调整至[0, 255]灰度空间内,使用的公式为:

        iimg = np.abs(逆傅里叶变换结果)

代码实例:在Numpy内实现傅里叶变换、逆傅里叶变换,观察逆傅里叶变换的结果图像。

        import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('girl1.jpg',0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)ishift = np.fft.ifftshift(fshift)iimg = np.fft.ifft2(ishift)#print(iimg)iimg = np.abs(iimg)#print(iimg)plt.subplot(121), plt.imshow(img, cmap = 'gray')plt.title('original'), plt.axis('off')plt.subplot(122), plt.imshow(iimg, cmap = 'gray')plt.title('iimg'), plt.axis('off')plt.show()

输出结果:

在这里插入图片描述

2.3 高通滤波

在Numpy内对图像进行傅里叶变换,得到其频域图像。然后,在频域内将低频分量的值处理为0,实现高通滤波。最后,对图像进行逆傅里叶变换,得到恢复的原始图像。观察傅里叶变换前后图像的差异。

代码实例:

        import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image\\boat.bmp',0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)rows, cols = img.shapecrow, ccol = int(rows/2) , int(cols/2)fshift[crow-30:crow+30, ccol-30:ccol+30] = 0ishift = np.fft.ifftshift(fshift)iimg = np.fft.ifft2(ishift)iimg = np.abs(iimg)plt.subplot(121), plt.imshow(img, cmap = 'gray')plt.title('original'), plt.axis('off')plt.subplot(122), plt.imshow(iimg, cmap = 'gray')plt.title('iimg'), plt.axis('off')plt.show()

输出结果:

在这里插入图片描述

3.OpenCV实现傅里叶变换

OpenCV提供了函数cv2.dft()和cv2.idft()来实现傅里叶变换和逆傅里叶变换,下面分别展开介绍。

3.1 实现傅里叶变换

函数cv2.dft()的语法格式为:

返回结果=cv2.dft(原始图像,转换标识)

代码实例:用OpenCV函数对图像进行傅里叶变换,并展示其频谱信息。

        import numpy as npimport cv2import matplotlib.pyplot as pltimg = cv2.imread('girl1.jpg',0)dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)dftShift = np.fft.fftshift(dft)result = 20*np.log(cv2.magnitude(dftShift[:, :,0], dftShift[:, :,1]))plt.subplot(121), plt.imshow(img, cmap = 'gray')plt.title('original'), plt.axis('off')plt.subplot(122), plt.imshow(result, cmap = 'gray')plt.title('result'), plt.axis('off')plt.show()

输出结果:
在这里插入图片描述

3.2 实现傅里叶逆变换

在OpenCV中,使用函数cv2.idft()实现逆傅里叶变换,该函数是傅里叶变换函数cv2.dft()的逆函数。其语法格式为:

        返回结果=cv2.idft(原始数据)

对图像进行傅里叶变换后,通常会将零频率分量移至频谱图像的中心位置。如果使用函数numpy.fft.fftshift()移动了零频率分量,那么在进行逆傅里叶变换前,要使用函数numpy.fft.ifftshift()将零频率分量恢复到原来位置。

代码实例:用OpenCV函数对图像进行傅里叶变换、逆傅里叶变换,并展示原始图像及经过逆傅里叶变换后得到的图像。

        import numpy as npimport cv2import matplotlib.pyplot as pltimg = cv2.imread('girl1.jpg',0)dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)dftShift = np.fft.fftshift(dft)ishift = np.fft.ifftshift(dftShift)iImg = cv2.idft(ishift)iImg= cv2.magnitude(iImg[:, :,0], iImg[:, :,1])plt.subplot(121), plt.imshow(img, cmap = 'gray')plt.title('original'), plt.axis('off')plt.subplot(122), plt.imshow(iImg, cmap = 'gray')plt.title('inverse'), plt.axis('off')plt.show()

输出结果:
在这里插入图片描述

3.3 低通滤波

前面讲过,在一幅图像内,低频信号对应图像内变化缓慢的灰度分量。例如,在一幅大草原的图像中,低频信号对应着颜色趋于一致的广袤草原。低通滤波器让高频信号衰减而让低频信号通过,图像进行低通滤波后会变模糊。

代码实例:使用函数cv2.dft()对图像进行傅里叶变换,得到其频谱图像。然后,在频域内将其高频分量的值处理为0,实现低通滤波。最后,对图像进行逆傅里叶变换,得到恢复的原始图像。观察傅里叶变换前后图像的差异。

        import numpy as npimport cv2import matplotlib.pyplot as pltimg = cv2.imread('girl1.jpg',0)dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)dftShift = np.fft.fftshift(dft)rows, cols = img.shapecrow, ccol = int(rows/2) , int(cols/2)mask = np.zeros((rows, cols,2), np.uint8)#两个通道,与频域图像匹配mask[crow-30:crow+30, ccol-30:ccol+30] = 1fShift = dftShift*maskishift = np.fft.ifftshift(fShift)iImg = cv2.idft(ishift)iImg= cv2.magnitude(iImg[:, :,0], iImg[:, :,1])plt.subplot(121), plt.imshow(img, cmap = 'gray')plt.title('original'), plt.axis('off')plt.subplot(122), plt.imshow(iImg, cmap = 'gray')plt.title('inverse'), plt.axis('off')plt.show()

输出结果:

在这里插入图片描述
运行上述代码,得到如图所示的结果,左图为原始图像,右图为变换后的图像。可以看到,经过低通滤波后,图像的边缘信息被削弱了。

http://www.yayakq.cn/news/685319/

相关文章:

  • 企业网站建设报价单计算机有哪些专业
  • 广州 网站建设模板网络营销方法
  • 买网站服务器要多少钱官方网站建设的意义
  • 网上商城网站建设规划门户网站系统有哪些平台
  • 网站开发维护需要哪些岗位工程施工公司
  • 怎么做网站软件北京网站建设开发公司
  • 校园网站建设实施方案wordpress抓取文章插件
  • windows server iis 添加网站wordpress 评论 图片不显示
  • 建设网站公司哪家好塑料袋销售做哪个网站推广好
  • 怎么建自己的手机网站吗c 做网站怎么连接到别的网页
  • 汽车网站建设论文dw网站大学生代做
  • 制作网站难还是编程难太原网站推广只选中联传媒
  • 上海做网站的拓客公司联系方式
  • 计算机多媒体毕业设计网站建设用名字做壁纸网站
  • 网站备案号规则asp网站建设参考文献
  • 汕尾住房和建设局网站首页WordPress加载语言包
  • 户外运动网站模板wordpress修改发布页面插件
  • 世界建筑网站建设银行茂名网站
  • 做行业网站投资多少建设银行手机网站
  • seo网站建设哪家专业广州游戏网站建设
  • 网站开发答辩设计预期目标天府新区网站建设
  • 凡科免费建站平台wordpress表单留言
  • 老板说做个网站我要怎么做网站推广基本方法是
  • 低成本做网站 百知个人博客是什么
  • 校园门户网站建设方案培训收费网站建设
  • 服装图案素材网站推广普通话手抄报内容大全资料
  • 微餐饮网站建设用途汕头关键词排名
  • asp 做网站的缺点阿里巴巴运营工资大概多少
  • 我的世界手机做图的网站中国十大物流企业
  • dede网站运行天数云服务器做网站镜像类型选啥