scipy.ndimage.distance_transform_edt

scipy.ndimage.distance_transform_edt(input, sampling=None, return_distances=True, return_indices=False, distances=None, indices=None)[源代码]

精确的欧几里得距离变换。

除了距离变换之外,还可以计算特征变换。在这种情况下,在单独的数组中返回与每个前景元素最接近的背景元素的索引。

参数
inputarray_like

输入要转换的数据。可以是任何类型,但将被转换为二进制:在输入等于True的地方为1,在其他地方为0。

sampling浮点,或浮点序列,可选

元素沿每个维度的间距。如果是序列,长度必须等于输入秩;如果是单个数字,则用于所有轴。如果未指定,则暗示栅格间距为单位。

return_distances布尔值,可选

是否计算距离变换。默认值为True。

return_indices布尔值,可选

是否计算要素变换。默认值为False。

distancesFloat64 ndarray,可选

一个输出数组,用于存储计算的距离转换,而不是返回它。 return_distances 一定是真的。它的形状必须与 input

indicesint32 ndarray,可选

一个输出数组,用于存储计算的要素转换,而不是返回它。 return_indicies 一定是真的。它的形状必须是 (input.ndim,) + input.shape

退货
distancesFloat64 ndarray,可选

计算的距离变换。仅在以下情况下返回 return_distances 是真的,并且 distances 不提供。它将具有与输入数组相同的形状。

indicesint32 ndarray,可选

计算的要素变换。它对输入的每个维度都有一个输入型数组。请参见下面的示例。仅在以下情况下返回 return_indices 是真的,并且 indices 不提供。

注意事项

欧几里德距离变换给出欧几里德距离的值:

              n
y_i = sqrt(sum (x[i]-b[i])**2)
              i

其中b [i] 是到输入点x的欧几里德距离最小的背景点(值0 [i] ,n是维数。

示例

>>> from scipy import ndimage
>>> a = np.array(([0,1,1,1,1],
...               [0,0,1,1,1],
...               [0,1,1,1,1],
...               [0,1,1,1,0],
...               [0,1,1,0,0]))
>>> ndimage.distance_transform_edt(a)
array([[ 0.    ,  1.    ,  1.4142,  2.2361,  3.    ],
       [ 0.    ,  0.    ,  1.    ,  2.    ,  2.    ],
       [ 0.    ,  1.    ,  1.4142,  1.4142,  1.    ],
       [ 0.    ,  1.    ,  1.4142,  1.    ,  0.    ],
       [ 0.    ,  1.    ,  1.    ,  0.    ,  0.    ]])

沿x采样2个单位,沿y采样1个单位:

>>> ndimage.distance_transform_edt(a, sampling=[2,1])
array([[ 0.    ,  1.    ,  2.    ,  2.8284,  3.6056],
       [ 0.    ,  0.    ,  1.    ,  2.    ,  3.    ],
       [ 0.    ,  1.    ,  2.    ,  2.2361,  2.    ],
       [ 0.    ,  1.    ,  2.    ,  1.    ,  0.    ],
       [ 0.    ,  1.    ,  1.    ,  0.    ,  0.    ]])

还要求提供指数:

>>> edt, inds = ndimage.distance_transform_edt(a, return_indices=True)
>>> inds
array([[[0, 0, 1, 1, 3],
        [1, 1, 1, 1, 3],
        [2, 2, 1, 3, 3],
        [3, 3, 4, 4, 3],
        [4, 4, 4, 4, 4]],
       [[0, 0, 1, 1, 4],
        [0, 1, 1, 1, 4],
        [0, 0, 1, 4, 4],
        [0, 0, 3, 3, 4],
        [0, 0, 3, 3, 4]]])

使用为就地输出提供的数组:

>>> indices = np.zeros(((np.ndim(a),) + a.shape), dtype=np.int32)
>>> ndimage.distance_transform_edt(a, return_indices=True, indices=indices)
array([[ 0.    ,  1.    ,  1.4142,  2.2361,  3.    ],
       [ 0.    ,  0.    ,  1.    ,  2.    ,  2.    ],
       [ 0.    ,  1.    ,  1.4142,  1.4142,  1.    ],
       [ 0.    ,  1.    ,  1.4142,  1.    ,  0.    ],
       [ 0.    ,  1.    ,  1.    ,  0.    ,  0.    ]])
>>> indices
array([[[0, 0, 1, 1, 3],
        [1, 1, 1, 1, 3],
        [2, 2, 1, 3, 3],
        [3, 3, 4, 4, 3],
        [4, 4, 4, 4, 4]],
       [[0, 0, 1, 1, 4],
        [0, 1, 1, 1, 4],
        [0, 0, 1, 4, 4],
        [0, 0, 3, 3, 4],
        [0, 0, 3, 3, 4]]])