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

这篇具有很好参考价值的文章主要介绍了计算机视觉-图像的傅里叶变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😊😊😊欢迎来到本博客😊😊😊
本次博客内容将继续讲解关于OpenCV的相关知识
🎉作者简介⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉python网页爬虫、机器学习、计算机视觉(OpenCV)、群智能算法。然后正在学习深度学习的相关内容。以后可能会涉及到网络安全相关领域,毕竟这是每一个学习计算机的梦想嘛!
📝目前更新🌟🌟🌟目前已经更新了关于网络爬虫的相关知识、机器学习的相关知识、目前正在更新计算机视觉-OpenCV的相关内容。
💛💛💛本文摘要💛💛💛

本文我们将继续讲解OpenCV-图像傅里叶变换的相关操作。

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

🌟傅里叶基础

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

比如说我们以制作一个饮料的过程,使用时域的角度来看就是这样:
计算机视觉-图像的傅里叶变换
这里是什么意思呢,就是说一个饮料的制作需要在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 cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image\\lena.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()

结果是:
计算机视觉-图像的傅里叶变换
原图和频谱图像。

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

🌟逆傅里叶numpy实现

对于傅里叶的逆操作这里没有什么可说的,就是把频域图像转回原图像。
计算机视觉-图像的傅里叶变换
函数是:numpy.fft.ifft2,那么还有一个操作就是把中间移动回去对啊。numpy.fft.ifftshiftiimg = np.abs(逆傅里叶变换结果)而第二个图就表示低频部分,边缘就表示为高频部分。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image\\boat.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()

首先我们要进行傅里叶变换吧,才可以进行逆操作。结果是:
计算机视觉-图像的傅里叶变换
完全一致!!!

🌟频域的高通滤波

首先我们来看看到底什么是高频,什么是低频在图像中如何理解。
低频对应图像内变化缓慢的灰度分量。例如,在一幅大草原的图像中,低频对应着广袤的颜色趋于一致的草原。
高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。例如,在一幅大草原的图像中,其中狮子的边缘等信息。
对于滤波我们之前也了解过了,就是说过滤掉不需要的部分呗。
通过低频的滤波器称为低通滤波器。
通过高频的滤波器称为高通滤波器

修改傅里叶变换以达到特殊目的,然后计算IDFT返回到图像域。比如我们可以利用傅里叶变换进行,图像增强、图像去噪、边缘检测、特征提取、图像压缩、图像加密等。
衰减高频而通过低频,低通滤波器,将模糊一幅图像。
衰减低频而通过高频,高通滤波器,将增强尖锐的细节,但是会导致图像
的对比度降低

那么我们只需要再滤波中来一个掩膜操作,具体看下面:
计算机视觉-图像的傅里叶变换
对于这个掩膜我们这样做:

rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

具体代码是:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image\\boat.bmp',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
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()

得到后的图象是这样的:
计算机视觉-图像的傅里叶变换
可以出来把边缘描绘的非常完整,但是图像的对比度降低了。

🌟傅里叶OpenCV实现

对于OpenCV中的傅里叶变换函数是:返回结果=cv2.dft(原始图像,转换标识)
返回结果是双通道的,第一个是实数部分,第二个通道是虚数部分。
输入图像要首先转换成np.float32 格式, np.float32(img)
flags = cv2.DFT_COMPLEX_OUTPUT,输出一个复数阵列
移动频谱部分和numpy一致,是这样的,numpy.fft.fftshift,然后进行返回值=cv2.magnitude(参数1,参数2)这里参数1就是实数部分,参数2就是虚数部分,并且进行𝑑𝑠𝑡 𝐼 = 根号𝑥(𝐼)2 + 𝑦(𝐼)2操作。

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('image\\lena.bmp',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()

计算机视觉-图像的傅里叶变换
得到的图像和numpy一致。

🌟傅里叶OpenCV逆变换实现

对于傅里叶变换的逆操作,使用OpenCV的函数就是返回结果=cv2.idft(原始数据),然后计算幅度函数仍然是返回值=cv2.magnitude(参数1,参数2)numpy.fft.ifftshift

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('image\\lena.bmp',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()

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

🌟频域的低通滤波

我们这里的想法就是:
计算机视觉-图像的傅里叶变换
自己构建一个低通滤波器,把中间位置设置成255,其余部分为0.那么我们做一个与操作,就可以把高频过滤了。

rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

低通滤波器构建代码。
然后我们完整代码就是:

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('image\\lena.bmp',0)
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
fShift = dftShift*mask
ishift = 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()

结果是:
计算机视觉-图像的傅里叶变换
计算机视觉-图像的傅里叶变换

🌟傅里叶变换有什么应用场景

傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。最简单最直接的应用就是时频域转换,比如在移动通信的LTE系统中,要把接收的信号从时域变成频域,就需要使用FFT(快速傅里叶变换)。又例如对一个采集到的声音做傅立叶变化就能分出好几个频率的信号。比如南非世界杯时,南非人吹的呜呜主拉的声音太吵了,那么对现场的音频做傅立叶变化(当然是对声音的数据做),会得到一个展开式,然后找出呜呜主拉的特征频率,去掉展开式中的那个频率的sin函数,再还原数据,就得到了没有呜呜主拉的嗡嗡声的现场声音。而对图片的数据做傅立叶,然后增大高频信号的系数就可以提高图像的对比度。同样,相机自动对焦就是通过找图像的高频分量最大的时候,就是对好了。

🌟傅里叶变换matlab实现

[i,lcmp]=imread('F:/123.jpg');%=======读取图像 显示图像
subplot(2,2,1),imshow(i,lcmp);
title('original');
ii=im2double(i); %=====将图像矩阵类型转换为double(图像计算很多是不能用整型的),没有这个会报错!! ,如果不用这个就必须转化为灰度图!
i1 = fft2(ii); %======傅里叶变换
i2 =fftshift(i1); %======将变换的频率图像四角移动到中心(原来良的部分在四角 现在移动中心,便于后面的处理)
i3=log(abs(i2)); %=====显示中心低频部分,加对数是为了更好的显示
subplot(2,2,2),imshow(i3,[]);
title('Fourier');
map=colormap(lcmp); %===取色谱
imwrite(i3,map,'f:/ffttank.bmp'); %===将上面i3输入到ffttank文件中
i5 = real(ifft2(ifftshift(i2))); %===频域的图反变换到空域 并取实部
i6 = im2uint8(mat2gray(i5)); %===取其灰度图
imwrite(i6,map,'f:/tank2.bmp','bmp'); %===利用灰度图和原来取得颜色模板 还原图像
subplot(2,2,3),imshow(i6);
title('anti-Fourier');
i7=rgb2gray(i);
i8=fft2(i7);%===对灰色图才能归一化。因为那是2维矩阵,彩色图是3维矩阵,需要转化为2维灰图
m=fftshift(i8); %直流分量移到频谱中心
%RR=real(m); %取傅立叶变换的实部
%II=imag(m); %取傅立叶变换的虚部
A=abs(m);%计算频谱幅值
%A=sqrt(RR.^2+II.^2);
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225; %归一化
subplot(2,2,4),imshow(A); %显示原图像
colorbar; %显示图像的颜色条
title('FFT spectrum'); %图像命名

结果是:
计算机视觉-图像的傅里叶变换

🔎支持🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!文章来源地址https://www.toymoban.com/news/detail-400265.html

到了这里,关于计算机视觉-图像的傅里叶变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据挖掘】时间序列的傅里叶变换:用numpy解释的快速卷积

            本篇告诉大家一个高级数学模型,即傅里叶模型的使用; 当今,傅里叶变换及其所有变体构成了我们现代世界的基础,为压缩、通信、图像处理等技术提供了动力。我们从根源上理解,从根本上应用,这是值得付出的代价。         傅里叶变换算法被认为是所

    2024年02月16日
    浏览(29)
  • 【计算机视觉】图像增强----图像的傅立叶变换

    个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  ⏰往期文章:SpringBoot项目整合微信支付 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 📣种一棵树最好的时间是十年前,其次是现在! 💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 目录 一:

    2024年02月04日
    浏览(22)
  • 【计算机视觉】二、图像形成——实验:2D变换编辑(Pygame)

    【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标   几何基元是计算机图形学中最基本的图形对象,它们是构建更复杂图形的基础单元。常见的几何基元包括: 点(Point) : 由一对或一组坐标值表示的零维对象。 线段(Line Segment) : 由两个端点确定的

    2024年03月22日
    浏览(33)
  • 计算机视觉 图像形成 几何图形和变换 3D到2D投影

            现在我们知道如何表示2D和3D几何图元以及如何在空间上转换它们,我们需要指定如何将 3D图元投影到图像平面上。 我们可以使用线性3D到2D投影矩阵来做到这一点。最简单的模型是正交法,它不需要除法就可以得到最终的(不均匀的)结果。更常用的模型是透视,

    2023年04月08日
    浏览(33)
  • 计算机视觉 | 基于二值图像数字矩阵的距离变换算法

    Hi,大家好,我是半亩花海。 本实验基于 OpenCV 实现了二值图像数字矩阵的距离变换算法。首先生成一个 480x480 的黑色背景图像(定义黑色为0,白色为1),在其中随机选择了三个白色像素点作为距离变换的原点,利用 OpenCV 中 distanceTransform 等相关函数计算并输出这些原点到其

    2024年04月11日
    浏览(30)
  • 【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标

    x = [ x y ] boldsymbol{x} =begin{bmatrix}x\\\\yend{bmatrix} x = [ x y ​ ] 1. 平移变换 [ x ′ y ′ ] = [ x y ] + [ a b ] begin{bmatrix}x\\\'\\\\y\\\'end{bmatrix} = begin{bmatrix}x\\\\yend{bmatrix} + begin{bmatrix}a\\\\bend{bmatrix} [ x ′ y ′ ​ ] = [ x y ​ ] + [ a b ​ ]   将向量 [ a b ] begin{bmatrix}a\\\\bend{bmatrix} [ a b ​ ] 加到 [

    2024年03月17日
    浏览(32)
  • 图像Radon变换与傅里叶变换(matlab)

    图像变化的介绍 图像变换是将图像从空间域变换到变换域。图像变换的目的是根据图像在变换域的某些性质对其处理。通常这些性质在空间域内很难获取。在变换域内处理结束后,将处理的结果进行反转变换到空间域。 我们所看到的图像是在空域上的,其信息具有很强的相

    2024年02月05日
    浏览(34)
  • 最详细的图像傅里叶变换

    数学意义: 傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式 物理效果: 傅里叶变换实现了将信号从空间域到频率域的转换 信号分析: 一维傅里叶变换(将杂乱的信号由 时域 转化到 频域 中)一维傅里叶变化是将信号分解为正弦波的和的形式 时域 横轴是

    2024年02月04日
    浏览(25)
  • 图像处理之傅里叶变换

    1、傅里叶变换的定义 傅里叶变换是在以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某域研究中较复杂的问题在频域中变得简单起来,从而简化其分析过程;另一方面使信号与系统的物理本质在频域中能更好地被揭示出来。当自变量“时间”或“频率”为

    2024年02月15日
    浏览(30)
  • Python图像处理笔记——傅里叶变换

    图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。(灰度变化得快频率就高,灰度变化得慢频率就低)。傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。 傅立叶变换的物理意义: 将图像的灰度分布函数

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包