scipy.ndimage.

grey_dilation#

scipy.ndimage.grey_dilation(input, size=None, footprint=None, structure=None, output=None, mode='reflect', cval=0.0, origin=0, *, axes=None)[原始碼]#

計算灰度膨脹,可使用結構元素或對應於平面結構元素的足跡。

灰度膨脹是一種數學形態學操作。對於完整且平面的結構元素的簡單情況,它可以被視為滑動窗口上的最大值濾波器。

參數:
inputarray_like

計算灰度膨脹的陣列。

sizetuple of ints

用於灰度膨脹的平面且完整結構元素的形狀。如果提供了 footprintstructure,則為選填。

footprintarray of ints, optional

用於灰度膨脹的平面結構元素的非無限元素的位置。非零值給出中心鄰域的集合,並在該集合上選擇最大值。

structurearray of ints, optional

用於灰度膨脹的結構元素。structure 可以是非平面結構元素。structure 陣列對鄰域中的每個像素應用附加偏移。

outputarray, optional

可以提供用於儲存膨脹輸出的陣列。

mode{‘reflect’,’constant’,’nearest’,’mirror’, ‘wrap’}, optional

mode 參數決定如何處理陣列邊界,其中 cval 是當模式等於 ‘constant’ 時的值。預設值為 ‘reflect’。

cvalscalar, optional

如果 mode 為 ‘constant’,則用於填充輸入邊緣外的值。預設值為 0.0。

originscalar, optional

origin 參數控制濾波器的位置。預設值為 0。

axestuple of int or None

要在其上應用濾波器的軸。如果為 None,則沿所有軸對 input 進行濾波。如果提供了 origin tuple,則其長度必須與軸數相符。

回傳值:
grey_dilationndarray

input 的灰度膨脹。

註解

影像的灰度膨脹是由在域 E 上定義的結構元素 s 給出的:

(input+s)(x) = max {input(y) + s(x-y), for y in E}

特別是,對於定義為 s(y) = 0(對於 y 在 E 中)的結構元素,灰度膨脹計算由 E 定義的滑動窗口內輸入影像的最大值。

灰度膨脹 [1] 是一種數學形態學運算 [2]

參考文獻

範例

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((7,7), dtype=int)
>>> a[2:5, 2:5] = 1
>>> a[4,4] = 2; a[2,3] = 3
>>> a
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 3, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 2, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.grey_dilation(a, size=(3,3))
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 3, 3, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.grey_dilation(a, footprint=np.ones((3,3)))
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 3, 3, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> s = ndimage.generate_binary_structure(2,1)
>>> s
array([[False,  True, False],
       [ True,  True,  True],
       [False,  True, False]], dtype=bool)
>>> ndimage.grey_dilation(a, footprint=s)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 3, 1, 0, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 1, 3, 2, 1, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 1, 1, 2, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.grey_dilation(a, size=(3,3), structure=np.ones((3,3)))
array([[1, 1, 1, 1, 1, 1, 1],
       [1, 2, 4, 4, 4, 2, 1],
       [1, 2, 4, 4, 4, 2, 1],
       [1, 2, 4, 4, 4, 3, 1],
       [1, 2, 2, 3, 3, 3, 1],
       [1, 2, 2, 3, 3, 3, 1],
       [1, 1, 1, 1, 1, 1, 1]])