如何在 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/

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