scipy.signal.

medfilt2d#

scipy.signal.medfilt2d(input, kernel_size=3)[原始碼]#

對 2 維陣列進行中值濾波。

使用由 kernel_size 給定的局部視窗大小(必須為奇數),對輸入陣列 input 應用中值濾波器。陣列會自動進行零填充。

參數:
inputarray_like

一個 2 維輸入陣列。

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

# 將 i,j 替換為 5*5 視窗的中值

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

# 將 i,j 替換為預設 3*3 視窗的中值

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

# 將 i,j 替換為預設 5*3 視窗的中值

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

# 將 i,j 替換為預設 3*5 視窗的中值

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

# 如範例所示,# 核心數字必須為奇數且不得超過原始陣列維度