05 -2 Scipy中 face()新增噪聲、濾波器的使用、

luqin_發表於2019-03-24

登月圖片消噪

import numpy as np
import matplotlib.pyplot as plt
import scipy.misc as misc 

匯入圖片,觀察黑白圖片和彩色圖片的區別

moon_ndarr = plt.imread("./moonlanding.png")
moon_ndarr
# cmap color map 顏色對映cmap中可以使用的值,有很多可以在錯誤提示中檢視
plt.imshow(moon_ndarr,cmap="gray") 

在這裡插入圖片描述

ndarr.shape
結果為:(474, 630)

黑白圖片和彩色圖片是有區別的,彩色圖片是三維陣列 行 列 (點)【r g b】

黑白圖 是二維陣列 行 列 (點)就是單獨的一個值了 這個值表示的是亮度

圖片的灰度化處理

圖片灰度化處理過的, r g b 亮度 把三個值 變成 一個值,取最大值,或者取三個色值的平均值或者取加權平均。

face = misc.face()
plt.imshow(face)

在這裡插入圖片描述

plt.imshow(face.max(axis=-1),cmap="gray")

在這裡插入圖片描述

plt.imshow(face.mean(axis=-1),cmap="gray")

在這裡插入圖片描述

plt.imshow(np.dot(face,ndarr1),cmap="gray")

在這裡插入圖片描述

通過傅立葉變換實現圖片降噪

scipy.fftpack模組用來計算快速傅立葉變換,速度比傳統傅立葉變換更快,是對之前演算法的改進,圖片是二維資料,注意使用fftpack的二維轉變方法.

plt.imshow(moon_ndarr,cmap="gray")

在這裡插入圖片描述

from scipy.fftpack import fft2,ifft2
# 通過傅立葉變換 把描述值的值 變成 描述變化的值
fft_moon = fft2(moon_ndarr)
#np.abs(fft_moon) # 只關心變化大小 所以這裡取一下絕對值
fft_moon[np.abs(fft_moon)> 800] = 0 #把變化很大的值 歸零

#ifft2(fft_moon) #找出變化很大的值,把處理後的 描述變化的值變回描述值的值
ifft_moon = np.real(ifft2(fft_moon)) #只要裡面的實數
# 按照 處理後的 描述值的值 去渲染
plt.figure(figsize=(12,9))
plt.imshow(ifft_moon,cmap="gray")

在這裡插入圖片描述

圖片進行過,新增噪聲,對噪聲圖片使用ndimage中的高斯濾波、中值濾波、signal中維納濾波進行處理,使圖片變清楚

新增噪聲

載入圖片,使用灰色圖片misc.face()新增噪聲

#新增噪聲
noise = np.random.randint(0,100,size=face.shape)
noise
plt.imshow(noise,cmap="gray")

在這裡插入圖片描述

face = misc.face(gray=True)
test_data =face+noise
plt.imshow(test_data,cmap="gray")

在這裡插入圖片描述

處理噪聲

median中值濾波引數size:給出在每個元素上從輸入陣列中取出的形狀位置,定義過濾器功能的輸入

gaussian高斯濾波引數sigma:高斯核的標準偏差

signal維納濾波引數mysize:濾鏡尺寸的標量

import scipy.ndimage as ndimage
from scipy.signal import wiener
median_data = ndimage.median_filter(test_data,size=7)
plt.imshow(median_data,cmap="gray")

在這裡插入圖片描述

gaussian_data = ndimage.gaussian_filter(test_data,sigma=2)
plt.imshow(gaussian_data,cmap="gray")

在這裡插入圖片描述

wiener_data = wiener(test_data,mysize = 7)
plt.imshow(wiener_data,cmap="gray")

在這裡插入圖片描述

相關文章