Passed
Push — master ( c291a8...879ee9 )
by Fernando
59s
created

tests.transforms.preprocessing.test_rescale   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 61
dl 0
loc 74
rs 10
c 0
b 0
f 0
wmc 16

10 Methods

Rating   Name   Duplication   Size   Complexity  
A TestRescaleIntensity.test_wrong_percentiles_type() 0 3 2
A TestRescaleIntensity.test_percentiles() 0 11 1
A TestRescaleIntensity.test_min_max() 0 5 1
A TestRescaleIntensity.test_out_min_higher_than_out_max() 0 3 2
A TestRescaleIntensity.test_min_percentile_higher_than_max_percentile() 0 3 2
A TestRescaleIntensity.test_masking_using_label() 0 15 1
A TestRescaleIntensity.test_too_many_values_for_percentiles() 0 3 2
A TestRescaleIntensity.test_too_many_values_for_out_min_max() 0 3 2
A TestRescaleIntensity.test_wrong_out_min_max_type() 0 3 2
A TestRescaleIntensity.test_rescale_to_same_intentisy() 0 7 1
1
import numpy as np
2
from torchio.transforms import RescaleIntensity
3
from ...utils import TorchioTestCase
4
5
6
class TestRescaleIntensity(TorchioTestCase):
7
    """Tests for :py:class:`RescaleIntensity` class."""
8
9
    def test_rescale_to_same_intentisy(self):
10
        min_t1 = float(self.sample.t1.data.min())
11
        max_t1 = float(self.sample.t1.data.max())
12
        transform = RescaleIntensity(out_min_max=(min_t1, max_t1))
13
        transformed = transform(self.sample)
14
        assert np.allclose(
15
            transformed.t1.data, self.sample.t1.data, rtol=0, atol=1e-06)
16
17
    def test_min_max(self):
18
        transform = RescaleIntensity(out_min_max=(0., 1.))
19
        transformed = transform(self.sample)
20
        self.assertEqual(transformed.t1.data.min(), 0.)
21
        self.assertEqual(transformed.t1.data.max(), 1.)
22
23
    def test_percentiles(self):
24
        low_quantile = np.percentile(self.sample.t1.data, 5)
25
        high_quantile = np.percentile(self.sample.t1.data, 95)
26
        low_indices = (self.sample.t1.data < low_quantile).nonzero(
27
            as_tuple=True)
28
        high_indices = (self.sample.t1.data > high_quantile).nonzero(
29
            as_tuple=True)
30
        transform = RescaleIntensity(out_min_max=(0., 1.), percentiles=(5, 95))
31
        transformed = transform(self.sample)
32
        assert (transformed.t1.data[low_indices] == 0.).all()
33
        assert (transformed.t1.data[high_indices] == 1.).all()
34
35
    def test_masking_using_label(self):
36
        transform = RescaleIntensity(
37
            out_min_max=(0., 1.), percentiles=(5, 95), masking_method='label')
38
        transformed = transform(self.sample)
39
        mask = self.sample.label.data > 0
40
        low_quantile = np.percentile(self.sample.t1.data[mask], 5)
41
        high_quantile = np.percentile(self.sample.t1.data[mask], 95)
42
        low_indices = (self.sample.t1.data < low_quantile).nonzero(
43
            as_tuple=True)
44
        high_indices = (self.sample.t1.data > high_quantile).nonzero(
45
            as_tuple=True)
46
        self.assertEqual(transformed.t1.data.min(), 0.)
47
        self.assertEqual(transformed.t1.data.max(), 1.)
48
        assert (transformed.t1.data[low_indices] == 0.).all()
49
        assert (transformed.t1.data[high_indices] == 1.).all()
50
51
    def test_out_min_higher_than_out_max(self):
52
        with self.assertRaises(ValueError):
53
            RescaleIntensity(out_min_max=(1., 0.))
54
55
    def test_too_many_values_for_out_min_max(self):
56
        with self.assertRaises(ValueError):
57
            RescaleIntensity(out_min_max=(1., 2., 3.))
58
59
    def test_wrong_out_min_max_type(self):
60
        with self.assertRaises(ValueError):
61
            RescaleIntensity(out_min_max='wrong')
62
63
    def test_min_percentile_higher_than_max_percentile(self):
64
        with self.assertRaises(ValueError):
65
            RescaleIntensity(out_min_max=(0., 1.), percentiles=(1., 0.))
66
67
    def test_too_many_values_for_percentiles(self):
68
        with self.assertRaises(ValueError):
69
            RescaleIntensity(out_min_max=(0., 1.), percentiles=(1., 2., 3.))
70
71
    def test_wrong_percentiles_type(self):
72
        with self.assertRaises(ValueError):
73
            RescaleIntensity(out_min_max=(0., 1.), percentiles='wrong')
74