Photoshop 深度学习 数据集标签制作 、注意事项 以及标签颜色的编码、统计和快速像素替换(python)

Faye ·
更新时间:2024-11-10
· 761 次阅读

前言

因为photoshop功能的强大,以及工具的方便,虽然其不是专门的语义分割标注工具,但是仍然可以用其工具进行有效的标注,本文是在吸取经验教训的基础上写的,希望能够帮到所有用这个方法标注的人。
本文的主要内容:photoshop 2020的使用和注意事项、批量转换标签的方法(快速像素替换)
另外可以使用的软件:Pixel Annotation Tool 可以使用涂抹标注,但是这里为了可以多掌握一项技能就用PS了,主要是功能很多,对以后的学习以及工作都有好处,虽然麻烦点,但是掌握的东西多点,是个比较万金油的工具。

一、注意事项

注意这个很重要,否则所有的标签全部报废,所以写在前面,谨记前人走过的弯路才能不让自己过于抓狂,首先将软件调成以下设置
1.套索的设置
在这里插入图片描述
首先找到工具栏里的套索,设置羽化0 不勾选消除锯齿,否则会出现过度色,后面可以用套索进行多边形标注。套索和矩形选框工具是不会产生过度色的。
2.油漆桶的设置
在这里插入图片描述
找到油漆桶设置成这个样式,否则会出现过渡色
3.快速选择工具(请谨慎得使用)
除魔棒以外的其他工具会出现过渡色,但是我会在接下来的过程中告诉你如何规避它,尽量避免两个颜色相交,如果遇上边界相交的地方最好使用套索工具
4.图层必须用白色作为底色,用黑色的话颜色会污染,随后不要在图片里选用白色标注了,注意白色为背景色,在之后的图片转换再换成黑色
5.使用图层进行做标签记得最后保存的时候透明要调成不透明100

二、Photoshop制作标签图片

方法简述:首先打开软件,然后打开图片,建立色板,建立图层,创建画板,选择区域,使用油漆桶进行喷漆,标注完成后输出图片
1.色板建立
在这里插入图片描述
选择自己要进行标注的颜色将其放在一个文件夹里
2.图层和画板的建立
在这里插入图片描述
在这里插入图片描述
将标签图层至于顶端,然后使用套索和油漆桶将图层变为全白,并设置一定的透明度,不要让图层影响图片

选择区域以及标注
这里使用快速选择工具选择轮廓,并用油漆桶(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) 四、总结

希望大家能够吸取经验,少走弯路,祝大家数据集制作顺利,如有不足之处,请大家在下面留言


作者:研志必有功



编码 替换 数据集 数据 学习 深度学习 像素 标签 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号