gpt4 book ai didi

python - 如何在Python中的3维数组中进行连通分量标记?

转载 作者:行者123 更新时间:2023-12-02 02:32:13 26 4
gpt4 key购买 nike

大家好,我在处理 3D 数组中的连接组件时遇到问题。实际上,我正在研究用于神经影像研究的 3D CT 扫描数据。为了简单说明,有一个 3D 数组的示例:

filled = np.array([
[[0, 0, 1],[1, 0, 1],[1, 0, 1],[0, 0, 1],[0, 0, 1],[0, 0, 1]],
[[1, 0, 0],[1, 0, 0],[1, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]],
[[1, 0, 0],[1, 0, 0],[1, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]],
[[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 1, 0],[0, 1, 0],[0, 1, 0]],
[[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 1, 0],[0, 1, 0],[0, 1, 0]],
[[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 1, 0],[0, 1, 0],[0, 1, 0]]
])

这就是它的样子:

This how it's look like

问题是,有什么办法可以直接在 3D 空间中做连通分量吗?也许喜欢使用 26 个邻域像素?或者也许只是为了在 3D 中标记对象因为我已经尝试使用 open cv 连接组件来处理每个切片(在 2D 数组中),这就是我处理 2D 数组(切片)及其工作的方式:

# Largest Connected Component
# slice array is from thresholding process (the value is 0, 1, 2)
new_img = np.zeros_like(slice)
for val in np.unique(slice)[1:]:
mask = np.uint8(slice == val)
labels, stats = cv2.connectedComponentsWithStats(mask, 4)[1:3]
largest_label = 1 + np.argmax(stats[1:, cv2.CC_STAT_AREA])
new_img[labels == largest_label] = val

但是我堆叠之后,结果很糟糕。有些切片已经失去了值(value)。也许这里有人以前有处理这个问题的经验,你的回答会非常有帮助。谢谢!

最佳答案

我找到了这个问题的解决方案。 William Silversmith 有一个库不仅支持 2D 图像,还支持 3D 创建。这是链接:https://pypi.org/project/connected-components-3d/

文档已经足够清楚了。如果您遇到同样的问题,我希望这对您有所帮助。

关于python - 如何在Python中的3维数组中进行连通分量标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64876751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com