@@ -506,12 +506,13 @@ class ErrorMap(BaseInterface):
506
506
_out_file = ''
507
507
508
508
def _run_interface (self , runtime ):
509
- from scipy . spatial . distance import cdist , pdist
509
+ # Get two numpy data matrices
510
510
nii_ref = nb .load (self .inputs .in_ref )
511
511
ref_data = np .squeeze (nii_ref .get_data ())
512
512
tst_data = np .squeeze (nb .load (self .inputs .in_tst ).get_data ())
513
513
assert (ref_data .ndim == tst_data .ndim )
514
514
515
+ # Load mask
515
516
comps = 1
516
517
mapshape = ref_data .shape
517
518
@@ -528,12 +529,14 @@ def _run_interface(self, runtime):
528
529
else :
529
530
msk = np .ones (shape = mapshape )
530
531
532
+ # Vectorise both volumes and make the pixel differennce
531
533
mskvector = msk .reshape (- 1 )
532
534
msk_idxs = np .where (mskvector == 1 )
533
535
refvector = ref_data .reshape (- 1 ,comps )[msk_idxs ].astype (np .float32 )
534
536
tstvector = tst_data .reshape (- 1 ,comps )[msk_idxs ].astype (np .float32 )
535
537
diffvector = (refvector - tstvector )
536
538
539
+ # scale the diffrernce
537
540
if self .inputs .metric == 'sqeuclidean' :
538
541
errvector = diffvector ** 2
539
542
elif self .inputs .metric == 'euclidean' :
@@ -548,6 +551,12 @@ def _run_interface(self, runtime):
548
551
errvectorexp = np .zeros_like (mskvector )
549
552
errvectorexp [msk_idxs ] = errvector
550
553
554
+ # Get averaged error
555
+ if self .inputs .metric == 'sqeuclidean' :
556
+ self ._distance = np .sqrt (np .sum (errvectorexp ))
557
+ elif self .inputs .metric == 'euclidean' :
558
+ self ._distance = np .average (errvectorexp )
559
+
551
560
errmap = errvectorexp .reshape (mapshape )
552
561
553
562
hdr = nii_ref .get_header ().copy ()
@@ -567,11 +576,12 @@ def _run_interface(self, runtime):
567
576
nb .Nifti1Image (errmap .astype (np .float32 ), nii_ref .get_affine (),
568
577
hdr ).to_filename (self ._out_file )
569
578
570
- return runtime
579
+ return runtime
571
580
572
581
def _list_outputs (self ):
573
582
outputs = self .output_spec ().get ()
574
583
outputs ['out_map' ] = self ._out_file
584
+ outputs ['distance' ] = self ._distance
575
585
return outputs
576
586
577
587
0 commit comments