python - 向量化用于修改图像分割中使用的掩码的 python 代码

标签 python numpy

我正在应对图像分割挑战。我的面具有 5 个标签(0、1、2、3、4),其中一个面具(2D 矩阵)的布局是:

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

我想合并几个类,使修改后的掩码看起来像:

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

将 0 和 1 合并为 0。 2 变成 1。 合并 3 和 4,将它们更改为 2。

我已经实现了一个循环版本,它花费了很多时间,因为我的面具尺寸是 (601, 462, 951)。

for i in range(0, dim.shape[0]):
  for j in range(0, dim.shape[1]):
    for k in range(0, dim.shape[2]):
      if dim[i, j, k] in (0, 2):
        dim[i, j, k] = 1

      if dim[i, j, k] == 3:
        dim[i, j, k] = 2

      if dim[i, j, k] in (4, 8):
        dim[i, j, k] = 3

      if dim[i, j, k] == 9:
        dim[i, j, k] = 4

我找不到任何方法来矢量化我的代码,以便我可以删除循环。

最佳答案

您可以使用 np.select一个简洁的解决方案,它允许您在给定条件列表的情况下从 choicelist 中进行选择:

np.select([a==1, a==2, (a==3)|(a==4)], [0,1,2])

array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1],
       [0, 0, 0, 0, 1, 1],
       [1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2],
       [2, 2, 2, 2, 2, 2]])

关于python - 向量化用于修改图像分割中使用的掩码的 python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167289/

相关文章:

python - 如何在饼图 matplotlib 上生成更多颜色

python - 谁能澄清一下 Python Web 自动化的一些选项

python - 与列表相比,Python Numpy 如何节省内存?

python - 为什么从数组转换为图像时会发生位移?

python - openCV imshow 随机失败

python - 这里使用持久性 ID 解决的 pickling 问题是什么?

python - os.system 调用 python 失败后继续脚本

python - 如何使用大于 6GB 的 numpy 数组训练模型?

python - 如何根据索引数组拆分 ndarray?

python - cv2.error : OpenCV(4. 5.2) 👎 错误: (-5:Bad argument) 在函数 'cvtColor' 中