图像的傅里叶变换和逆变换

正变换:

原始图像:

图像的傅里叶变换和逆变换_第1张图片

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()

图像的傅里叶变换和逆变换_第2张图片

 注意:

傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的目的
傅里叶过程是可逆的图像经过傅里叶变换、逆变换后,能够恢复原始图像
在频域对图像进行处理,在频域的处理会反映在逆变换图像上 

逆变换:

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()

效果:

图像的傅里叶变换和逆变换_第3张图片

你可能感兴趣的:(【计算机视觉】,python,opencv,计算机视觉)