我有一个形状为 (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()
奇怪的是没有一个简单的函数来个性化斑点?!
如果您有一个包含二进制 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 都有一个二进制标签。