Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion monai/transforms/croppad/dictionary.py
Original file line number Diff line number Diff line change
Expand Up @@ -543,8 +543,11 @@ def randomize(self, data: Optional[Any] = None) -> None:

def __call__(self, data: Mapping[Hashable, np.ndarray]) -> List[Dict[Hashable, np.ndarray]]:
ret = []
d = dict(data)
for i in range(self.num_samples):
d = dict(data)
# deep copy all the unmodified data
for key in set(data.keys()).difference(set(self.keys)):
d[key] = deepcopy(data[key])
cropped = self.cropper(d)
# add `patch_index` to the meta data
for key in self.key_iterator(d):
Expand Down
18 changes: 17 additions & 1 deletion tests/test_rand_spatial_crop_samplesd.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import numpy as np
from parameterized import parameterized

from monai.transforms import RandSpatialCropSamplesd
from monai.transforms import Compose, RandSpatialCropSamplesd, ToTensord

TEST_CASE_1 = [
{"keys": ["img", "seg"], "num_samples": 4, "roi_size": [2, 2, 2], "random_center": True},
Expand Down Expand Up @@ -76,6 +76,22 @@ def test_shape(self, input_param, input_data, expected_shape, expected_last):
np.testing.assert_allclose(item["img"], expected_last["img"])
np.testing.assert_allclose(item["seg"], expected_last["seg"])

def test_deep_copy(self):
data = {"img": np.ones((1, 10, 11, 12))}
num_samples = 3
sampler = RandSpatialCropSamplesd(
keys=["img"],
roi_size=(3, 3, 3),
num_samples=num_samples,
random_center=True,
random_size=False,
)
transform = Compose([ToTensord(keys="img"), sampler])
samples = transform(data)
self.assertEqual(len(samples), num_samples)
for sample in samples:
self.assertEqual(len(sample["img_transforms"]), len(transform))


if __name__ == "__main__":
unittest.main()