Skip to content

Commit eebe773

Browse files
committed
fix masking; replace hstack with diffvector; remove square root of sqeuclidean average
`errvectorexp = np.zeros_like(mskvector)` used to generate a uint8 vector by default which loses the precision when calculating the special volumes with float voxels of small values like the jacobian determinant volume
1 parent 157a21f commit eebe773

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

nipype/algorithms/metrics.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -541,22 +541,19 @@ def _run_interface(self, runtime):
541541
if self.inputs.metric == 'sqeuclidean':
542542
errvector = diffvector**2
543543
elif self.inputs.metric == 'euclidean':
544-
X = np.hstack((refvector, tstvector))
545-
errvector = np.linalg.norm(X, axis=1)
544+
#X = np.hstack((refvector, tstvector))
545+
errvector = np.linalg.norm(diffvector, axis=1)
546546

547547
if (comps > 1):
548548
errvector = np.sum(errvector, axis=1)
549549
else:
550550
errvector = np.squeeze(errvector)
551551

552-
errvectorexp = np.zeros_like(mskvector)
552+
errvectorexp = np.zeros_like(mskvector, dtype=np.float32) # The default type is uint8
553553
errvectorexp[msk_idxs] = errvector
554554

555555
# Get averaged error
556-
if self.inputs.metric == 'sqeuclidean':
557-
self._distance = np.sqrt(np.sum(errvectorexp))
558-
elif self.inputs.metric == 'euclidean':
559-
self._distance = np.average(errvectorexp)
556+
self._distance = np.average(errvectorexp)
560557

561558
errmap = errvectorexp.reshape(mapshape)
562559

0 commit comments

Comments
 (0)