从向量数组索引矩阵



我有两个图像,一个是RGB图像,另一个是包含0和1的掩码图像,以分割指定对象。(两幅图像是同一物体)我想只在第二个矩阵为1的索引处提取初始图像的RBG值,以便最终值仅为具有黑色背景的对象的图像。在numpy中是否有一种简单的方法来实现这一点?

我想在不使用太多for循环的情况下解决这个问题,我认为在numpy中应该有一个直接的方法,但到目前为止我还没有任何运气

您可以使用numpy的内置广播,然后直接将两者相乘在"pythonic"形式。

import numpy as np
img = np.array([[[ 1,  2,  3],
[ 4,  5,  6]],
[[ 7,  8,  9],
[10, 11, 12]]])  # shape (2, 2, 3)
mask = np.array([[0,1],[0,1]])  # shape (2, 2)
masked_img = img * np.expand_dims(mask, -1)

或者,您可以通过np.newaxis:

扩展掩码尺寸
masked_img = img * mask[..., np.newaxis]

可以。

可以使用numpy。正片叠底,从这里开始

例如

img = np.array([
[[1,2],[3,4]],
[[5,6],[7,8]],
[[9,10],[11,12]]
])
mask = np.array(
[[0,1],[0,1]]
)
print(np.array([
np.multiply(img[0],mask),
np.multiply(img[1],mask),
np.multiply(img[2],mask)]
))
# Res: 

#[[[ 0  2]
#  [ 0  4]]
#
# [[ 0  6]
#   [ 0  8]]
#
#  [[ 0 10]
#  [ 0 12]]]