| import os |
| import torch |
| from torchvision.utils import save_image |
| from torch.utils.data import Dataset |
| from torchvision import datasets |
| from utils.general_utils import PILtoTorch |
| from PIL import Image |
| import numpy as np |
|
|
| class CameraDataset(Dataset): |
| |
| def __init__(self, viewpoint_stack, white_background): |
| self.viewpoint_stack = viewpoint_stack |
| self.bg = np.array([1,1,1]) if white_background else np.array([0, 0, 0]) |
| |
| def __getitem__(self, index): |
| viewpoint_cam = self.viewpoint_stack[index] |
| if viewpoint_cam.meta_only: |
| with Image.open(viewpoint_cam.image_path) as image_load: |
| im_data = np.array(image_load.convert("RGBA")) |
| norm_data = im_data / 255.0 |
| arr = norm_data[:,:,:3] * norm_data[:, :, 3:4] + self.bg * (1 - norm_data[:, :, 3:4]) |
| image_load = Image.fromarray(np.array(arr*255.0, dtype=np.byte), "RGB") |
| resized_image_rgb = PILtoTorch(image_load, viewpoint_cam.resolution) |
| viewpoint_image = resized_image_rgb[:3, ...].clamp(0.0, 1.0) |
| if resized_image_rgb.shape[1] == 4: |
| gt_alpha_mask = resized_image_rgb[3:4, ...] |
| viewpoint_image *= gt_alpha_mask |
| else: |
| viewpoint_image *= torch.ones((1, viewpoint_cam.image_height, viewpoint_cam.image_width)) |
| else: |
| viewpoint_image = viewpoint_cam.image |
| |
| return viewpoint_image, viewpoint_cam |
| |
| def __len__(self): |
| return len(self.viewpoint_stack) |
| |
|
|