From dc5eadb2bccb3a1ea6f29ae7cf202770d9229474 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Mon, 21 Sep 2020 18:15:45 +0100 Subject: [PATCH] BF: Adjust fieldToRefMat in case the provided reference image has different dimensions than the original reference image --- fsl/transform/fnirt.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/fsl/transform/fnirt.py b/fsl/transform/fnirt.py index 4fa4051c8..6357fb9ec 100644 --- a/fsl/transform/fnirt.py +++ b/fsl/transform/fnirt.py @@ -225,6 +225,27 @@ def _readFnirtCoefficientField(fname, img, src, ref): # image voxel coordinates. fieldToRefMat = affine.scaleOffsetXform(knotSpacing, 0) + # But if the provided reference has + # different resolution to the + # reference that was originally + # used to generate the warp field, + # we need to adjust the field + # accordingly. We assume that the + # references are aligned in the FSL + # coordinate system, so simply apply + # a scaling factor calculated by + # dividing the original reference + # pixdims by the provided reference + # pixdims. + refPixdims = np.array([img.header['intent_p1'], + img.header['intent_p2'], + img.header['intent_p3']]) + + if not np.all(np.isclose(ref.pixdim[:3], refPixdims)): + fieldToRefMat = affine.concat( + affine.scaleOffsetXform(refPixdims / ref.pixdim[:3], 0), + fieldToRefMat) + return nonlinear.CoefficientField(fname, src, ref, -- GitLab