以登月图片为例,经过使用Scipy 傅立叶变换,实现图片消噪算法
scipy.fftpack模块用来计算快速傅里叶变换
速度比传统傅里叶变换更快,是对以前算法的改进
图片是二维数据,注意使用fftpack的二维转变方法工具
1、导包spa
import numpy as np import scipy as sp # ifft2 inverse 反转 fft2 处理二维数据 from scipy.fftpack import fft2,ifft2 # 绘图工具 import matplotlib.pyplot as plt %matplotlib inline
2、图片处理code
1 # 图片载入 2 moon = plt.imread('./moonlanding.png') 3 4 # 设置展现尺寸大小 5 plt.figure(figsize=(12,9)) 6 7 # 图片展现 cmap=plt.cm.gray (设置展现颜色) 8 plt.imshow(moon,cmap=plt.cm.gray)
1 # 随时查看图片数据,指导操做 2 display(moon,moon.shape)
1 # 将图片进行傅立叶转换 2 moon_fft2 = fft2(moon) 3 4 # 查看傅立叶转换后的数据 5 display(moon_fft2,moon_fft2.shape) 6 7 # 计算全部数据波动频率的平均值 8 np.abs(moon_fft2).mean()
1 # 开始消噪:大于10倍平均值波动,波动比较大,过滤掉 2 cond = np.abs(moon_fft2) > 510 3 4 # 过滤:从新赋值为平均值 5 moon_fft2[cond] = 51 6 7 # 查看图片数据 8 display(moon_fft2,moon_fft2.shape)
1 # 将频域----逆变换--->时域(即肉眼可见的图片) 2 moon_result = ifft2(moon_fft2) 3 4 display(moon_result,moon_result.shape) 5 6 # 去掉虚数 7 moon2 = np.real(moon_result) 8 9 display(moon2,moon2.shape)
1 # 展现图片 2 plt.figure(figsize=(12,9)) 3 4 plt.imshow(moon2,cmap=plt.cm.gray)
1 # 图片保存 2 plt.imsave('./moonlanding_fft2_result.png',moon2)
3、处理先后的图片对比blog
处理前:图片
处理后:ip