demo-ml-pennfudanped
/
image_utils.py
83 строки · 2.1 Кб
1import matplotlib.pyplot as plt2import torch3import numpy as np4
5
6def show_image(im):7fix_image_processing()8
9plt.figure(figsize=(5,5), dpi=120)10plt.imshow(im)11plt.axis('off')12plt.show()13
14
15def fix_image_processing():16import os17os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"18
19
20# batch = [num_of_masks, x, y]
21def merge_masks(batch):22return torch.sum(batch, dim=0)23
24
25# batch = [num_of_masks, x, y]
26def merge_masks_with_colors(batch):27color = 128for mask in batch:29mask[mask > 0] = color30color += 131return torch.sum(batch, dim=0)32
33
34def merge_image_and_masks(image, masks):35merged_masks_with_color_dim = torch \36.stack((masks,masks,masks)) \37.permute(1,2,0)38
39stacked_example = np.hstack((merged_masks_with_color_dim, image))40return stacked_example41
42
43# boxes - torch.Size([num_of_masks, 4])
44def build_box_masks(x, y, boxes):45box_mask = np.zeros((len(boxes), x, y))46counter = 047for box in boxes:48xmin, ymin, xmax, ymax = box49box_mask[counter, ymin.long():ymax.long(), xmin.long():xmax.long()] = counter + 150counter += 151box_mask = torch.tensor(box_mask)52return box_mask53
54
55# image - torch.Size([x, y, 3])
56# masks - torch.Size([x, y])
57# box_mask_view - torch.Size([x, y, 3])
58def merge_image_and_masks_boxes(image, masks, box_mask_view):59
60merged_masks_with_color_dim = torch \61.stack((masks,masks,masks)) \62.permute(1,2,0)63
64merged_box_masks_with_color_dim = torch \65.stack((box_mask_view,box_mask_view,box_mask_view)) \66.permute(1,2,0)67
68stacked_example = np.hstack((69merged_masks_with_color_dim,70image,71merged_box_masks_with_color_dim))72return stacked_example73
74
75def show_image_grid(rows, cols, image_batch):76img_count = 077fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(15, 15))78for i in range(rows):79for j in range(cols):80if img_count < len(image_batch):81axes[i, j].imshow(image_batch[img_count].permute(1, 2, 0))82axes[i, j].axis('off')83img_count += 184