【发布时间】:2016-06-06 12:13:00
【问题描述】:
我有一个非常大的 3D 图像存储在 Matlab 中的矩阵(大约 500x500x40 体素)中。在这个矩阵中选择了大约 30000 个点(假设是随机的)。假设所选体素的值为 1,而未选择的点为 0。现在我需要为整个 3D 图像中的每个体素计算到最近选定点的欧几里得距离。
例如在二维中,给定一个4x4matrix:
selection = 0 0 1 0
1 0 0 0
0 0 0 1
0 0 0 0
对应的距离矩阵为:
distance = 1 1 0 1
0 1 1 1
1 √2 1 0
2 √5 √2 1
在时间和内存方面,有没有一种有效的方法来做到这一点?
【问题讨论】:
-
你如何定义你的距离?欧几里得?矩阵的 3 个维度是否代表 3 个方向的坐标?
-
距离确实是欧几里得。 3D 矩阵是医学扫描,因此矩阵中的每个“点”实际上都是一个体素。
-
有很多可能性,见即:en.wikipedia.org/wiki/Nearest_neighbor_search。我在考虑八叉树,但我没有相关经验。
-
将你的矩阵重塑为
250000 x 40矩阵,然后从这个矩阵中采样得到一个30000 x 40点矩阵,然后使用上面标记的副本。 -
@sdbonte 是的,直到你提到它,我才知道内存存储,我很抱歉在标记之前没有正确看到它。我将删除重复项。我还认为在一个空间坐标上的每个 3D 切片都是一个数据点,而不是实际的体素本身。由于巨大的内存需求,您可能不得不求助于存储在磁盘上或将操作拆分到多个处理器/机器上。无论哪种方式,它都会相当缓慢。
标签: matlab matrix multidimensional-array distance