圖片降噪(Scipy)
阿新 • • 發佈:2020-08-18
以登月圖片為例,通過使用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 # 圖片載入 2moon = 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)
三、處理前後的圖片對比
處理前:
處理後: