def tensor2im(image_tensor, imtype=np.uint8, normalize=True):
image_numpy = image_tensor.cpu().float().detach().numpy()
if normalize:
image_numpy = (image_numpy+1)*255.0*0.5
else:
image_numpy = (image_numpy+1)*255.0
image_numpy = np.clip(image_numpy, 0, 255)
blank_image = np.zeros((image_tensor.shape[1],image_tensor.shape[2],image_tensor.shape[0]), np.uint8)
if image_tensor.shape[0] == 3:
blank_image[:,:,0]=image_numpy[2,:,:]
blank_image[:,:,1]=image_numpy[1,:,:]
blank_image[:,:,2]=image_numpy[0,:,:]
else:
blank_image[:,:,:]=image_numpy[:,:,:]
return blank_image
def im2tensor(image_numpy, normalize=True):
if normalize:
image_numpy = (image_numpy/255.0)*2.0-1.0
else:
image_numpy = image_numpy/255.0
image_numpy = np.clip(image_numpy, -1, 1)
blank_image = np.zeros((image_numpy.shape[2],image_numpy.shape[0],image_numpy.shape[1]))
if image_numpy.shape[2] == 3:
blank_image[2,:,:]=image_numpy[:,:,0]
blank_image[1,:,:]=image_numpy[:,:,1]
blank_image[0,:,:]=image_numpy[:,:,2]
else:
blank_image[:,:,:]=image_numpy[:,:,:]
image_tensor = torch.Tensor(blank_image)
return image_tensor
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (17, 17))
new_mask_image = torch.zeros([inst_map.shape[0],inst_map.shape[1],inst_map.shape[2],inst_map.shape[3]], dtype=torch.float32,device=inst_map.device)
for i in range(inst_map.shape[0]):
f_mask = inst_map [i,:,:,:]
f_mask_img = tensor2im(f_mask)
f_mask_img = cv2.dilate(f_mask_img,kernel)
new_mask_image[i,:,:,:] = im2tensor(f_mask_img, normalize=True)