|
1
|
|
|
import torchio as tio |
|
2
|
|
|
from ...utils import TorchioTestCase |
|
3
|
|
|
|
|
4
|
|
|
|
|
5
|
|
|
class TestProjection(TorchioTestCase): |
|
6
|
|
|
"""Tests for :class:`tio.SlabProjection` class.""" |
|
7
|
|
|
|
|
8
|
|
|
def test_default_projection(self): |
|
9
|
|
|
transform = tio.SlabProjection('S') |
|
10
|
|
|
transformed = transform(self.sample_subject) |
|
11
|
|
|
axis_index = self.sample_subject.t1.axis_name_to_index('S') |
|
12
|
|
|
self.assertEqual(transformed.t1.shape[axis_index], 1) |
|
13
|
|
|
|
|
14
|
|
|
def test_invalid_axis_name(self): |
|
15
|
|
|
with self.assertRaises(ValueError): |
|
16
|
|
|
transform = tio.SlabProjection('123') |
|
17
|
|
|
transform(self.sample_subject) |
|
18
|
|
|
|
|
19
|
|
|
def test_projection_type_invalid_input(self): |
|
20
|
|
|
with self.assertRaises(ValueError): |
|
21
|
|
|
tio.SlabProjection('S', projection_type='bad') |
|
22
|
|
|
|
|
23
|
|
|
def test_percentile_is_required(self): |
|
24
|
|
|
with self.assertRaises(ValueError): |
|
25
|
|
|
tio.SlabProjection('S', projection_type='percentile') |
|
26
|
|
|
|
|
27
|
|
|
def test_percentile_is_invalid(self): |
|
28
|
|
|
with self.assertRaises(ValueError): |
|
29
|
|
|
tio.SlabProjection( |
|
30
|
|
|
'S', projection_type='percentile', percentile=-1) |
|
31
|
|
|
|
|
32
|
|
|
def test_full_slabs_only(self): |
|
33
|
|
|
sub = tio.datasets.Colin27() |
|
34
|
|
|
transform1 = tio.SlabProjection('S', slab_thickness=100, stride=100) |
|
35
|
|
|
transform2 = tio.SlabProjection( |
|
36
|
|
|
'S', slab_thickness=100, stride=100, full_slabs_only=False) |
|
37
|
|
|
transformed1 = transform1(sub) |
|
38
|
|
|
transformed2 = transform2(sub) |
|
39
|
|
|
axis_index = sub.t1.axis_name_to_index('S') |
|
40
|
|
|
self.assertEqual(transformed1.t1.shape[axis_index], 1) |
|
41
|
|
|
self.assertEqual(transformed2.t1.shape[axis_index], 2) |
|
42
|
|
|
|
|
43
|
|
|
def test_maximum_intensity_projection(self): |
|
44
|
|
|
transform = tio.SlabProjection('S', projection_type='max') |
|
45
|
|
|
transform(self.sample_subject) |
|
46
|
|
|
|
|
47
|
|
|
def test_minimum_intensity_projection(self): |
|
48
|
|
|
transform = tio.SlabProjection('S', projection_type='min') |
|
49
|
|
|
transform(self.sample_subject) |
|
50
|
|
|
|
|
51
|
|
|
def test_mean_intensity_projection(self): |
|
52
|
|
|
transform = tio.SlabProjection('S', projection_type='mean') |
|
53
|
|
|
transform(self.sample_subject) |
|
54
|
|
|
|
|
55
|
|
|
def test_median_intensity_projection(self): |
|
56
|
|
|
transform = tio.SlabProjection('S', projection_type='median') |
|
57
|
|
|
transform(self.sample_subject) |
|
58
|
|
|
|
|
59
|
|
|
def test_percentile_intensity_projection(self): |
|
60
|
|
|
transform = tio.SlabProjection( |
|
61
|
|
|
'S', projection_type='percentile', percentile=75) |
|
62
|
|
|
transform(self.sample_subject) |
|
63
|
|
|
|
|
64
|
|
|
def test_very_large_slab_thickness(self): |
|
65
|
|
|
transform = tio.SlabProjection('S', slab_thickness=1e6) |
|
66
|
|
|
transformed = transform(self.sample_subject) |
|
67
|
|
|
axis_index = self.sample_subject.t1.axis_name_to_index('S') |
|
68
|
|
|
self.assertEqual(transformed.t1.shape[axis_index], 1) |
|
69
|
|
|
|