MCPcopy Create free account
hub / github.com/Project-MONAI/MONAI / test_correct_results

Method test_correct_results

tests/transforms/test_rotated.py:98–141  ·  view source on GitHub ↗
(self, im_type, angle, keep_size, mode, padding_mode, align_corners)

Source from the content-addressed store, hash-verified

96class TestRotated3D(NumpyImageTestCase3D):
97 @parameterized.expand(TEST_CASES_3D)
98 def test_correct_results(self, im_type, angle, keep_size, mode, padding_mode, align_corners):
99 init_param = {
100 "keys": ("img", "seg"),
101 "angle": [0, angle, 0],
102 "keep_size": keep_size,
103 "mode": (mode, "nearest"),
104 "padding_mode": padding_mode,
105 "align_corners": align_corners,
106 "dtype": np.float64,
107 }
108 rotate_fn = Rotated(**init_param)
109 call_param = {"data": {"img": im_type(self.imt[0]), "seg": im_type(self.segn[0])}}
110 rotated = rotate_fn(**call_param)
111 # test lazy
112 lazy_init_param = init_param.copy()
113 for k, m in zip(init_param["keys"], init_param["mode"]):
114 lazy_init_param["keys"], lazy_init_param["mode"] = k, m
115 test_resampler_lazy(
116 rotate_fn, rotated, lazy_init_param, call_param, output_key=k, atol=1e-4 if USE_COMPILED else 1e-6
117 )
118 if keep_size:
119 np.testing.assert_allclose(self.imt[0].shape, rotated["img"].shape)
120 _order = 0 if mode == "nearest" else 1
121 if padding_mode == "border":
122 _mode = "nearest"
123 elif padding_mode == "reflection":
124 _mode = "reflect"
125 else:
126 _mode = "constant"
127 expected = scipy.ndimage.rotate(
128 self.imt[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=_order, mode=_mode, prefilter=False
129 )
130 for k, v in rotated.items():
131 rotated[k] = v.cpu() if isinstance(v, torch.Tensor) else v
132 good = np.sum(np.isclose(expected.astype(np.float32), rotated["img"][0], atol=1e-3))
133 self.assertLessEqual(np.abs(good - expected.size), 5, "diff at most 5 voxels.")
134
135 expected = scipy.ndimage.rotate(
136 self.segn[0, 0], np.rad2deg(angle), (0, 2), not keep_size, order=0, mode=_mode, prefilter=False
137 )
138 expected = np.stack(expected).astype(int)
139 if isinstance(rotated["seg"], MetaTensor):
140 rotated["seg"] = rotated["seg"].as_tensor() # pytorch 1.7 compatible
141 self.assertLessEqual(np.count_nonzero(expected != rotated["seg"][0]), 160)
142
143
144@unittest.skipIf(USE_COMPILED, "unittests are not designed for both USE_COMPILED=True/False")

Callers

nothing calls this directly

Calls 4

RotatedClass · 0.90
test_resampler_lazyFunction · 0.90
astypeMethod · 0.80
as_tensorMethod · 0.80

Tested by

no test coverage detected