Skip to content

Commit 0a64221

Browse files
committed
average with only masked voxels; tests for ErrorMap
1 parent eebe773 commit 0a64221

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

nipype/algorithms/metrics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ def _run_interface(self, runtime):
553553
errvectorexp[msk_idxs] = errvector
554554

555555
# Get averaged error
556-
self._distance = np.average(errvectorexp)
556+
self._distance = np.average(errvector)
557557

558558
errmap = errvectorexp.reshape(mapshape)
559559

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
from nipype.testing import (assert_equal, example_data)
5+
from nipype.algorithms.metrics import ErrorMap
6+
import nibabel as nib
7+
import numpy as np
8+
from tempfile import mkdtemp
9+
import os
10+
11+
def test_errormap():
12+
13+
tempdir = mkdtemp()
14+
# Single-Spectual
15+
# Make two fake 2*2*2 voxel volumes
16+
volume1 = np.array([[[2.0, 8.0], [1.0, 2.0]], [[1.0, 9.0], [0.0, 3.0]]]) # John von Neumann's birthday
17+
volume2 = np.array([[[0.0, 7.0], [2.0, 3.0]], [[1.0, 9.0], [1.0, 2.0]]]) # Alan Turing's birthday
18+
mask = np.array([[[1, 0], [0, 1]], [[1, 0], [0, 1]]])
19+
20+
img1 = nib.Nifti1Image(volume1, np.eye(4))
21+
img2 = nib.Nifti1Image(volume2, np.eye(4))
22+
maskimg = nib.Nifti1Image(mask, np.eye(4))
23+
24+
nib.save(img1, os.path.join(tempdir, 'von.nii.gz'))
25+
nib.save(img2, os.path.join(tempdir, 'alan.nii.gz'))
26+
nib.save(maskimg, os.path.join(tempdir, 'mask.nii.gz'))
27+
28+
29+
# Default metric
30+
errmap = ErrorMap()
31+
errmap.inputs.in_tst = os.path.join(tempdir, 'von.nii.gz')
32+
errmap.inputs.in_ref = os.path.join(tempdir, 'alan.nii.gz')
33+
result = errmap.run()
34+
yield assert_equal, result.outputs.distance, 1.125
35+
36+
# Square metric
37+
errmap.inputs.metric = 'sqeuclidean'
38+
result = errmap.run()
39+
yield assert_equal, result.outputs.distance, 1.125
40+
41+
# Linear metric
42+
errmap.inputs.metric = 'euclidean'
43+
result = errmap.run()
44+
yield assert_equal, result.outputs.distance, 0.875
45+
46+
# Masked
47+
errmap.inputs.mask = os.path.join(tempdir, 'mask.nii.gz')
48+
result = errmap.run()
49+
yield assert_equal, result.outputs.distance, 1.0
50+
51+
## Multi-Spectual
52+
volume3 = np.array([[[1.0, 6.0], [0.0, 3.0]], [[1.0, 9.0], [3.0, 6.0]]]) # Raymond Vahan Damadian's birthday
53+
54+
msvolume1 = np.zeros(shape=(2,2,2,2))
55+
msvolume1[:,:,:,0] = volume1
56+
msvolume1[:,:,:,1] = volume3
57+
msimg1 = nib.Nifti1Image(msvolume1, np.eye(4))
58+
59+
msvolume2 = np.zeros(shape=(2,2,2,2))
60+
msvolume2[:,:,:,0] = volume2
61+
msvolume2[:,:,:,1] = volume3
62+
msimg2 = nib.Nifti1Image(msvolume2, np.eye(4))
63+
64+
nib.save(img1, os.path.join(tempdir, 'von-ray.nii.gz'))
65+
nib.save(img2, os.path.join(tempdir, 'alan-ray.nii.gz'))
66+
67+
errmap.inputs.in_tst = os.path.join(tempdir, 'von-ray.nii.gz')
68+
errmap.inputs.in_ref = os.path.join(tempdir, 'alan-ray.nii.gz')
69+
errmap.inputs.metric = 'sqeuclidean'
70+
result = errmap.run()
71+
yield assert_equal, result.outputs.distance, 7.0
72+
73+
errmap.inputs.metric = 'euclidean'
74+
result = errmap.run()
75+
yield assert_equal, result.outputs.distance, 2**0.5 + 6

0 commit comments

Comments
 (0)