中值滤波是数字信号处理、数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值。下面的代码演示了scipy库中signal模块的中值滤波算法的用法。
>>> import random
>>> import numpy as np
>>> import scipy.signal as signal
>>> x = np.arange(0,100,10)
>>> random.shuffle(x) #打乱顺序
>>> x
array([40, 0, 60, 20, 50, 70, 80, 90, 30, 10])
>>> signal.medfilt(x,3) #中值滤波
array([ 0., 40., 20., 50., 50., 70., 80., 80., 30., 10.])
下面的代码则演示了scipy库中ndimage模块对图像进行中值滤波的用法:
>>> from scipy import misc
>>> from scipy import ndimage
>>> import matplotlib.pyplot as plt
>>> face = misc.face() #face是测试图像之一
>>> plt.figure() #创建图形
>>> plt.imshow(face) #绘制测试图像
>>> plt.show()
>>> median_face = ndimage.median_filter(face, 7) #中值滤波
>>> plt.imshow(median_face)
>>> plt.show()
>>> median_face = ndimage.median_filter(face, 3) #缩小邻域为3
>>> plt.imshow(median_face)
>>> plt.show()