如何从二进制 3D 数组中提取 3D 点(斑点)数组?

问题描述 投票:0回答:1

我有一个形状为 (260,311, 260) 的点的 numpy 数组。它代表空白区域(被零包围)中的 8 个电极(值 1)。如何检测这些斑点并将它们一一个体化? (我期待 8 个 260,311,260 个阵列,每个阵列只有一个电极)

我尝试用 np.nonzero 提取 1 值,但之后我就卡住了。我也尝试过 skimage.feature.blob_log 但它似乎不适用于 numpy 数组;和 Kmeans 聚类,但我想用可变数量的电极来实现。

这是 np.array(np.nonzero(electrodes_data)) 的 3d 图

fig = plt.figure(figsize=(6, 6))
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(all_coordinates[0], all_coordinates[1], all_coordinates[2],
               linewidths=1, alpha=.7,
               edgecolor='k',`your text`
               s = 200,
               c=all_coordinates[0])
    ax.view_init(elev=0, azim=0)
    plt.show()

visualization of blobs

奇怪的是没有一个简单的函数来个性化斑点?!

numpy multidimensional-array scipy blob
1个回答
0
投票

如果您有一个包含二进制 blob 的 3D 数组。您可以使用 scipy.ndimage.label

将它们分开
blobs                         #A 3D array of 1s and zeros.
labelled = ndimage.label(blobs)

现在你想将每个值分成一个数组吗?

separated = []

labels = np.unique(labelled)

for lbl in labels[1:]: #the first value is 0
    z, y, x = np.where(labelled==lbl)
    next = np.zeros( labels.shape )
    next[z, y, x] = 1
    separated.add(next)

现在分开应该有 N 个卷,每个 blob 都有一个二进制标签。

© www.soinside.com 2019 - 2024. All rights reserved.