Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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])
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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]))
Exemplo n.º 5
0
                        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,
Exemplo n.º 6
0
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((