diff --git a/tests/test_transform/test_nonlinear.py b/tests/test_transform/test_nonlinear.py index 59a6d7d634d73c354bfcc08c2f7a09481640c5e6..9b51c0d4d610860f1e98e179372945443c0c7567 100644 --- a/tests/test_transform/test_nonlinear.py +++ b/tests/test_transform/test_nonlinear.py @@ -197,6 +197,34 @@ def test_DisplacementField_transform(): assert np.all(np.isnan(got[0, :])) assert np.all(np.isclose(got[1, :], scoords[1, :])) + +def test_CoefficientField_displacements(): + + nldir = op.join(datadir, 'nonlinear') + src = op.join(nldir, 'src.nii.gz') + ref = op.join(nldir, 'ref.nii.gz') + cf = op.join(nldir, 'coefficientfield.nii.gz') + df = op.join(nldir, 'displacementfield_no_premat.nii.gz') + + src = fslimage.Image(src) + ref = fslimage.Image(ref) + cf = fnirt.readFnirt(cf, src, ref) + df = fnirt.readFnirt(df, src, ref) + + ix, iy, iz = ref.shape[:3] + x, y, z = np.meshgrid(np.arange(ix), + np.arange(iy), + np.arange(iz), indexing='ij') + x = x.flatten() + y = y.flatten() + z = z.flatten() + xyz = np.vstack((x, y, z)).T + + disps = cf.displacements(xyz) + disps = disps.reshape(df.shape) + + tol = dict(atol=1e-5, rtol=1e-5) + assert np.all(np.isclose(disps, df.data, **tol)) def test_coefficientFieldToDisplacementField(): nldir = op.join(datadir, 'nonlinear') @@ -204,17 +232,27 @@ def test_coefficientFieldToDisplacementField(): ref = op.join(nldir, 'ref.nii.gz') cf = op.join(nldir, 'coefficientfield.nii.gz') df = op.join(nldir, 'displacementfield.nii.gz') + dfnp = op.join(nldir, 'displacementfield_no_premat.nii.gz') src = fslimage.Image(src) ref = fslimage.Image(ref) - cf = fnirt.readFnirt(cf, src, ref) - rdf = fnirt.readFnirt(df, src, ref) + cf = fnirt.readFnirt(cf, src, ref) + rdf = fnirt.readFnirt(df, src, ref) + rdfnp = fnirt.readFnirt(dfnp, src, ref) adf = nonlinear.convertDisplacementType(rdf) + adfnp = nonlinear.convertDisplacementType(rdfnp) - tol = dict(atol=1e-5, rtol=1e-5) - - rcnv = nonlinear.coefficientFieldToDisplacementField(cf) - acnv = nonlinear.coefficientFieldToDisplacementField(cf, dispType='absolute') + rcnv = nonlinear.coefficientFieldToDisplacementField(cf) + acnv = nonlinear.coefficientFieldToDisplacementField(cf, + dispType='absolute') + acnvnp = nonlinear.coefficientFieldToDisplacementField(cf, + dispType='absolute', + premat=False) + rcnvnp = nonlinear.coefficientFieldToDisplacementField(cf, + premat=False) - assert np.all(np.isclose(rcnv.data, rdf.data, **tol)) - assert np.all(np.isclose(acnv.data, adf.data, **tol)) + tol = dict(atol=1e-5, rtol=1e-5) + assert np.all(np.isclose(rcnv.data, rdf .data, **tol)) + assert np.all(np.isclose(acnv.data, adf .data, **tol)) + assert np.all(np.isclose(rcnvnp.data, rdfnp.data, **tol)) + assert np.all(np.isclose(acnvnp.data, adfnp.data, **tol)) diff --git a/tests/test_transform/testdata/nonlinear/coefficientfield.nii.gz b/tests/test_transform/testdata/nonlinear/coefficientfield.nii.gz new file mode 100644 index 0000000000000000000000000000000000000000..8d4b58668d2f100819ccf6263a1e2c77286b1bd0 Binary files /dev/null and b/tests/test_transform/testdata/nonlinear/coefficientfield.nii.gz differ diff --git a/tests/test_transform/testdata/nonlinear/displacementfield.nii.gz b/tests/test_transform/testdata/nonlinear/displacementfield.nii.gz new file mode 100644 index 0000000000000000000000000000000000000000..f1e28a1bd1c072de4720add4401699b8dcb3a62e Binary files /dev/null and b/tests/test_transform/testdata/nonlinear/displacementfield.nii.gz differ diff --git a/tests/test_transform/testdata/nonlinear/displacementfield_no_premat.nii.gz b/tests/test_transform/testdata/nonlinear/displacementfield_no_premat.nii.gz new file mode 100644 index 0000000000000000000000000000000000000000..26578f9dba2911634789e2d8d2ebac8ad8d5224f Binary files /dev/null and b/tests/test_transform/testdata/nonlinear/displacementfield_no_premat.nii.gz differ diff --git a/tests/test_transform/testdata/nonlinear/ref.nii.gz b/tests/test_transform/testdata/nonlinear/ref.nii.gz new file mode 100644 index 0000000000000000000000000000000000000000..ee4f0a98a8cd4cc12a5d1039b36a73419fdcffdc Binary files /dev/null and b/tests/test_transform/testdata/nonlinear/ref.nii.gz differ diff --git a/tests/test_transform/testdata/nonlinear/src.nii.gz b/tests/test_transform/testdata/nonlinear/src.nii.gz new file mode 100644 index 0000000000000000000000000000000000000000..01b6290f590a8d5110e71978e4dbbfe90fc475ed Binary files /dev/null and b/tests/test_transform/testdata/nonlinear/src.nii.gz differ diff --git a/tests/test_transform/testdata/nonlinear/src2ref.mat b/tests/test_transform/testdata/nonlinear/src2ref.mat new file mode 100644 index 0000000000000000000000000000000000000000..521dd0b7411a1fe958d9d4feb910be9442647f68 --- /dev/null +++ b/tests/test_transform/testdata/nonlinear/src2ref.mat @@ -0,0 +1,4 @@ +1.130654884 -0.02090760163 0.05273442572 -0.523881946 +0.01777234539 0.9990179929 0.2039857328 5.806280637 +-0.003319001082 -0.2740303429 1.071017063 0.4915523243 +0 0 0 1