圖像語義分割預測標簽可視化
前言
圖像語義分割任務中,網絡輸出后經過概率化處理(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源碼。
結果
