(经典)图像的傅里叶变换18607
- 格式:ppt
- 大小:10.26 MB
- 文档页数:72
图像处理之傅⾥叶变换图像处理之傅⾥叶变换⼀、傅⾥叶变换傅⾥叶变换的作⽤:⾼频:变化剧烈的灰度分量,例如边界低频:变化缓慢的灰度分量,例如⼀⽚⼤海滤波:低通滤波器:只保留低频,会使得图像模糊⾼通滤波器:只保留⾼频,会使得图像细节增强OpenCV:opencv中主要就是cv2.dft()和cv2.idft(),输⼊图像需要先转换成np.float32 格式。
得到的结果中频率为0的部分会在左上⾓,通常要转换到中⼼位置,可以通过shift变换来实现。
cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展⽰(0,255)。
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread('lena.jpg',0)img_float32 = np.float32(img)dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)dft_shift = np.fft.fftshift(dft)# 得到灰度图能表⽰的形式magnitude_spectrum = 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(magnitude_spectrum, cmap = 'gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread('lena.jpg',0)img_float32 = np.float32(img)dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT) #时域转换到频域dft_shift = 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] = 1# IDFTfshift = dft_shift*mask #去掉⾼频部分,只显⽰低频部分f_ishift = np.fft.ifftshift(fshift) #将低频部分从中⼼点处还原img_back = cv2.idft(f_ishift) #从频域逆变换到时域img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1]) #该函数通过实部和虚部⽤来计算⼆维⽮量的幅值plt.subplot(121),plt.imshow(img, cmap = 'gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(img_back, cmap = 'gray')plt.title('Result'), plt.xticks([]), plt.yticks([])plt.show()img = cv2.imread('lena.jpg',0)img_float32 = np.float32(img)dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft)rows, cols = img.shapecrow, ccol = int(rows/2) , int(cols/2) # 中⼼位置# ⾼通滤波mask = np.ones((rows, cols, 2), np.uint8)mask[crow-30:crow+30, ccol-30:ccol+30] = 0# IDFTfshift = dft_shift*maskf_ishift = np.fft.ifftshift(fshift)img_back = cv2.idft(f_ishift)img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1]) plt.subplot(121),plt.imshow(img, cmap = 'gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(img_back, cmap = 'gray')plt.title('Result'), plt.xticks([]), plt.yticks([])plt.show()。
这篇文章的核心思想就是:要让读者在不看任何数学公式的情况下理解傅里叶分析。
傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。
但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。
老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。
(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。
所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。
至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。
-------- 以上是定场诗-----------下面进入正题:抱歉,还是要啰嗦一句:其实学习本来就不是易事,我写这篇文章的初衷也是希望大家学习起来更加轻松,充满乐趣。
但是千万!千万不要把这篇文章收藏起来,或是存下地址,心里想着:以后有时间再看。
这样的例子太多了,也许几年后你都没有再打开这个页面。
无论如何,耐下心,读下去。
这篇文章要比读课本要轻松、开心得多一、啥叫频域从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。
这种以时间作为参照来观察动态世界的方法我们称其为时域分析。
而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。
但如果我告诉你,用另一种方法来观察世界的话,你会发现世界是永恒不变的,你会不会觉得我疯了?我没有疯,这个静止的世界就叫做频域。
先举一个公式上并非很恰当,但意义上再贴切不过的例子:在你的理解中,一段音乐是什么呢?这是我们对音乐最普遍的理解,一个随着时间变化的震动。
但我相信对于乐器小能手们来说,音乐更直观的理解是这样的:好的!下课,同学们再见。
是的,其实这一段写到这里已经可以结束了。
图像处理技术中的傅里叶变换方法介绍傅里叶变换是一种将信号从时域转换到频域的方法,图像处理中广泛应用的一种数学工具。
傅里叶变换将图像转换为频域信号,使我们能够观察和分析图像中不同频率的成分。
在图像处理领域,傅里叶变换常用于图像的滤波、去噪、增强等任务。
本文将介绍傅里叶变换的原理和在图像处理中的应用。
让我们了解一下傅里叶变换的原理。
傅里叶变换基于傅里叶级数展开的思想,将函数分解成一组正弦和余弦函数的和。
对于一维信号,傅里叶变换可以表示为以下公式:F(u) = ∫ f(x) * e^(-2πiux) dx其中,F(u)表示信号在频域中的复数表示,f(x)表示输入信号在时域中的复数表示,u表示频率,i为虚数单位。
在图像处理中,傅里叶变换可以应用于二维信号,即图像。
图像可以通过对其在两个方向上进行傅里叶变换,得到其在频率域上的表示。
图像的傅里叶变换可以表示为以下公式:F(u,v) = ∬ f(x,y) * e^(-2πi(ux+vy)) dx dy其中,F(u,v)表示图像在频率域中的复数表示,f(x,y)表示输入图像在空域中的灰度值,u和v表示频率,i为虚数单位。
在图像处理中,我们经常使用的是傅里叶变换的逆变换,即将图像从频域转换回空域。
逆傅里叶变换可以表示为以下公式:f(x,y) = ∬ F(u,v) * e^(2πi(ux+vy)) du dv通过逆傅里叶变换,我们可以将对图像进行频域操作后的图像恢复到原始的空域。
在图像处理中,傅里叶变换有着广泛的应用。
其中之一是频域滤波。
通过将图像转换到频域,在频域中对图像进行滤波操作,可以实现一些空域中难以实现的效果。
傅里叶变换后的频域图像中较低频率成分代表图像的平滑部分,较高频率成分代表图像的细节和边缘。
通过选择不同的滤波器,在频域中滤除或增强不同频率的成分,可以实现图像的模糊、锐化、边缘检测等效果。
傅里叶变换还可以用于图像的压缩和去噪。
在图像压缩中,通过对图像进行傅里叶变换,并保留较低频率成分来实现图像的压缩。