计算图像分割mask的灰度级个数、以及删除空的分割数据
1、查询mask类别
图像分割的mask是图片格式的话,往往是阈值图像,这样有几个阈值就是分割几个类别的
这里提供代码检测mask的类别个数
摆放如上(只要有mask即可),然后copy下面代码,放在data的同级目录即可:
import os
import numpy as np
from PIL import Image
from tqdm import tqdm
def fun(pth):
root = pth
ro = [os.path.join(root,y) for y in os.listdir(root)]
la = []
for i in tqdm(ro):
j = Image.open(i).convert('L')
j = np.unique(np.array(j))
for iii in j:
if iii not in la:
la.append(iii)
print(la)
if __name__ == '__main__':
root = './data/masks'
fun(pth=root)
输出如下,可以看出这个数据分割是2类的(加上背景nc=3)
2、删去空的data
其实分割的mask中,如果有label是空,也是数据增广的一种,并不是什么坏事。
就像分类中,还有一个其他类别,里面存放的乱七八糟的图片。
目标检测也是,label里面bbox和class全部为空即可。
不过,要是删去这些空的话,也很简单,这里提供图像分割的代码
摆放如下:
复制下面代码,放在data的同级目录即可:
import os
from tqdm import tqdm
import cv2
import numpy as np
def main(pth,im,ms):
img_path = [os.path.join(pth,i) for i in os.listdir(pth)]
for i in tqdm(img_path):
j = i.replace('images','masks').replace(im,ms)
tmp = cv2.imread(j)
if len(np.unique(tmp)) ==1 :
os.remove(i)
os.remove(j)
if __name__=='__main__':
root = './data/images' # data 路径
img_fm = '.jpg' # data 的后缀偏移
mask_fm = '_mask.png' # mask 的后缀偏移
main(pth=root,im=img_fm,ms=mask_fm)
这里的img_fm,mask_fm 是data到mask图片的偏移路径
运行如下,就可以删除了