图像分割 numpy 数组中的元素检查和修改,同时保持形状

Element check and modification in image segmentation numpy array while maintaining shape

我正在设计一个实时系统,根据语义分割网络中的 class ID 过滤掉图像的某些区域。从网络上,我有一个 numpy 数组 (13,16,1) class ID(数字 0 到 20)对应于图像的区域(即(1,1)是最左上角的区域, ETC)。我想最终得到的是我可以稍后在程序中参考的东西,以决定是否根据 class ID 过滤掉图像的给定区域。

我想过滤掉 classes(例如 class ID 0、2、13)的“黑名单”,并且稍后的分析只考虑那些 class检测到。

我最初设想的解决方案是通过对 class ID 数组的每个元素执行检查来创建 class ID 数组的副本,检查 class ID 匹配“黑名单”中的任何一个,并根据该检查将该值更改为 0 或 1。我无法让我的任何首选解决方案发挥作用,而且我有点担心逐个元素的检查对于实时性能来说太慢,尤其是如果我提高图像分辨率。

作为参考,我从这样的数组开始:

class_ID_array =      1   2   3
                      4   5   6
                      7   8   9

我想按照这些行执行一个操作,生成格式为 desired_array:

的输出
desired_array = class_ID_array.copy()
blacklist = [2, 4, 5]
for x in desired_array:
    if x is in blacklist:
       x = 0
    else:
       x = 1

desired_array =      1   0   1
                     0   0   1
                     1   1   1

执行此操作的有效方法是什么?

def operation( a, blacklist ):
    s = a.shape
    l = np.ndarray.flatten( a )
    ol = [ e not in blacklist for e in l ]
    return np.reshape( ol, s )