图片降噪(Scipy)

以登月图片为例,通过使用Scipy 傅立叶变换,实现图片消噪

scipy.fftpack模块用来计算快速傅里叶变换
速度比传统傅里叶变换更快,是对之前算法的改进
图片是二维数据,注意使用fftpack的二维转变方法

 

一、导包

import numpy as np
import scipy as sp

# ifft2 inverse 反转  fft2 处理二维数据
from scipy.fftpack import fft2,ifft2

# 绘图工具
import matplotlib.pyplot as plt
%matplotlib inline

二、图片处理

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)

 

三、处理前后的图片对比

处理前:

处理后:

posted @ 2020-08-18 09:36  安和桥的鸽子  阅读(555)  评论(0)    收藏  举报