傅里叶变换和傅里叶逆变换,傅里叶逆变换的原理
涉及
https://blog.csdn.net/Eastmount/article/details/89645301
https://www.cnblogs.com/my-love-is-python/p/10406038.html1.cv2.dft(进行傅里叶变化)
2.DFT (IMG,CV2。DFT _ complex _ output)进行傅立叶变换。
参数说明:img代表输入图片,cv2。DFT_COMPLEX_OUTPUT表示傅立叶变换的方法。
2.np.fft.fftshift(将低频移动到图像的中心)
Np.fft.fftshift(img)将图像的低频部分移动到图像的中心。
参数说明:img表示输入图片。
3.cv2.magnitude(计算矩阵的加和平方根)
2.cv2.magnitude(x,y)将sqrt(x ^ 2y ^ 2)计算为矩阵维数的平方根。
参数说明:需要被x和y平方的数。
4.np.fft.ifftshift(将低频和高频移动到原来位置)
Np.fft.ifftshift(img) #传入图像的低频和高频部分移动到图像的原始位置。
参数说明:img表示输入图片。
5.cv2.idft(傅里叶逆变换)
2.CVFT (IMG) #执行傅立叶逆变换。
说明:img代表傅里叶变换后的图片。
傅立叶变换:将图像从空间域变换到频率域。这是傅立叶变换的公式。
对应频率的方向,我们可以看到红线的频率最小,蓝线的频率最大。高频指变化剧烈的灰度成分,即图像边界所在的地方,低频指变化缓慢的灰度成分。
构造出的傅立叶变换图将低频移到中间位置,通常表现为中间亮,四周暗,因为对于低频,波动大,比如红线,所以亮,而对于高频,波动小,比如蓝线,所以暗。
代码:
第一步:加载图片。
第二步:使用np.float32进行格式转换。
第三步:使用cv2.dft进行傅里叶变换。
第四步:用np.fft.shiftfft把低频移到中间位置。
第五步:使用cv2.magnitude将实部和虚部投影到空间域。
第六步:进行贴图操作。
#-*-编码:utf-8-*-import cv2 import numpy as NP import matplotlib . py plot as PLT #第一步读取图片img=cv2.imread(lena.jpg ,0)#第二步:float32形式转换float32_img=np.float32(img)#第三步:傅里叶变换dft_img=cv2.dft(float32_img,Flags=cv2。DFT_COMPLEX_OUTPUT)#第四步:使用np.fft.shiftfft()将变换后的图像低频转移到中心位置DFT _ img _ ce=NP . FFT . FFT shift(DFT _ img)#第五步:使用cv2.magnitude将实部和虚部转换为实部,乘以20使结果变大img _ DFT=20 * np.log (CV2 .Magnitude (DFT _ img _ ce [:0],DFT _ img _ ce [:1]) #第六步:进行绘图操作PLT。sup lot(121)PLT cmap= gray )PLT . subplot(122)PLT . im show(img _ DFT,cmap= gray )PLT . show()滤波器
傅里叶变换的目的不是观察图像的频率分布(至少不是最终目的),更多的时候是对频率进行滤波,通过修改频率来达到图像增强、图像去噪、边缘检测、特征提取、压缩和加密的目的。
一般有三种滤波方式:低通、高通、带通。所谓低通就是保留图像中的低频成分,滤除高频成分。你可以把过滤器想象成一张渔网。如果要低通滤波器,就是把高频区域的信号全部黑化,同时保留所有低频区域。
低通滤波器
只保留低频,也就是进行低通滤波,因为高频代表的是一些细节,也就是图像的轮廓和边缘,如果丢失了高频部分,图像就容易模糊。
代码:
第一步:看图。
步骤2: np.float32执行类型转换
第三步:使用cv2.dft进行傅里叶变换。
第四步:使用np.fft.fftshift将低频部分转换到图像中心。
第五步:构造蒙版,使蒙版的中心位置为1,边缘位置为0。
第六步:将蒙版与傅立叶变换后的图像合并,只保留中心部分的低频位置。
第七步:用np.fft.ifftshift把低频部分转移回图像原来的位置。
第八步:使用cv2.idft进行傅里叶逆变换。
第九步:用cv2.magnitude把图像的实部和虚部变换到空间域。
步骤10:执行映射操作。
#-*-编码:utf-8-*-从matplotlib导入cv2as cv导入numpy as NP导入pyplot as PLT #第一步读入图片img=cv2.imread(test.jpg ,0)#第二步:数据类型转换img_float=np.float32(img)#第三步:傅里叶变换使用cv2.dft dft=cv2.dft(img_float,Flags=cv2。DFT_COMPLEX_OUTPUT)#第四步:使用np.fft.fftshift将低频转移到图像中心DFT _ center=NP . FFT . FFT shift(DFT)#第五步:定义蒙版:生成的蒙版中间为1,周围为0crow,CCOL=int (img。shape [0]/2),int (img。shape [1]/2) #求图像蒙版的中心位置=NP。零((img。形状[0],img。形状[1],2),NP。uint 8)Mask[crow-]Ccol-30:Ccol 30]=1 #第六步:将Mask与傅里叶变换后的图像相乘,保留中间部分mask_img=dft_center * mask#第七步:使用np.fft.ifftshift(将低频移到原位置img _ IDF=NP。FFT。IFFT移位(mask _ img) #第八步:傅里叶逆变换IMG _ IDF=cv2.idft (IMG _ IDF) #第九步:变换IMG _ IDF=cv2.magnitude (IMG _ IDF [:0],IMG _ IDF [:)1] #第十步:做画图操作PLT。子情节(121)情节。我显示(IMG,CMAP=灰色)工厂。子情节(122)情节。IM Show(CMAP IMG IDF= gray )PLT。显示()010
高通滤波器是指通过高频,衰减低频,通过高频的滤波器。常用于增强锐利的细节,但会降低图像的对比度。滤镜会检测图像的某个区域,根据像素与周围像素的差异来提高像素的亮度。通过Fourier np.fft.fftshift()将图像的低频部分移动到图像的中心。然后用高通滤波器覆盖中心的低频部分,将255的两个点变换为0,高频部分保留。
#-*-编码:utf-8-*-import cv2 as cv import numpy as NP from matplotlib import py plot as PLT # Read image img=cv . im Read( test . png ,0)#傅里叶变换f=NP . FFT 2(img)f shift=NP . FFT . ff shift(f)#设置高通滤波行数,cols=img.shapecrow,ccol=int (rows/2),int(cols/2)f shift[crow-30:crow CCOFFT。IFFT移位(F移位)IIMG=NP。FFT。IFFT2 (I移位)IIMG=NP。ABS (IIMG) #显示原始图像和高通滤波图像plt.subplot(121),plt。IMSHOW (IMG,“灰色”),PLT。标题(“原始图像”)PLT。轴(“关闭”)PLT。子情节(122),情节。IMSHOW (IIMG,“灰色”),PLT。标题(“结果图像”)PLT
#-*-编码:utf-8-*-import cv2 import numpy as NP import matplotlib . py plot as PLT #第一步读入图片img=cv2.imread(test.jpg ,0)#第二步:数据类型转换img_float=np.float32(img)#第三步:傅里叶变换使用cv2.dft dft=cv2.dft(img_float,Flags=cv2。DFT_COMPLEX_OUTPUT)#第四步:使用np.fft.fftshift将低频转移到图像中心DFT _ center=NP . FFT . FFT shift(DFT)#第五步:定义蒙版:生成的蒙版中间为0,周围为1行,CCOL=int (img。shape [0]/2),int (img。shape [1]/2) #求图像蒙版的中心位置=NP。Ones ((img。形状[0],img。形状[1],2),NP。uint 8)Mask[crow-]Ccol-30:Ccol 30]=0 #第六步:将Mask与傅里叶变换后的图像相乘,保留中间部分mask_img=dft_center * mask#第七步:使用np.fft.ifftshift(将低频移到原位置img _ IDF=NP。FFT。IFFT移位(mask _ img) #第八步:傅里叶逆变换IMG _ IDF=cv2.idft (IMG _ IDF) #第九步:变换IMG _ IDF=cv2.magnitude (IMG _ IDF [:0],IMG _ IDF [:)1] #第十步:绘制PLT。子情节(121)情节。我显示(IMG,CMAP=灰色)工厂。子情节(122)情节。IM Show(CMAP IMG IDF= gray )PLT。显示()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。