python np.argmin的索引值错误

8ehkhllq  于 6个月前  发布在  Python
关注(0)|答案(1)|浏览(55)

下面是我试图实现的:我有一个(256,512,3)图像,左半部分是输入图像,右半部分是对应的分割掩码。我使用巴黎城市景观数据集。我通过检查哪个类的RGB值最接近,将像素Map到classID。
输入示例:
x1c 0d1x的数据
为了将分割掩码转换为具有相应类别标签的图像(总共有31个类别),我这样做:

def transformMask(input):
    global x
    input = np.expand_dims(input, axis= 2) #x.shape -> 1,1,31,3 | input.shape -> 256,256,1,3 (after expand_dims))
    output = np.argmin(np.linalg.norm(x - input, axis= -1), axis= -1)
    if np.sum(output > 31) > 0:
        exit(0)
    return np.broadcast_to(np.expand_dims(output, axis= -1), (256,256,3))

字符串
这里,x是一个包含31个类别的RGB值的数组。逻辑上,np.linalg.norm(x - input, axis= -1)之后的维度将是(256,256,31),因此,np.argmin(np.linalg.norm(x - input, axis= -1), axis= -1)之后的维度将是(256,256)
然而,在进一步检查时,转换后的掩码包含大于31的值,但这不应该是可能的,因为当最后一个轴中的索引数为31时,最小值的索引如何大于31?
我确实尝试单独执行这种转换(即只对一个图像),但没有任何问题。
为什么/如何发生这种情况?这就是transformMask的调用方式:

target_mask =  transformMask(image[:,256:,:]).astype(dtype= np.uint8)

neskvpey

neskvpey1#

好吧,在一些混乱之后,原来问题是在JPG格式中写入图像。我以PNG格式写入图像,我没有遇到任何问题。

相关问题