【问题标题】:Is there a possibility for a segmentation of a 3d-np.array (boolean variables)是否有可能分割 3d-np.array (布尔变量)
【发布时间】:2021-06-25 12:42:28
【问题描述】:

我有一个 3D-numpy-array,它专门填充了布尔变量 (True/False)。 是否有可能或库实现对 N6 社区中所有“True”条目的分段?在我的研究中,不幸的是,我只发现了一些用 openCV 进行图像处理的东西。

然后目标将是一个数组,其中所有连接的“True”条目都提供相同的编号(段的分配)。或者,单独的数组也适用于每个单独的段,其中只有属于相应段的元素是“真实的”。

我将非常感谢您的建议和提示。

编辑: 这将是一个输入数组:

[[[ True  True False False  True]
  [False False False False False]
  [False False False False False]
  [False False  True False False]
  [False False  True  True False]]

 [[ True  True False False  True]
  [False  True False False False]
  [False False False False False]
  [False False False False False]
  [False False  True False False]]

 [[False False False False False]
  [False False False False False]
  [False False  True False False]
  [False False False False False]
  [False False False False False]]

 [[False False False False  True]
  [False False False False False]
  [False False False False False]
  [False False False  True  True]
  [False False False  True  True]]

 [[False False False False  True]
  [False False False False  True]
  [False False False False False]
  [False False False  True  True]
  [False False False  True  True]]]

如图所示(带有单个段的编号):

enter image description here

比我需要一个分段(事先不知道数组中有多少分段)。第一个输出数组如下所示:

[[[ True,  True, False, False,  False],
  [False, False, False, False, False],
  [False, False, False, False, False],
  [False, False,  False, False, False],
  [False, False,  False,  False, False]],

  [[ True,  True, False, False,  False],
  [False,  True, False, False, False], ...(rest is False)

第二个段的第二个数组如下所示:

[[[ False,  False, False, False,  True],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False,  False, False, False],
[False, False,  False,  False, False]],

[[ False,  False, False, False,  True],
 [False,  False, False, False, False], ...(rest is False)

以此类推,直到确定所有段

【问题讨论】:

  • 您必须为此问题提供示例输入和输出。
  • 感谢您的评论和留言。我将编辑问题并提供输入和输出!

标签: python numpy 3d boolean image-segmentation


【解决方案1】:

回答我自己的问题似乎很常见:

以下库是必需的:

connected-components-3d

我的代码:

import cc3d
connectivity = 6 #18, 26
labels_out = cc3d.connected_components(pic_3d, connectivity=connectivity)

适用于布尔数组

结果:

[[[1 1 0 0 2]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 3 0 0]
  [0 0 3 3 0]]

 [[1 1 0 0 2]
  [0 1 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 3 0 0]]

 [[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 4 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]

 [[0 0 0 0 5]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 6 6]
  [0 0 0 6 6]]

 [[0 0 0 0 5]
  [0 0 0 0 5]
  [0 0 0 0 0]
  [0 0 0 6 6]
  [0 0 0 6 6]]]

在此之后,我可以通过简单的循环获得所需的(单独的)数组!

希望它对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多