幅值谱:频率和幅值的关系。中心为频率最小点。因此幅值谱中心部分代表的是低频信息,即空间域的平缓的部分。越往外代表的是高频信息,空间域的边缘啊噪声等
频率:以正弦波为例,就是周期的倒数
幅值:周期内最大值
幅值高(幅值谱越亮的部分)代表像素越多。一幅图像经过傅里叶变换之后一定是中心较亮,四周较暗(低频像素多,高频像素少),因为一般一幅图像中高频信息(边缘等)是很少的,多的是背景。
高通滤波,低通滤波是按频率划分的。对于正弦曲线,振幅变化快就是高频,变化慢就是低频。那么对于图像,像素值变化快就是高频(噪声啦,边缘啦、边缘及噪声在局部像素值变化较大),像素值变化慢就是低频。所以一幅图像低频较多,高频较少。那么保留高频就是高通滤波器(边缘提取),保留低频就是低通录波器(图像平滑)。
傅里叶变换将图像转换成幅值谱(magnitude_spectrum):按频率从小到大由中心向四周扩散,幅值谱越亮说明像素越多,反之则越少。
上代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../images/example_01.jpg',0)
# 高通滤波 numpy 用的多
# 正变换
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)
magnitude_spectrum=20*np.log(np.abs(fshift))
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.show()
上效果: