scipy.signal.
medfilt2d#
- scipy.signal.medfilt2d(input, kernel_size=3)[source]#
对二维数组进行中值滤波。
使用由 kernel_size 给定的局部窗口大小(必须为奇数)对 input 数组应用中值滤波。该数组会自动进行零填充。
- 参数:
- inputarray_like
二维输入数组。
- kernel_sizearray_like, 可选
一个标量或长度为 2 的列表,分别给出每个维度中值滤波器窗口的大小。 kernel_size 的元素应为奇数。如果 kernel_size 是一个标量,则该标量用于每个维度的尺寸。默认值为大小为 (3, 3) 的内核。
- 返回:
- outndarray
一个与输入大小相同的数组,包含中值滤波后的结果。
注意
当输入 dtype 为
uint8
、float32
或float64
时,此函数比medfilt
快;对于其他类型,此函数将回退到medfilt
。在某些情况下,scipy.ndimage.median_filter
可能比此函数快。示例
>>> import numpy as np >>> from scipy import signal >>> x = np.arange(25).reshape(5, 5) >>> x array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]])
# 用 5*5 窗口的中值替换 i,j
>>> signal.medfilt2d(x, kernel_size=5) array([[ 0, 0, 2, 0, 0], [ 0, 3, 7, 4, 0], [ 2, 8, 12, 9, 4], [ 0, 8, 12, 9, 0], [ 0, 0, 12, 0, 0]])
# 用默认的 3*3 窗口的中值替换 i,j
>>> signal.medfilt2d(x) array([[ 0, 1, 2, 3, 0], [ 1, 6, 7, 8, 4], [ 6, 11, 12, 13, 9], [11, 16, 17, 18, 14], [ 0, 16, 17, 18, 0]])
# 用默认的 5*3 窗口的中值替换 i,j
>>> signal.medfilt2d(x, kernel_size=[5,3]) array([[ 0, 1, 2, 3, 0], [ 0, 6, 7, 8, 3], [ 5, 11, 12, 13, 8], [ 5, 11, 12, 13, 8], [ 0, 11, 12, 13, 0]])
# 用默认的 3*5 窗口的中值替换 i,j
>>> signal.medfilt2d(x, kernel_size=[3,5]) array([[ 0, 0, 2, 1, 0], [ 1, 5, 7, 6, 3], [ 6, 10, 12, 11, 8], [11, 15, 17, 16, 13], [ 0, 15, 17, 16, 0]])
# 如示例所示,# 内核数字必须为奇数,并且不能超过原始数组的维度