Passed
Push — master ( af8682...a51248 )
by Fernando
01:26
created

tests.transforms.preprocessing.test_mask   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 47
dl 0
loc 64
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A TestMask.test_mask_specified_label_small() 0 16 1
A TestMask.test_single_mask() 0 6 1
A TestMask.test_mask_example() 0 9 1
A TestMask.test_mask_specified_label() 0 9 1
A TestMask.test_single_mask_nonzero_background() 0 11 1
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