From e46fafbca6195977bb5123b2afb7c04d37ea538b Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Fri, 17 Jul 2020 13:18:45 +0100
Subject: [PATCH] TEST: Adjust nonlinear xform tests to work around weird
 differences in nearest-neighbour interpolation (i think when nn interp is
 applied at a pixel boundary)

---
 tests/test_scripts/test_fsl_apply_x5.py | 41 ++++++++++++-------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/tests/test_scripts/test_fsl_apply_x5.py b/tests/test_scripts/test_fsl_apply_x5.py
index 49b990806..b3b66691d 100644
--- a/tests/test_scripts/test_fsl_apply_x5.py
+++ b/tests/test_scripts/test_fsl_apply_x5.py
@@ -81,7 +81,7 @@ def test_nonlinear(seed):
         fsl_apply_x5.main('src xform.x5 out'.split())
 
         result = fslimage.Image('out')
-        expect = resample.resampleToReference(src, ref, matrix=src2ref)[0]
+        expect = resample.resampleToReference(src, ref, matrix=src2ref, smooth=False)[0]
 
         assert result.sameSpace(ref)
 
@@ -89,7 +89,8 @@ def test_nonlinear(seed):
         result = result.data[1:-1, 1:-1, 1:-1]
         expect = expect[     1:-1, 1:-1, 1:-1]
 
-        assert np.all(np.isclose(result, expect))
+        tol = dict(atol=1e-3, rtol=1e-3)
+        assert np.all(np.isclose(result, expect, **tol))
 
 
 def test_linear_altref(seed):
@@ -213,9 +214,13 @@ def test_nonlinear_altsrc(seed):
         src.save('src')
         ref.save('ref')
 
-        srclo, xf = resample.resample(src, (10, 10, 10), origin='corner')
+        # use origin=corner so that the
+        # resampled variants are exactly
+        # aligned in the world coordinate
+        # system
+        srclo, xf = resample.resample(src, (10, 10, 10), origin='corner', smooth=False)
         srclo = fslimage.Image(srclo, xform=xf)
-        srchi, xf = resample.resample(src, (40, 40, 40), origin='corner')
+        srchi, xf = resample.resample(src, (40, 40, 40), origin='corner', smooth=False)
         srchi = fslimage.Image(srchi, xform=xf)
 
         srcoff = roi.roi(src, [(-10, 10), (-10, 10), (-10, 10)])
@@ -224,28 +229,20 @@ def test_nonlinear_altsrc(seed):
         srchi .save('srchi')
         srcoff.save('srcoff')
 
-        # The up-sampled source image is subject to
-        # an unavoidable interpolation, as the
-        # deformation field coordinates are affine-
-        # transformed to the space of the alternate
-        # source image. So in this test case we use
-        # nearest-neighbour interp, so that we can
-        # get the same output as a standard linear
-        # resample
-        fsl_apply_x5.main('src    xform.x5 out'             .split())
-        fsl_apply_x5.main('srclo  xform.x5 outlo'           .split())
-        fsl_apply_x5.main('srchi  xform.x5 outhi -i nearest'.split())
-        fsl_apply_x5.main('srcoff xform.x5 outoff'          .split())
+        fsl_apply_x5.main('src    xform.x5 out'   .split())
+        fsl_apply_x5.main('srclo  xform.x5 outlo' .split())
+        fsl_apply_x5.main('srchi  xform.x5 outhi' .split())
+        fsl_apply_x5.main('srcoff xform.x5 outoff'.split())
 
         out    = fslimage.Image('out')
         outlo  = fslimage.Image('outlo')
         outhi  = fslimage.Image('outhi')
         outoff = fslimage.Image('outoff')
 
-        exp,    x1 = resample.resampleToReference(src,    ref, matrix=src2ref, mode='constant')
-        explo,  x2 = resample.resampleToReference(srclo,  ref, matrix=src2ref, mode='constant')
-        exphi,  x3 = resample.resampleToReference(srchi,  ref, matrix=src2ref, mode='constant', order=0)
-        expoff, x4 = resample.resampleToReference(srcoff, ref, matrix=src2ref, mode='constant')
+        exp,    x1 = resample.resampleToReference(src,    ref, matrix=src2ref, mode='constant', smooth=False)
+        explo,  x2 = resample.resampleToReference(srclo,  ref, matrix=src2ref, mode='constant', smooth=False)
+        exphi,  x3 = resample.resampleToReference(srchi,  ref, matrix=src2ref, mode='constant', smooth=False)
+        expoff, x4 = resample.resampleToReference(srcoff, ref, matrix=src2ref, mode='constant', smooth=False)
 
         assert out   .sameSpace(ref)
         assert outlo .sameSpace(ref)
@@ -257,11 +254,11 @@ def test_nonlinear_altsrc(seed):
         out    = out   .data[1:-1, 1:-1, 1:-1]
         outlo  = outlo .data[1:-1, 1:-1, 1:-1]
         outhi  = outhi .data[1:-1, 1:-1, 1:-1]
-        outoff = outoff.data[1:-1, 1:-1, 1:-1]
+        outoff = outoff.data[ :9,   :9,   :9]
         exp    = exp[        1:-1, 1:-1, 1:-1]
         explo  = explo[      1:-1, 1:-1, 1:-1]
         exphi  = exphi[      1:-1, 1:-1, 1:-1]
-        expoff = expoff[     1:-1, 1:-1, 1:-1]
+        expoff = expoff[      :9,   :9,   :9]
 
         tol = dict(atol=1e-3, rtol=1e-3)
 
-- 
GitLab