三维二进制数组中到其他类型最近点的距离

2024-09-30 18:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个三维numpy数组,由1和0组成,定义了多孔固体中的开放空间和填充空间(目前是numpyint64数组)。我想确定从“1”点(体素)到最近的零点的欧几里得距离。有简单的方法吗?在


Tags: 方法numpy距离定义空间数组零点体素
2条回答

如果val包含值(0或1),并且pos包含每个体素的位置,则可以使用scipy.spatial.distance.cdist计算所有成对距离:

import numpy as np
from scipy.spatial.distance import cdist
# Find the points corresponding to zeros and ones
zero_indices = (val == 0)
one_indices = (val == 1)
# Compute all pairwise distances between zero-points and one-points
pairwise_distances = distance.cdist(pos[zero_indices, :], pos[one_indices, :])
# Choose the minimum distance
min_dist = np.min(pairwise_distances, axis=0)

您需要的是distance transform,您可以使用scipy的ndimage包及其^{}函数来计算:

>>> import numpy as np
>>> import scipy.ndimage as ndi
>>> img = np.random.randint(2, size=(5, 5))
>>> img
array([[0, 0, 1, 1, 1],
       [1, 0, 1, 0, 1],
       [0, 1, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [0, 1, 1, 1, 1]])
>>> ndi.distance_transform_edt(img)
array([[ 0.        ,  0.        ,  1.        ,  1.        ,  1.41421356],
       [ 1.        ,  0.        ,  1.        ,  0.        ,  1.        ],
       [ 0.        ,  1.        ,  1.        ,  1.        ,  1.41421356],
       [ 0.        ,  0.        ,  0.        ,  1.        ,  2.        ],
       [ 0.        ,  1.        ,  1.        ,  1.41421356,  2.23606798]])

相关问题 更多 >