我有多个二进制分割掩模。它们组合在一起会形成一个3D阵列。如果你把一个像素在第三维度上相加,它应该加起来就是 1
即一个像素应该只有一个 1
贯穿其3维。
[[0, 0],
[1, 0]],
[[1, 1],
[0, 1]]
不幸的是,我的3D数组没有这个条件。
[[0, 0],
[1, 1]],
[[1, 0],
[1, 0]],
[[1, 1],
[1, 0]]
正如我们看到的 2,1
在三个通道中都相等。
我想把低通道的值设置为 0
如果在上级部门 1
存在.如何才能实现第二个例子中的数组结果是这样的。
[[0, 0],
[0, 1]],
[[0, 0],
[0, 0]],
[[1, 1],
[1, 0]]
这很简单,使用 Numpy的高级索引:
import numpy as np
img = np.array([[[0, 0],
[1, 1]],
[[1, 0],
[1, 0]],
[[1, 1],
[1, 0]]])
print(img)
print(np.sum(img, axis=2))
# check for ones in the first position in the third axis
# and get a mask for boolean indexing
mask = img[:, :, 0] == 1
print(mask)
img_2 = img.copy()
# apply the mask to the second element in the third axis
# and set the values to zero there IF there was a one
# in the other place: when the boolean mask is True
img_2[:,:,1][mask] = 0
print(img_2)
print(np.sum(img_2, axis=2))