深度学习预测标签可视化
图像语义分割预测标签可视化
前言
图像语义分割任务中,网络输出后经过概率化处理(sigmoid/softmax
)和取索引(torch.argmax
)后可以得到一个标签数组,标签的值为0/1/2/3...一个值代表一个类别。
这里记录一下输出结果的可视化方法。
方法
-
标签数组转彩色图片
import skimage.io import numpy as np filename = 'E:\Tablefile\mask.png' arr = skimage.io.imread(filename) data = np.zeros((arr.shape[0], arr.shape[1], 3)) + 255 key1 = arr==0 # 代表类别,这里只有2类 key2 = arr==1 data[:,:,0][key1] = 255 # 橙色 data[:,:,1][key1] = 128 data[:,:,2][key1] = 0 data[:,:,0][key2] = 0 # 青色 data[:,:,1][key2] = 255 data[:,:,2][key2] = 255 skimage.io.imsave('E:\Tablefile\label.png',data)
-
彩色图片与原图的叠加显示
''' @opencv cv2.addWeighted ''' import cv2 import numpy as np img = cv2.imread(r'E:\Tablefile\land.png') mask = cv2.imread(r'E:\Tablefile\label.png') img = cv2.resize(img, (400,400)) mask = cv2.resize(mask, (400,400)) # 图像融合 combineValue = cv2.addWeighted(img, 0.5, mask, 0.5, 0) # 0为gamma系数 cv2.imshow('combine', combineValue) cv2.waitKey(0) # cv2.imwrite('E:\Tablefile\overlayBycv2.png', combine) ''' @PIL Image.blend ''' from PIL import Image import matplotlib.pyplot as plt #image 原图 #mask 彩色mask image = Image.open(r'E:\Tablefile\land.png') mask = Image.open(r'E:\Tablefile\label.png') image = image.resize((400,400)) mask = mask.resize((400,400)) image = image.convert('RGBA') mask = mask.convert('RGBA') # 两幅图像进行合并时 # 按公式:blended_img = img*(1–alpha) + mask*alpha image = Image.blend(image, mask, 0.5) image.save("E:\Tablefile\overlayLabelImg.png") image.show()
彩色图片与原图的合成的原理是将两幅图像进行加权计算,同时设置透明度和gamma系数的权重。这里有现成的
cv2.addWeighted
和PIL的Image.blend
可以使用。
原生方法参见https://blog.csdn.net/qq_36068446/article/details/95345137?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=533279a1-d30a-4bd1-86dc-16306fa5888a&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
但该方法中貌似有些许问题?正确的计算方法暂时不详,可参见opencv源码。