1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| def load_mosaic_img_and_mask(self, index): indexes = [index] + [random.randint(0, len(self.img_ids) - 1) for _ in range(3)] img_a, mask_a = self.load_img_and_mask(indexes[0]) img_b, mask_b = self.load_img_and_mask(indexes[1]) img_c, mask_c = self.load_img_and_mask(indexes[2]) img_d, mask_d = self.load_img_and_mask(indexes[3])
img_a, mask_a = np.array(img_a), np.array(mask_a) img_b, mask_b = np.array(img_b), np.array(mask_b) img_c, mask_c = np.array(img_c), np.array(mask_c) img_d, mask_d = np.array(img_d), np.array(mask_d)
h = self.img_size[0] w = self.img_size[1]
start_x = w // 4 strat_y = h // 4 offset_x = random.randint(start_x, (w - start_x)) offset_y = random.randint(strat_y, (h - strat_y))
crop_size_a = (offset_x, offset_y) crop_size_b = (w - offset_x, offset_y) crop_size_c = (offset_x, h - offset_y) crop_size_d = (w - offset_x, h - offset_y)
random_crop_a = albu.RandomCrop(width=crop_size_a[0], height=crop_size_a[1]) random_crop_b = albu.RandomCrop(width=crop_size_b[0], height=crop_size_b[1]) random_crop_c = albu.RandomCrop(width=crop_size_c[0], height=crop_size_c[1]) random_crop_d = albu.RandomCrop(width=crop_size_d[0], height=crop_size_d[1])
croped_a = random_crop_a(image=img_a.copy(), mask=mask_a.copy()) croped_b = random_crop_b(image=img_b.copy(), mask=mask_b.copy()) croped_c = random_crop_c(image=img_c.copy(), mask=mask_c.copy()) croped_d = random_crop_d(image=img_d.copy(), mask=mask_d.copy())
img_crop_a, mask_crop_a = croped_a['image'], croped_a['mask'] img_crop_b, mask_crop_b = croped_b['image'], croped_b['mask'] img_crop_c, mask_crop_c = croped_c['image'], croped_c['mask'] img_crop_d, mask_crop_d = croped_d['image'], croped_d['mask']
top = np.concatenate((img_crop_a, img_crop_b), axis=1) bottom = np.concatenate((img_crop_c, img_crop_d), axis=1) img = np.concatenate((top, bottom), axis=0)
top_mask = np.concatenate((mask_crop_a, mask_crop_b), axis=1) bottom_mask = np.concatenate((mask_crop_c, mask_crop_d), axis=1) mask = np.concatenate((top_mask, bottom_mask), axis=0) mask = np.ascontiguousarray(mask) img = np.ascontiguousarray(img) img = Image.fromarray(img) mask = Image.fromarray(mask)
return img, mask
|