登月图片消噪
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")