计算机视觉 图像的傅里叶变换

计算机视觉 图像的傅里叶变换

目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉python网页爬虫、机器学习、计算机视觉(OpenCV)、群智能算法。然后正在学习深度学习的相关内容。以后可能会涉及到网络安全相关领域,毕竟这是每一个学习计算机的梦想嘛!目前更新:目前已经更新了关于网络爬虫的相关知识、机器学习的相关知识、目前正在更新计算机视觉-OpenCV的相关内容。本文摘要

本文我们将继续讲解OpenCV-图像傅里叶变换的相关操作。文章目录傅里叶基础傅里叶基础numpy实现逆傅里叶numpy实现频域的高通滤波傅里叶OpenCV实现傅里叶OpenCV逆变换实现频域的低通滤波傅里叶变换有什么应用场景傅里叶变换matlab实现

傅里叶基础

法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被世人铭记的最大的贡献是:他指出任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数(现在称该和为傅里叶级数)。无论函数多么复杂,只要它是周期的,并且满足某些适度的数学条件,都可以用这样的和来表示。即一个复杂的函数可以表示为简单的正弦和余弦之和。甚至非周期函数(单该曲线下的面积是有限的)也可以用正弦和/或许·余弦乘以加权函数的积分来表示。在这种情况下的公式就是傅里叶公式。

比如说我们以制作一个饮料的过程,使用时域角度来看就是这样:

这里是什么意思呢,就是说一个饮料的制作需要在18点整放1个单位冰糖、3个单位红豆、2个单位的绿豆、4个单位的西红柿,还有1个单位的纯净水。然后再18:01分只需要假如一个单位的纯净水。后面也是一致。而频域是怎么描述这件事的呢?

具体来说就是说他发现了一个规律,就是说这个制作过程,每分钟都要加入冰糖,每两分钟都要加入红豆,每三分钟都要加入一次绿豆…。对于时域角度我们这样描述。

对于频域角度我们这样描述这件事,用直方图表示就是:

如果要考虑更精准的时间精度,我们就要引入相位这个概念。他是一个和时间差有关的一个表述。

这里我们说明一下就是时域和频域的表述是互逆的,对于时域我们是时间为横坐标,振幅为纵坐标。对于频域我们以频率为横坐标,振幅为纵坐标。但是可以看得出来频域的表述更加简单,但是比较抽象,不容易理解。傅里叶说:任何连续周期信号,可以由一组适当的正弦曲线组合而成。注意这里是一组而不是一个。比如对于这样的一个图像:f(x)=3np.sin(0.8x)+7np.sin(1/3x)+2np.sin(0.2x)

看上去是毫无规律可言吧,但是它也可以由一组正弦函数组成。

他们是可逆的,想不到吧,乱七八糟的东西也有规律了。但是他们就是这样组合而成的吗?不可能吧,所以这里就是不是同时开始的一组余弦函数,在叠加时要体现开始的时间。也就说组合的函数他们的开始时间是不一样的。在这里分别对应0,2,3.看公式就看出来啦。这里多说一嘴就是说傅里叶变换从时域角度来看,这个世界是动态的!从频域角度来看这个世界是静止的。从数学角度来讲:傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式。从物理角度来讲:傅里叶变换实现了将信号从空间域到频率域的转换。

傅里叶基础numpy实现

python是可以实现傅里叶变换的,这里就要说到三剑客的numpy了。对应的函数是:numpy.fft.fft2返回一个复数数组(complex ndarray)。numpy.fft.fftshift这个函数时表示把将零频率分量移到频谱中心。

还要设置频谱的范围20*np.log(np.abs(fshift)),对于图像来说就是255了。

import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread(‘imagelena.bmp’,0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)result = 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(result, cmap = ‘gray’)plt.title(‘result’)plt.axis(‘off’)plt.show()12345678910111213141516

结果是:

原图和频谱图像。

  • 傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的 目的。
  • 傅里叶过程是可逆的,图像经过傅里叶变换、逆傅里叶变换后,能 够恢复到原始图像
  • 在频域对图像进行处理,在频域的处理会反映在逆变换图像上

逆傅里叶numpy实现

对于傅里叶的逆操作这里没有什么可说的,就是把频域图像转回原图像。

函数是:numpy.fft.ifft2,那么还有一个操作就是把中间移动回去对啊。numpy.fft.ifftshift。iimg = np.abs(逆傅里叶变换结果)而第二个图就表示低频部分,边缘就表示为高频部分。

import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread(‘imageboat.bmp’,0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)ishift = 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()1234567891011121314

首先我们要进行傅里叶变换吧,才可以进行逆操作。结果是:

完全一致!!!

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月27日
下一篇 2022年6月27日

相关推荐

  • 华为预热AITO 问界 M7,外观曝光,6座中大型SUV

    华为商城官方于6月19日、20日为即将要发布的AITO 问界M7进行了预热,并放出了宣传广告。 而在此前,华为官方也透露了许多关于问界 M7的配置信息,并放出来该车的外观图片。 问…

    2022年6月23日
  • 七爪源码:自定义类型守卫

    嘿,欢迎阅读我们的 TypeScript Narrowing 系列的另一篇文章。 在这篇文章中,我将解释: 类型谓词 如何创建自己的警卫 如何通过排除创建守卫 这是我们系列的第三篇…

    2022年6月12日
  • 电脑快捷键大全 可以收藏起来哟

      很多人电脑每天都会使用,但是对电脑的操作还是那些基础,不会变通,今天小编告诉大家一些小技巧使在进行某些操作时更加的有效率。   在我们使用计算机的时候无法是使用鼠标、键盘不停的…

    2022年6月12日
  • 社保没缴够15年的要“偷着乐”了,2022年新规出台,统统这样处理

    声明:原创不易,禁止搬运,违者必究! 社保已经非常普及了,一个是现在的单位、公司基本上都有五险这个福利,所以也促进参保人的增加。第二个,就是人们对于社保越来越重视了,即便公司不具备…

    2022年8月7日
  • 天玑8000+IMX766双主摄+2K屏幕,两款高性价比的OPPO手机

    在国产手机厂商中,其实OPPO的性价比一直不算高,甚至比不过今年的VIVO,但并不代表它旗下就没有高性价比的机型。 最近,有一些OPPO的产品有了较大幅度的降价,从而极大地提升了性…

    2022年8月12日
  • 未来有发展前景的专业(有前景的专业)

    对于很多考生和家长来说,选择专业一直是一个比较困难的事情,很多家长在报考志愿的时候,都会问专家,孩子学这个专业有没有前途。其实这是一个很笼统的问题,它包含了专业发展前景、对口行业的…

    2022年10月31日
  • 华为Mate50或9月12日前后发布;iPhone 14 Pro版将配三星顶级屏

    华为Mate50或9月12日前后发布 8月2日星期二,欢迎收看今天的「科技V报」,我是@龙二Pro,最近,关于华为Mate50系列要发布的消息越来越多,此前有博主陆续爆料,新机会在…

    2022年8月3日
  • 立秋,阔腿裤更时髦的打开方式:搭配这些上衣、鞋子

    精致的女人每一天都活得很精彩,在她们身上总是能够看到非常时髦的穿衣打扮,其中,出镜率最高的就是阔腿裤的搭配。但是像这种人手一条的裤装,想要穿出与众不同的效果,就要有自己的穿搭思路和…

    2022年8月22日
  • 维金斯留队稳了!勇士格林1换4交易方案曝光,库里忍痛割爱

    所有人都知道,在巨大的薪资压力下,勇士必须要在维金斯、乔丹-普尔、追梦-格林之间做出选择,至少要放弃一位。 站在勇士球迷的角度,很多勇士球迷都希望能留下维金斯和乔丹-普尔,放弃追梦…

    2022年8月17日
  • C++认为C的东西都可以封装一下,实现定制、隐藏、易用、安全

    C++的哲学就是把所有东西都封装一下,提供访问控制(安全控制),提供更多的方法和功能。这种封装也可以称为抽象,通过更高一层的抽象来实现隐藏和安全。 0 结构体封装和控制:访问控制+…

    2022年6月20日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息