基于Python语言的OpenCV3实例学习---傅里叶变换
图像处理中常常应用到傅里叶变换的概念。傅里叶变换实质上是指观察得到所有的波形都可以由一系列简单且不同频率的正弦波叠加而来。在学习信号处理时,我们已经应用过这个概念。但是,这个概念在图像处理上有什么用呢?其实图像也是信号的一种表达形式,常见的图像就是二维的离散信号,可以将图像理解为二维矩阵,其中的元素就是像素值。
图像中的频率和幅度谱
一张原始图片往往由许多频率组成。比如在目标边缘处,像素值的变换一般比较强,即某一个像素点与邻处像素点的像素值差异比较大;或者也有差异小的点。这样,我们先来理解两个概念:图像的频率和幅度谱。
- 图像的频率:用于表征图像中灰度变化剧烈程度的指标。图像中的高低频部分是指与邻域点像素差异的强弱(梯度的大小),一般梯度越大,在频谱中亮度就越强。如果一张图片中低频部分越多,图像相对来说就比较柔和。
- 幅度谱:图像经过傅里叶变换后,会得到幅度谱,它是原始图像在变化方面的一种表征。一般是把一张图像中最亮的像素放在幅度谱正中央,然后逐渐变暗。从而可以较为直观地显示原始图像中亮暗像素所占的比例。
实例学习:基于Python的OpenCV3傅里叶变换
首先,我们需要在Python环境中编译程序,并导入必要的库。接下来,我们选取一张测试图片,并进行傅里叶变换和逆变换。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plot
img ('', 0) 读入图像的路径
f np.fft.fft2(img) 二维傅里叶变换
fshift np.fft.fftshift(f)
magnitude_spectrum 20 * np.log(np.abs(fshift)) 幅度谱
row, cols
crow, ccol row / 2, cols / 2
fshift[crow - 30 : crow 30, ccol - 30 : ccol 30] 0
f_ishift np.fft.ifftshift(fshift) 逆变换
img_back np.fft.ifft2(f_ishift)
img_back np.abs(img_back) 取模
(221), (img, cmap'gray')
plot.title('Input'), plot.xticks([]), ([])
(222), (magnitude_spectrum, cmap'gray')
plot.title('Magnitude Spectrum'), plot.xticks([]), ([])
(223), (img_back, cmap'gray')
plot.title('Input in JET'), plot.xticks([]), ([])
()
```
最后,我们看一下实验结果。傅里叶变换可以帮助我们理解图像所包含的意义,从数学角度直观地理解各个像素与像素之间的关系。通过分析傅里叶变换的结果,我们能实现其他的图像操作。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。