正变换:
原始图像:
import numpy as np
import cv2 #opencv-python
import matplotlib.pyplot as plt
# numpy.fft.fft2
#
# 1、实现傅里叶变换
# 2、返回一个复数数组(complex ndarray)
# numpy.fft.fftshift
# 将频率分量移动到频谱中心
# 20*np.log(np.abs(fshift))
#
# 设置频谱的范围(0-255),复数的数组是没办法通过图像的方式展示出来,所以需要映射到0-255的图像范围。
#读入图像
img =cv2.imread("..\\images\\chenqiaoen.jpg",0)
#傅里叶变换,得到复数的数组
f = np.fft.fft2(img)
#低频在左上角,放到中心位置,依然是复数
fshift = np.fft.fftshift(f)
#复数需要转换到0-255之间,可以显示的频谱
result = 20*np.log(np.abs(fshift))
#121表示创建一个窗口,一行俩列,第一列显示原始图像
plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title("original")
#不要坐标轴
plt.axis('off')
plt.subplot(122)
plt.imshow(result,cmap="gray")
plt.title("result")
plt.axis('off')
plt.show()
注意:
傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的目的
傅里叶过程是可逆的图像经过傅里叶变换、逆变换后,能够恢复原始图像
在频域对图像进行处理,在频域的处理会反映在逆变换图像上
逆变换:
import numpy as np
import cv2 #opencv-python
import matplotlib.pyplot as plt
img = cv2.imread("../images/chenqiaoen.jpg",0)
#进行傅里叶变换
f = np.fft.fft2(img)
#然后将低频移动到图像中心
fshift = np.fft.fftshift(f)
#傅里叶逆变换,将中心的低频图像再移动到左上角
ishift = np.fft.ifftshift(fshift)
#然后进行逆变换,得到的是复数数组
iomage = np.fft.ifft2(ishift)
#将复数数组去绝对值,转化为实数
image = np.abs(iomage)
#原始图像
plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title('original')
plt.axis('off')
#目标图像
plt.subplot(122)
plt.imshow(image,cmap="gray")
plt.title('image')
plt.axis('off')
plt.show()
效果: