快速傅里叶变换fftpack(图片去噪)
start
import numpy as np
import matplotlib.pyplot as plt
from scipy import fftpack
moon = plt.imread('./moonlanding.png')
moon_fft = fftpack.fft2(moon)
moon_fft
- array([[126598.45 +0.j , -4608.5796 -1892.4688j ,
-322.093 -20.27744j , …, -906.1585 +1539.3081j ,
-322.093 +20.27744j , -4608.5796 +1892.4688j ],
[ -9421.1 +5242.1133j , 5224.016 -3171.7434j ,
1607.9927 +1269.4243j , …, -677.34503 -936.16174j ,
354.6247 -1003.8348j , 1965.366 -2188.0593j ],
[ -2928.3513 +7280.916j , -1116.4065 +1338.3179j ,
-474.20056 +385.40216j , …, 239.7723 -977.2129j ,
1582.9283 -261.95346j , 2641.927 -292.09366j ],
…,
[ 1850.5718 -2451.1787j , -781.0807 +13.744501j ,
377.90707 +12.6699295j, …, -1526.7869 +1271.2621j ,
-2705.5718 -3488.529j , 1897.404 -2281.9092j ],
[ -2928.3513 -7280.916j , 2641.927 +292.09366j ,
1582.9283 +261.95346j , …, -2208.4302 +81.807434j ,
-474.20056 -385.40216j , -1116.4065 -1338.3179j ],
[ -9421.1 -5242.1133j , 1965.366 +2188.0593j ,
354.6247 +1003.8348j , …, 1190.5856 -1431.9937j ,
1607.9927 -1269.4243j , 5224.016 +3171.7434j ]],
dtype=complex64)
moon_fft.shape, moon.shape
- out:((474, 630), (474, 630))
- 可见:傅里叶变换并不会改变数据的结构
np.abs(moon_fft).mean()
cond = np.abs(moon_fft) > 458
moon_fft[cond] = np.abs(moon_fft).mean()
moon_res = fftpack.ifft2(moon_fft)
res = np.real(moon_res)
plt.figure(figsize=(12,9))
plt.imshow(res,cmap='gray')