Photoshop 深度學習 數據集標籤製作 、注意事項 以及標籤顏色的編碼、統計和快速像素替換(python)

前言

因爲photoshop功能的強大,以及工具的方便,雖然其不是專門的語義分割標註工具,但是仍然可以用其工具進行有效的標註,本文是在吸取經驗教訓的基礎上寫的,希望能夠幫到所有用這個方法標註的人。
本文的主要內容:photoshop 2020的使用和注意事項、批量轉換標籤的方法(快速像素替換)
另外可以使用的軟件:Pixel Annotation Tool 可以使用塗抹標註,但是這裏爲了可以多掌握一項技能就用PS了,主要是功能很多,對以後的學習以及工作都有好處,雖然麻煩點,但是掌握的東西多點,是個比較萬金油的工具。

一、注意事項

注意這個很重要,否則所有的標籤全部報廢,所以寫在前面,謹記前人走過的彎路才能不讓自己過於抓狂,首先將軟件調成以下設置
1.套索的設置
在這裏插入圖片描述
首先找到工具欄裏的套索,設置羽化0 不勾選消除鋸齒,否則會出現過度色,後面可以用套索進行多邊形標註。套索和矩形選框工具是不會產生過度色的。
2.油漆桶的設置
在這裏插入圖片描述
找到油漆桶設置成這個樣式,否則會出現過渡色
3.快速選擇工具(請謹慎得使用)
除魔棒以外的其他工具會出現過渡色,但是我會在接下來的過程中告訴你如何規避它,儘量避免兩個顏色相交,如果遇上邊界相交的地方最好使用套索工具
4.圖層必須用白色作爲底色,用黑色的話顏色會污染,隨後不要在圖片裏選用白色標註了,注意白色爲背景色,在之後的圖片轉換再換成黑色
5.使用圖層進行做標籤記得最後保存的時候透明要調成不透明100

二、Photoshop製作標籤圖片

方法簡述:首先打開軟件,然後打開圖片,建立色板,建立圖層,創建畫板,選擇區域,使用油漆桶進行噴漆,標註完成後輸出圖片
1.色板建立
在這裏插入圖片描述
選擇自己要進行標註的顏色將其放在一個文件夾裏
2.圖層和畫板的建立
在這裏插入圖片描述
在這裏插入圖片描述
將標籤圖層至於頂端,然後使用套索和油漆桶將圖層變爲全白,並設置一定的透明度,不要讓圖層影響圖片

  1. 選擇區域以及標註
    這裏使用快速選擇工具選擇輪廓,並用油漆桶(G)進行標註
    在這裏插入圖片描述
    在這裏插入圖片描述
    注意!!!!!!如果兩個顏色邊界有重疊,請使用套索工具防止過渡色的產生,不然會產生雜色影響邊界
    4.輸出標籤爲png
    在這裏插入圖片描述

三、轉換成語義分割的標籤

1.標註做好了,那麼如何將圖片轉換爲只有1、2、3等數值的標籤呢?首先我們得製作一個純色的color_map,將自己標註的顏色都存進去,如下:
在這裏插入圖片描述
黑色得放進去,注意圖片一定得是純色沒有過渡色的,用套索工具加油漆桶即可完成
2.對圖片的顏色進行編碼
爲了使每個顏色對應一維向量裏的特定值,我們必須對顏色立方體進行編碼,將三維降爲二維,可以將BGR顏色視爲256進制的三位數轉換爲十進制表示的數字
下列是代碼:

def matColorCode(mat):#顏色編碼函數 犧牲內存
    b = (mat[:, :, 0]).astype(np.uint32)  # 讀取藍通道  轉成32位防止溢出
    g = (mat[:, :, 1]).astype(np.uint32)  # 讀取綠通道
    r = (mat[:, :, 2]).astype(np.uint32)  # 讀取紅通道
    return b * 256 * 256 + g * 256 + r

3.將colormap轉爲二維矩陣,並去掉重複的數字,就是顏色表了:

import cv2
import numpy as np

def matColorCode(mat):#顏色編碼函數 犧牲內存
    b = (mat[:, :, 0]).astype(np.uint32)  # 讀取藍通道  轉成32位防止溢出
    g = (mat[:, :, 1]).astype(np.uint32)  # 讀取綠通道
    r = (mat[:, :, 2]).astype(np.uint32)  # 讀取紅通道
    return b * 256 * 256 + g * 256 + r

cmap=cv2.imread(cmap,-1)
cmap = matColorCode(cmap)
cmap=np.unique(cmap)#去重
print('cmap',cmap)#輸出顏色表裏的數字

4.讀取png格式圖片批量轉換成標籤

import glob

images = glob.glob(path + '/*.png')#標籤爲PNG格式 讀取這些東西就行了
images.sort()
for fileLocation in images:#filelocation爲圖片的絕對路徑
    img=cv2.imread(fileLocation,-1)
    if img.max()>20:#防止誤操作
    	img = matColorCode(img)#接上面的函數
    
    number = 0#從零開始
    for i in cmap:
        img = np.where(img == i, number, img)#依次替換像素
        number += 1
    img = np.where(img > number, 0, img)
    cv2.imwrite(fileLocation,img)#
    print(fileLocation)#輸出路徑查看哪些圖片處理完了

5.完整批量標籤轉換代碼

path爲標籤路徑 cmap爲colormap的絕對路徑

import cv2
import numpy as np
import glob
def changeImgLabel(path,cmap):

    def matColorCode(mat):#顏色編碼函數 犧牲內存
        b = (mat[:, :, 0]).astype(np.uint32)  # 讀取藍通道  轉成32位防止溢出
        g = (mat[:, :, 1]).astype(np.uint32)  # 讀取綠通道
        r = (mat[:, :, 2]).astype(np.uint32)  # 讀取紅通道
        return b * 256 * 256 + g * 256 + r#編碼

    cmap=cv2.imread(cmap,-1)
    cmap = matColorCode(cmap)
    cmap=np.unique(cmap.astype(np.uint64))
    print('cmap',cmap)


    images = glob.glob(path + '/*.png')#標籤爲PNG格式 讀取這些東西就行了
    images.sort()
    for fileLocation in images:
        img=cv2.imread(fileLocation,-1)
        if img.max()>20:#防止誤操作
    		img = matColorCode(img)#接上面的函數
        number = 0

        for i in cmap:
            img = np.where(img == i, number, img)
            number += 1
        img = np.where(img > number, 0, img)
        cv2.imwrite(fileLocation,img)#存儲
        print(fileLocation)
#-------------------------------------------------
代碼使用範例
path=r'F:\BaiduNetdiskDownload\U_net_dataset\colormap.png'#顏色表存放路徑
path1=r'F:\BaiduNetdiskDownload\U_net_dataset'#標籤存放路徑
changeImgLabel(path,cmap=path)

四、總結

希望大家能夠吸取經驗,少走彎路,祝大家數據集製作順利,如有不足之處,請大家在下面留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章