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 為
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]])
# 將 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]])
# 如範例所示,# 核心數字必須為奇數且不得超過原始陣列維度