【发布时间】:2021-02-17 08:16:29
【问题描述】:
问题
我有一个形状为(H, W) 的numpy.array,用于存储图像的像素强度。我想生成一个新的形状(H, W, H, W) 数组,它存储图像中每对像素之间的欧几里得距离(像素之间的“空间”距离;而不是它们的强度差异)。
解决方案尝试
以下方法完全符合我的要求,但速度很慢。我正在寻找一种快速的方法来做到这一点。
d = numpy.zeros((H, W, H, W)) # array to store distances.
for x1 in range(H):
for y1 in range(W):
for x2 in range(H):
for y2 in range(W):
d[x1, y1, x2, y2] = numpy.sqrt( (x2-x1)**2 + (y2-y1)**2 )
额外细节
这里有更多关于我的问题的详细信息。解决上述简单问题的方法可能足以让我弄清楚其余部分。
- 就我而言,图像实际上是 3D 医学图像(即形状为
(H, W, D)的numpy.array)。 - 3D 像素可能不是立方体(例如,每个像素可能代表 1 毫米 x 2 毫米 x 3 毫米的体积)。
【问题讨论】:
-
所以您要计算像素坐标之间的距离,而不是像素本身的强度?
-
像素本身可能有不同的体积?
-
@Jensun 这是一个 3D 医学图像,其中每个 3D 像素(“体素”)代表一个小体积。这些体积是矩形棱柱,但它们可能不是立方体。所有的体素都具有相同的形状。
-
必须计算体素质心之间的距离吗?
-
@Jensun 是的,在质心之间。
标签: python performance numpy linear-algebra