opencv学习一: Fourier变换
来源:互联网 发布:慈溪行知职高地址全称 编辑:程序博客网 时间:2024/05/29 12:29
\Fourier变换在图像处理中意义重大。先将这几天学习的图像Fourier变换总结如下:
一:基础原理
- 什么是Fourier变换:
在数学和物理中,或者更准确一点,数学物理方法中,把一个任意函数进行fourier变换的意义等价于把一个函数进行以平面波为基的展开。这和3维下把一个矢量按照x,y,z基展开是一样的,这一点陳先生已经说明了。不但可以按平面波展开,还可以按照球面波展开。只要保证你选取的基是完全且正交的即可(应该属于泛函分析的范畴,要考虑你函数空间的性质,定义norm等)
作者:曾博链接:https://www.zhihu.com/question/19714540/answer/16020416来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这是引用自勃勃的知乎上的一段解释。
将图像信号从空间域转换到复频域 —— 二维离散Fourier变换:
F(u,v)=∑x=0M−1∑y=0N−1f(x,y)∗e−j2π(uxM+vyN)
其中:F(0,0)=∑M−1x=0∑N−1y=0f(x,y) ,也就是说,对于一幅灰度图像而言,F(0,0)指代的是图像空间域的平均灰度。将信号从复频域转换到空间域 —— 二维离散Fourier反变换:
f(x,y)=1MN∑u=0M−1∑v=0N−1f(u,v)∗ej2π(uxM+vyN)
这两个公式是图像从空间域变换到频域的理论基础。随着FFT技术的发现,图像处理的运算量由O(
3.Python与openCV实现图像信号的Fourier变换:
import cv2 #导入cv2包import numpy as np #导入numpy包import matplotlib.pyplot as plt img = cv2.imread('E:\\python_opencv\\img_source\\lena.jpg',0) #直接读为灰度图像img_fourier = np.fft.fft2(img) #Fourier变换fshift = np.fft.fftshift(img_fourier) #将占据信号大多数的低频信号移到图像中间img_fourier_mag = np.log(np.abs(fshift)) #取幅度值,并降低结果对比度(以e为底取对数)img_fourier_back = np.fft.ifftshift(fshift)#将占据信号大多数的低频信号转移回到图像边缘img_back = np.fft.ifft2(img_fourier_back)#Fourier反变换img_back = np.abs(img_back)figure = plt.figure()#原图像fig1 = figure.add_subplot(131)fig1.imshow(img,'gray')plt.title('original')#Fourier变换后的频域fig2 = figure.add_subplot(132)fig2.imshow(img_fourier_mag, 'gray')plt.title('Fourier_space')#Fourier反变换后的图像part3 = figure.add_subplot(133)part3.imshow(img_back,'gray')plt.title('img_back')plt.show()
显示结果为:
由频域转换结果可知,对于细节不是非常多的图像(例如上面的lena图像),低频信号才是最主要的。高频信号只是少数。
4.图像转换到频域到后,相位有什么作用?
import cv2 #导入cv2包import numpy as np #导入numpy包import matplotlib.pyplot as plt img = cv2.imread('E:\python_opencv\img_source\lena.jpg',0) #直接读为灰度图像img_fourier = np.fft.fft2(img) #Fourier变换fshift = np.fft.fftshift(img_fourier) #将占据信号大多数的低频信号移到图像中间img_fourier_mag = np.log(np.abs(fshift)) #取幅度值,并降低结果对比度(以e为底取对数)figure = plt.figure()f2shift = np.fft.ifftshift(np.angle(fshift))img_phase_back = np.fft.ifft2(f2shift)#出来的是复数,无法显示img_phase_back = np.abs(img_phase_back)np.savetxt('b.txt', img_phase_back)#调整大小范围便于显示img_phase_back = (img_phase_back-np.amin(img_phase_back))/(np.amax(img_phase_back)-np.amin(img_phase_back)) #归一化,防止对比度太低时显示效果不好np.savetxt('c.txt', img_phase_back)figure = plt.figure()fig1 = figure.add_subplot(111)fig1.imshow(img_phase_back,'gray')plt.title('phase')plt.show()
显示结果为:
从图像可以明显看出来,从相位还原出来的图像可以大致得到图像的轮廓。
阅读全文
0 0
- opencv学习一: Fourier变换
- 基于opencv的一维Fourier变换
- openCV 傅立叶逆变换 inverse fourier transform
- OpenCV学习笔记(一)对数变换
- 图像的Fourier变换
- 【OpenCV学习】DFT变换
- 学习opencv----放射变换
- Fourier变换的真实含义
- Displaying Fourier transforms in OpenCV
- OpenCV学习笔记-拉普拉斯变换
- OpenCV学习笔记-霍夫圆变换
- opencv学习 密集透射变换
- 学习opencv之Hough变换
- OpenCV中透视变换学习
- Opencv学习---霍夫变换
- opencv学习笔记--霍夫线变换
- 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换
- 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换
- SQL PLUS命令使用大全(转,特有用)
- DataGridView 保存布局文件到本地
- LeetCode-121:Best Time to Buy and Sell Stock (一次股票交易最大利润)
- JmDNS 多设备注册及查找
- Android逆向反调试练习
- opencv学习一: Fourier变换
- python中的单例
- bzoj 1296 [SCOI2009]粉刷匠 (dp)
- 六、tensorflow之添加层。
- 和大于S的最小子数组-LintCode
- ACdream 1157 Segments(cdq分治)
- 对称密码
- android adapter控件及高级控件
- 深度学习所需的python-学习笔记4