最近笔者在研究李飞飞的DenseFusion(对 笔者就是这么多才多艺爱好广泛 (逃 ), 工程中使用了图像增强的技术 。使用的数据集是YCB_Video_Dataset。
其中图像增强的操作之一就是:
使用000003中的两类物体,来作为000001 中的前景遮挡,并且更改label为遮挡之后的label图
本教程中仅使用: -color 和 -label后缀的图片 (其中label图指示了物体在图片上的类标,背景的类标为0)
import numpy as np
from PIL import Image
import random
import numpy.ma as ma
import scipy.misc
#加载图片
img = np.array(Image.open('./000001-color.png'))
#坐标转换 这样才可以与掩码相乘
img = np.transpose(img,(2,0,1))
label = Image.open('./000001-label.png')
#加载前景图片 使用其中的两个类
front = np.array(Image.open('./000003-color.png'))
#坐标转换 这样才可以与掩码相乘
front = np.transpose(front, (2, 0, 1))
f_label = np.array(Image.open('./000003-label.png'))
#获取前景图片的label 删去0即背景
front_label = np.unique(f_label).tolist()[1:]
if len(front_label) < 2:
print('前景图片少于两类')
else:
front_label = random.sample(front_label, 2)
for f_i in front_label:
mk = ma.getmaskarray(ma.masked_not_equal(f_label, f_i))
# 第一次
if f_i == front_label[0]:
mask_front = mk
else:
# 得到的结果为 值不为front_label 的为True 值为front_label 的为 False
mask_front = mask_front * mk
label_masked = label * mask_front + f_label * ~mask_front
img_masked = img * mask_front + front * ~mask_front
# 加入高斯噪声
#img_masked = img_masked + np.random.normal(loc=0.0, scale=7.0, size=img_masked.shape)
#存储
img_masked = np.transpose(img_masked, (1, 2, 0))
scipy.misc.imsave('./output-color.png', img_masked)
scipy.misc.imsave('./output-label.png',label_masked)
# img_masked = Image.fromarray(img_masked)
# img_masked.save('./output-color.png')
得到的结果为:
从前景中选取两类合并之后:
其实相对应的label也已经覆盖
下面是将label图黑色背景(值为0)更改为白色背景(值为255)的结果 :
注:代码已经上传到我的github