def test_transform_crop_random_crop_fixed_aspect_ratio_scale_offset(self): aug = tf_crop.RandomCropFixedAspectRatio( [1.0 / 2], scale_range=[0.5, 0.5], offset_scale_range=[-0.5, -0.5]) img_wh = (16, 11) img = np.ones([img_wh[1], img_wh[0], 3], dtype=np.uint8) sem_seg = np.zeros([img_wh[1], img_wh[0]], dtype=np.uint8) sem_seg[5, 4] = 1 sem_seg[10, 13] = 1 sem_seg[5:11, 4:14] = 1 mask_xywh = bu.get_box_from_mask(sem_seg) self.assertArrayEqual(mask_xywh, torch.Tensor([4, 5, 10, 6])) trans = aug.get_transform(img, sem_seg) self.assertArrayEqual(trans.src_rect, torch.Tensor([1.5, 0.0, 6.5, 10.0])) self.assertArrayEqual(trans.output_size, torch.Tensor([10, 5])) out_img = trans.apply_image(img) self.assertArrayEqual(out_img.shape, torch.Tensor([10, 5, 3])) self.assertEqual(np.unique(out_img), 1) out_mask = trans.apply_segmentation(sem_seg) self.assertArrayEqual(out_mask.shape, torch.Tensor([10, 5])) self.assertEqual(np.unique(out_mask[6:, 3:]), 1)
def test_transform_crop_random_crop_fixed_aspect_ratio(self): aug = tf_crop.RandomCropFixedAspectRatio([1.0 / 2]) img_wh = (16, 11) img = np.ones([img_wh[1], img_wh[0], 3], dtype=np.uint8) sem_seg = np.zeros([img_wh[1], img_wh[0]], dtype=np.uint8) sem_seg[5, 4] = 1 sem_seg[10, 13] = 1 mask_xywh = bu.get_box_from_mask(sem_seg) self.assertArrayEqual(mask_xywh, torch.Tensor([4, 5, 10, 6])) trans = aug.get_transform(img, sem_seg) self.assertArrayEqual(trans.src_rect, torch.Tensor([4, -2, 14, 18])) self.assertArrayEqual(trans.output_size, torch.Tensor([20, 10])) out_img = trans.apply_image(img) self.assertArrayEqual(out_img.shape, torch.Tensor([20, 10, 3])) self.assertArrayEqual(np.unique(out_img[2:13, :, :]), torch.Tensor([1])) self.assertArrayEqual(np.unique(out_img[0:2, :, :]), torch.Tensor([0])) self.assertArrayEqual(np.unique(out_img[13:, :, :]), torch.Tensor([0])) out_mask = trans.apply_segmentation(sem_seg) self.assertArrayEqual(out_mask.shape, torch.Tensor([20, 10])) self.assertEqual(out_mask[7, 0], 1) self.assertEqual(out_mask[12, -1], 1)
def test_transform_crop_random_crop_fixed_aspect_ratio_empty_mask(self): """The sem_mask is empty (the whole image is background)""" aug = tf_crop.RandomCropFixedAspectRatio([1.0 / 2]) img_wh = (16, 11) img = np.ones([img_wh[1], img_wh[0], 3], dtype=np.uint8) sem_seg = np.zeros([img_wh[1], img_wh[0]], dtype=np.uint8) mask_xywh = bu.get_box_from_mask(sem_seg) self.assertEqual(mask_xywh, None) trans = aug.get_transform(img, sem_seg) self.assertIsInstance(trans, tf_crop.NoOpTransform) out_img = trans.apply_image(img) self.assertArrayEqual(out_img.shape, img.shape) out_mask = trans.apply_segmentation(sem_seg) self.assertArrayEqual(out_mask.shape, sem_seg.shape)