Skip to content

Commit ff34501

Browse files
committed
move comps check to only sqeuclidean
1 parent 0a64221 commit ff34501

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

nipype/algorithms/metrics.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -530,30 +530,29 @@ def _run_interface(self, runtime):
530530
else:
531531
msk = np.ones(shape=mapshape)
532532

533-
# Vectorise both volumes and make the pixel differennce
533+
# Flatten both volumes and make the pixel differennce
534534
mskvector = msk.reshape(-1)
535535
msk_idxs = np.where(mskvector==1)
536536
refvector = ref_data.reshape(-1,comps)[msk_idxs].astype(np.float32)
537537
tstvector = tst_data.reshape(-1,comps)[msk_idxs].astype(np.float32)
538538
diffvector = (refvector-tstvector)
539539

540-
# scale the diffrernce
540+
# Scale the diffrernce
541541
if self.inputs.metric == 'sqeuclidean':
542542
errvector = diffvector**2
543+
if (comps > 1):
544+
errvector = np.sum(errvector, axis=1)
545+
else:
546+
errvector = np.squeeze(errvector)
543547
elif self.inputs.metric == 'euclidean':
544548
#X = np.hstack((refvector, tstvector))
545549
errvector = np.linalg.norm(diffvector, axis=1)
546550

547-
if (comps > 1):
548-
errvector = np.sum(errvector, axis=1)
549-
else:
550-
errvector = np.squeeze(errvector)
551-
552551
errvectorexp = np.zeros_like(mskvector, dtype=np.float32) # The default type is uint8
553552
errvectorexp[msk_idxs] = errvector
554553

555554
# Get averaged error
556-
self._distance = np.average(errvector)
555+
self._distance = np.average(errvector) # Only average the masked voxels
557556

558557
errmap = errvectorexp.reshape(mapshape)
559558

nipype/algorithms/tests/test_errormap.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def test_errormap():
3030
errmap = ErrorMap()
3131
errmap.inputs.in_tst = os.path.join(tempdir, 'von.nii.gz')
3232
errmap.inputs.in_ref = os.path.join(tempdir, 'alan.nii.gz')
33+
errmap.out_map = os.path.join(tempdir, 'out_map.nii.gz')
3334
result = errmap.run()
3435
yield assert_equal, result.outputs.distance, 1.125
3536

@@ -57,19 +58,19 @@ def test_errormap():
5758
msimg1 = nib.Nifti1Image(msvolume1, np.eye(4))
5859

5960
msvolume2 = np.zeros(shape=(2,2,2,2))
60-
msvolume2[:,:,:,0] = volume2
61-
msvolume2[:,:,:,1] = volume3
61+
msvolume2[:,:,:,0] = volume3
62+
msvolume2[:,:,:,1] = volume1
6263
msimg2 = nib.Nifti1Image(msvolume2, np.eye(4))
6364

64-
nib.save(img1, os.path.join(tempdir, 'von-ray.nii.gz'))
65-
nib.save(img2, os.path.join(tempdir, 'alan-ray.nii.gz'))
65+
nib.save(msimg1, os.path.join(tempdir, 'von-ray.nii.gz'))
66+
nib.save(msimg2, os.path.join(tempdir, 'alan-ray.nii.gz'))
6667

6768
errmap.inputs.in_tst = os.path.join(tempdir, 'von-ray.nii.gz')
6869
errmap.inputs.in_ref = os.path.join(tempdir, 'alan-ray.nii.gz')
6970
errmap.inputs.metric = 'sqeuclidean'
7071
result = errmap.run()
71-
yield assert_equal, result.outputs.distance, 7.0
72+
yield assert_equal, result.outputs.distance, 5.5
7273

7374
errmap.inputs.metric = 'euclidean'
7475
result = errmap.run()
75-
yield assert_equal, result.outputs.distance, 2**0.5 + 6
76+
yield assert_equal, result.outputs.distance, np.float32(1.25 * (2**0.5))

0 commit comments

Comments
 (0)