我有一个numpy数组的3个灰度图像,只有0和255个值(shape: (3, 512, 512)
)。我使用tf.one_hot
(shape: (3, 512, 512, 2)
)将它们转换为一个热门编码为2个类。现在,我正试图通过np.argmax
将它们恢复原状。但是当我阅读图像时,它们都是黑色的。
labels = []
labels.append(label_1)
labels.append(label_2)
labels.append(label_3)
labels = np.asarray(labels)
print(labels.shape) # (3, 512, 512)
sess = tf.InteractiveSession()
labels = tf.one_hot(labels, 2) # (3, 512, 52, 2)
print(labels.shape)
#print(labels)
labels = labels.eval() # to convert to numpy array from tensor
imgs = np.argmax(labels, axis=3) # also tried tf.argmax
print(imgs.shape) # (3, 512, 512)
for i in range(imgs.shape[0]):
image = imgs[i]
print(img.shape) # (512, 512)
indices = np.where(image > 0)
print(indices) # array([], dtype=int64), array([], dtype=int64)
print(indices)
image = Image.fromarray(image, 'L')
image.show() # black images, values all zero
我确信我错过了一些非常简单但却无法理解的东西。任何帮助将不胜感激。感谢。
修改
我检查了数组具有非零值的索引。但是所有的值似乎都是零。所以,不是显示图像的问题。我认为问题出在argmax
,但我不知道是什么。
答案 0 :(得分:1)
Argmax返回在某个维度上出现最大值的索引。在您的情况下,您将argmax放在长度为2的维度上,因此对于(3,512,512)数组中的每个位置,它返回0或1。这两个选项在8位刻度上非常暗,并且显示为黑色!您必须确保将二进制图像显示为二进制文件。
之前我没有使用过此库,但可能会尝试mode='I'
?或其他一些模式https://pillow.readthedocs.io/en/3.1.x/handbook/concepts.html#concept-modes。 argmax的返回类型很重要。