2024-09-30 18:33:52 发布
网友
我有一个三维numpy数组,由1和0组成,定义了多孔固体中的开放空间和填充空间(目前是numpyint64数组)。我想确定从“1”点(体素)到最近的零点的欧几里得距离。有简单的方法吗?在
如果val包含值(0或1),并且pos包含每个体素的位置,则可以使用scipy.spatial.distance.cdist计算所有成对距离:
val
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包及其^{}函数来计算:
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]])
如果
val
包含值(0或1),并且pos
包含每个体素的位置,则可以使用scipy.spatial.distance.cdist
计算所有成对距离:您需要的是distance transform,您可以使用scipy的} 函数来计算:
ndimage
包及其^{相关问题 更多 >
编程相关推荐