1
|
|
|
import torch |
2
|
|
|
import torchio as tio |
3
|
|
|
from ...utils import TorchioTestCase |
4
|
|
|
|
5
|
|
|
|
6
|
|
|
class TestMask(TorchioTestCase): |
7
|
|
|
"""Tests for :class:`tio.Mask` class.""" |
8
|
|
|
|
9
|
|
|
def test_single_mask(self): |
10
|
|
|
negated_mask = self.sample_subject.label.data.logical_not() |
11
|
|
|
masked_voxel_indices = negated_mask.nonzero(as_tuple=True) |
12
|
|
|
transform = tio.Mask(masking_method='label') |
13
|
|
|
transformed = transform(self.sample_subject) |
14
|
|
|
assert (transformed.t1.data[masked_voxel_indices] == 0).all() |
15
|
|
|
|
16
|
|
|
def test_single_mask_nonzero_background(self): |
17
|
|
|
background_value = 314159 |
18
|
|
|
negated_mask = self.sample_subject.label.data.logical_not() |
19
|
|
|
masked_voxel_indices = negated_mask.nonzero(as_tuple=True) |
20
|
|
|
|
21
|
|
|
transform = tio.Mask(masking_method='label', |
22
|
|
|
outside_value=background_value) |
23
|
|
|
transformed = transform(self.sample_subject) |
24
|
|
|
|
25
|
|
|
assert (transformed.t1.data[masked_voxel_indices] |
26
|
|
|
== background_value).all() |
27
|
|
|
|
28
|
|
|
def test_mask_specified_label(self): |
29
|
|
|
mask_label = [1] |
30
|
|
|
negated_mask = self.sample_subject.label.data.logical_not() |
31
|
|
|
masked_voxel_indices = negated_mask.nonzero(as_tuple=True) |
32
|
|
|
|
33
|
|
|
transform = tio.Mask(masking_method='label', labels=mask_label) |
34
|
|
|
transformed = transform(self.sample_subject) |
35
|
|
|
|
36
|
|
|
assert (transformed.t1.data[masked_voxel_indices] == 0).all() |
37
|
|
|
|
38
|
|
|
def test_mask_specified_label_small(self): |
39
|
|
|
|
40
|
|
|
def to_image(*numbers): |
41
|
|
|
return torch.as_tensor(numbers).reshape(1, 1, 1, len(numbers)) |
42
|
|
|
|
43
|
|
|
image_tensor = to_image(1, 6, 7, 3, 0) |
44
|
|
|
label_tensor = to_image(0, 1, 2, 3, 4) |
45
|
|
|
mask_labels = [1, 2] |
46
|
|
|
subject = tio.Subject( |
47
|
|
|
image=tio.ScalarImage(tensor=image_tensor), |
48
|
|
|
label=tio.LabelMap(tensor=label_tensor), |
49
|
|
|
) |
50
|
|
|
transform = tio.Mask(masking_method='label', labels=mask_labels) |
51
|
|
|
transformed = transform(subject) |
52
|
|
|
masked_list = transformed.image.data.flatten().tolist() |
53
|
|
|
assert masked_list == [0, 6, 7, 0, 0] |
54
|
|
|
|
55
|
|
|
def test_mask_example(self): |
56
|
|
|
subject = tio.datasets.Colin27() |
57
|
|
|
negated_mask = subject.brain.data.logical_not() |
58
|
|
|
masked_voxel_indices = negated_mask.nonzero(as_tuple=True) |
59
|
|
|
|
60
|
|
|
transform = tio.Mask(masking_method='brain') |
61
|
|
|
transformed = transform(subject) |
62
|
|
|
|
63
|
|
|
assert (transformed.t1.data[masked_voxel_indices] == 0).all() |
64
|
|
|
|