圖片降噪(Scipy)

以登月圖片爲例,經過使用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

相關文章
相關標籤/搜索