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