Numpy实现傅里叶变换

傅里叶变换

import numpy as np
from skimage import io
from matplotlib import pyplot as plt


# 设置中文
def set_ch():
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['FangSong']
    mpl.rcParams['axes.unicode_minus'] = False


set_ch()

# 读入图像
I = io.imread("I4.jpg", as_gray=True)
# 对图像进行傅里叶变换得到复数数组
f = np.fft.fft2(I)
# 将零频率分量移到频谱中心 低频移到图像中心
fshift = np.fft.fftshift(f)
# 将复数数组重新标定范围,设置区间[0-255]
res = 20 * np.log(np.abs(fshift))
plt.subplot(121)
plt.title("原图")
plt.imshow(I, cmap="gray")
plt.axis("off")
plt.subplot(122)
plt.title("结果")
plt.imshow(res, cmap="gray")
plt.axis("off")
plt.show()

Numpy实现傅里叶变换_第1张图片

 

上图中的结果图像中,中心位置是低频,原本应该在左上角,通过函数将低频移到图像中心。

逆傅里叶变换

逆傅里叶变换是傅里叶变换的逆运算。傅里叶变换是将一个信号从时域变换到频域的过程,逆傅里叶变换则是将一个信号从频域变换回时域的过程。它可以用来求解常微分方程、线性系统、信号滤波等问题。

import numpy as np
from skimage import io
from matplotlib import pyplot as plt


# 设置中文
def set_ch():
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['FangSong']
    mpl.rcParams['axes.unicode_minus'] = False


set_ch()

# 读入图像
I = io.imread("I4.jpg", as_gray=True)
# 对图像进行傅里叶变换得到复数数组
f = np.fft.fft2(I)
# 将零频率分量移到频谱中心 低频移到图像中心
fshift = np.fft.fftshift(f)
#将低频回到左上角
ishift=np.fft.ifftshift(fshift)
#逆傅里叶变换,返回复数数组
new_I=np.fft.ifft2(ishift)
#将复数数组变成在[0,255]区间的灰度
new_I=np.abs(new_I)
# 将复数数组重新标定范围,设置区间[0-255]
res = 20 * np.log(np.abs(fshift))
plt.figure()
plt.title("原图")
plt.imshow(I, cmap="gray")
plt.axis("off")
plt.figure()
plt.title("傅里叶变换")
plt.imshow(res, cmap="gray")
plt.axis("off")
plt.axis("off")
plt.figure()
plt.title("逆傅里叶变换")
plt.imshow(new_I, cmap="gray")
plt.axis("off")
plt.show()

Numpy实现傅里叶变换_第2张图片

Numpy实现傅里叶变换_第3张图片 

Numpy实现傅里叶变换_第4张图片

 

你可能感兴趣的:(图像处理,Python,numpy,python,matplotlib,图像处理)