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 为 uint8float32float64 时,此函数比 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]])

# 如示例所示,# 内核数字必须为奇数,并且不能超过原始数组的维度