登月图片消
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 快速傅里叶变换
from scipy import fftpack
# 数据转换成频率
# 时域转频域
img = np.zeros(shape = (100,200,3),dtype=np.uint8)
# 任何一个像素都一样的值,所以没有波动,看不到形状
img
plt.imshow(img)
![](https://img.haomeiwen.com/i12529562/e588d5db46ba879e.png)
moon = plt.imread('./moonlanding.png')
# 二维的,黑白
moon.shape
# 波动越大,两个像素之间,变化就越剧烈
moon
# 黑白图片,颜色没有指定,所以,通过cmap,指定颜色
# figure图片,设置的尺寸
plt.figure(figsize=(12,9))
# 噪声,周围像素不一致,所以噪声地方,波频大
# 使用傅里叶变换将数据--------->频率(高频率过滤掉,实现了降噪)
plt.imshow(moon,cmap = 'gray')
scipy.fftpack模块用来计算快速傅里叶变换
速度比传统傅里叶变换更快,是对之前算法的改进
图片是二维数据,注意使用fftpack的二维转变方法
![](https://img.haomeiwen.com/i12529562/a9fb69884486bdde.png)
moon_fft = fftpack.fft2(moon)
# 126598.45 +0.j
# 实数 x**2 = 4 ----正负2
# 虚数 x**2 = -4 ---->正负2j
# 傅里叶变化得到的结果,比较大小时候,只看实数,不看虚数
moon_fft
![](https://img.haomeiwen.com/i12529562/0dfc84568fd45133.png)
# 平均值51
# 定义阈值,>510 高频
np.abs(moon_fft).mean()
也可以以3倍的标准差做为条件np.abs(moon_fft).std() * 3
51.193375
cond = np.abs(moon_fft) > 510
# 将大于510,高频波,设置成0,过滤掉
moon_fft[cond] = 0
# 将过滤掉的高频波的数据---------->反转成数据
# inverse
result = fftpack.ifft2(moon_fft)
result
![](https://img.haomeiwen.com/i12529562/0b5fa792121dd668.png)
plt.figure(figsize=(12,9))
# np.real() 把虚数去掉
plt.imshow(np.real(result),cmap = plt.cm.gray)
![](https://img.haomeiwen.com/i12529562/082df0589e902097.png)
原来的图片
plt.figure(figsize=(12,9))
plt.imshow(moon,cmap = 'gray')
![](https://img.haomeiwen.com/i12529562/967ff70fd29eb836.png)
网友评论