如何在 python 中的 3 维数组中进行连通分量标记?
How to do connected component labeling in 3 dimensional array in python?
大家好,我在处理 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]]
])
这就是它的样子:
请问有什么方法可以直接在3D中做连通分量space?也许喜欢使用 26 个邻域像素?或者可能只是为了在 3D 中标记对象
因为我已经尝试使用开放式 cv 连接组件来处理每个切片(在二维数组中),这就是我处理二维数组(切片)及其工作的方式:
# 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
但是我把它叠起来后,结果很糟糕。一些切片失去了价值。
也许这里有人以前有过处理这个问题的经验,你的回答会很有帮助。
谢谢!
我找到了这个问题的解决方案。有一个库不仅支持 2D 图像,还支持 William Silversmith 创建的 3D。这是 link :https://pypi.org/project/connected-components-3d/
文档够清楚了。如果您遇到同样的问题,我希望这对您有所帮助。
大家好,我在处理 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]]
])
这就是它的样子:
请问有什么方法可以直接在3D中做连通分量space?也许喜欢使用 26 个邻域像素?或者可能只是为了在 3D 中标记对象 因为我已经尝试使用开放式 cv 连接组件来处理每个切片(在二维数组中),这就是我处理二维数组(切片)及其工作的方式:
# 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
但是我把它叠起来后,结果很糟糕。一些切片失去了价值。 也许这里有人以前有过处理这个问题的经验,你的回答会很有帮助。 谢谢!
我找到了这个问题的解决方案。有一个库不仅支持 2D 图像,还支持 William Silversmith 创建的 3D。这是 link :https://pypi.org/project/connected-components-3d/
文档够清楚了。如果您遇到同样的问题,我希望这对您有所帮助。