05 -2 Scipy中 face()添加噪声、滤波器的使用、

登月图片消噪

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") 

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第1张图片

ndarr.shape
结果为:(474, 630)

黑白图片和彩色图片是有区别的,彩色图片是三维数组 行 列 (点)【r g b】

黑白图 是二维数组 行 列 (点)就是单独的一个值了 这个值表示的是亮度

图片的灰度化处理

图片灰度化处理过的, r g b 亮度 把三个值 变成 一个值,取最大值,或者取三个色值的平均值或者取加权平均。

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第2张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第3张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第4张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第5张图片

通过傅里叶变换实现图片降噪

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

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第6张图片

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")

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第7张图片

图片进行过,添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理,使图片变清楚

添加噪声

加载图片,使用灰色图片misc.face()添加噪声

#添加噪声
noise = np.random.randint(0,100,size=face.shape)
noise
plt.imshow(noise,cmap="gray")

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第8张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第9张图片

处理噪声

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")

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第10张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第11张图片

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

05 -2 Scipy中 face()添加噪声、滤波器的使用、_第12张图片

你可能感兴趣的:(学习)