下面是我试图实现的:我有一个(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)
型
1条答案
按热度按时间neskvpey1#
好吧,在一些混乱之后,原来问题是在JPG格式中写入图像。我以PNG格式写入图像,我没有遇到任何问题。