def test_correct_results(self, angle, keep_size, mode, padding_mode, align_corners): rotate_fn = Rotated(("img", "seg"), [0, angle, 0], keep_size, (mode, "nearest"), padding_mode, align_corners) rotated = rotate_fn({"img": self.imt[0], "seg": self.segn[0]}) if keep_size: np.testing.assert_allclose(self.imt[0].shape, rotated["img"].shape) _order = 0 if mode == "nearest" else 1 if padding_mode == "border": _mode = "nearest" elif padding_mode == "reflection": _mode = "reflect" else: _mode = "constant" expected = scipy.ndimage.rotate(self.imt[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=_order, mode=_mode, prefilter=False) np.testing.assert_allclose(expected.astype(np.float32), rotated["img"][0], atol=1e-3) expected = scipy.ndimage.rotate(self.segn[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=0, mode=_mode, prefilter=False) expected = np.stack(expected).astype(int) self.assertLessEqual(np.count_nonzero(expected != rotated["seg"][0]), 105)
def _rotate(x, degrees: uniform = 10.0): rotation = Rotated(keys=['image'], angle=degrees, spatial_axes=(0, 1), reshape=False, order=0, mode='constant', cval=0, prefilter=True) data_dict = {'image': x.data} rotation_dict = rotation(data_dict) x = rotation_dict['image'][0] return torch.Tensor(x[None])
def test_correct_results(self, im_type, angle, keep_size, mode, padding_mode, align_corners): rotate_fn = Rotated(("img", "seg"), [0, angle, 0], keep_size, (mode, "nearest"), padding_mode, align_corners, dtype=np.float64) rotated = rotate_fn({ "img": im_type(self.imt[0]), "seg": im_type(self.segn[0]) }) if keep_size: np.testing.assert_allclose(self.imt[0].shape, rotated["img"].shape) _order = 0 if mode == "nearest" else 1 if padding_mode == "border": _mode = "nearest" elif padding_mode == "reflection": _mode = "reflect" else: _mode = "constant" expected = scipy.ndimage.rotate(self.imt[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=_order, mode=_mode, prefilter=False) for k, v in rotated.items(): rotated[k] = v.cpu() if isinstance(v, torch.Tensor) else v good = np.sum( np.isclose(expected.astype(np.float32), rotated["img"][0], atol=1e-3)) self.assertLessEqual(np.abs(good - expected.size), 5, "diff at most 5 voxels.") expected = scipy.ndimage.rotate(self.segn[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=0, mode=_mode, prefilter=False) expected = np.stack(expected).astype(int) if isinstance(rotated["seg"], MetaTensor): rotated["seg"] = rotated["seg"].as_tensor( ) # pytorch 1.7 compatible self.assertLessEqual(np.count_nonzero(expected != rotated["seg"][0]), 160)
def test_correct_results(self, angle, spatial_axes, reshape, order, mode, cval, prefilter): key = "img" rotate_fn = Rotated(key, angle, spatial_axes, reshape, order, mode, cval, prefilter) rotated = rotate_fn({key: self.imt[0]}) expected = list() for channel in self.imt[0]: expected.append( scipy.ndimage.rotate(channel, angle, spatial_axes, reshape, order=order, mode=mode, cval=cval, prefilter=prefilter)) expected = np.stack(expected).astype(np.float32) self.assertTrue(np.allclose(expected, rotated[key]))
1, [0.5, 0.6, 0.9], [1.1, 1, 1.05], keep_size=True))) TESTS.append(( "RandRotated, prob 0", "2D", 0, RandRotated(KEYS, prob=0), )) TESTS.append(( "Rotated 2d", "2D", 8e-2, Rotated(KEYS, random.uniform(np.pi / 6, np.pi), keep_size=True, align_corners=False), )) TESTS.append(( "Rotated 3d", "3D", 1e-1, Rotated(KEYS, [random.uniform(np.pi / 6, np.pi) for _ in range(3)], True), # type: ignore )) TESTS.append(( "RandRotated 3d", "3D", 1e-1,
TESTS.append(("RandZoom 3d", "3D", 9e-2, True, RandZoomd(KEYS, 1, [0.5, 0.6, 0.9], [1.1, 1, 1.05], keep_size=True))) TESTS.append(("RandRotated, prob 0", "2D", 0, True, RandRotated(KEYS, prob=0, dtype=np.float64))) TESTS.append(( "Rotated 2d", "2D", 8e-2, True, Rotated(KEYS, random.uniform(np.pi / 6, np.pi), keep_size=True, align_corners=False, dtype=np.float64), )) TESTS.append(( "Rotated 3d", "3D", 1e-1, True, Rotated(KEYS, [random.uniform(np.pi / 6, np.pi) for _ in range(3)], True, dtype=np.float64), )) TESTS.append((