Skip to content
Snippets Groups Projects
Commit 5d3f6ee3 authored by Paul McCarthy's avatar Paul McCarthy :mountain_bicyclist:
Browse files

New extrapolation test for applywarp

parent 85de1166
No related branches found
No related tags found
1 merge request!74New extrapolation test for applywarp
Pipeline #27049 skipped
......@@ -3,26 +3,32 @@
import os
import shlex
import sys
import os.path as op
import subprocess as sp
import numpy as np
import nibabel as nib
from fsl.data.image import Image
from pathlib import Path
from fsl.data.image import Image, addExt
import fsl.transform.affine as affine
from fsl.wrappers import applywarp, LOAD
from pyfeeds import evalImage
def applywarp(src, ref):
cmd = f'applywarp --in={src} --ref={ref} --usesqform --out=out'
sp.run(shlex.split(cmd), check=True)
return Image('out')
SCRIPT_DIR = Path(op.abspath(op.dirname(__file__)))
def make_image(fname, data, sform, sform_code, qform, qform_code):
hdr = nib.Nifti1Header()
hdr.set_sform(sform, sform_code)
hdr.set_qform(qform, qform_code)
img = Image(data, header=hdr)
img.save(fname)
return img
#! fsl/warpfns!8 (commit 65329a37d0830d4453381579408c3bbfa5a3bed6)
#
# Make sure that regions outside of the FOV
# in the input image are extrapolated correctly
def test_applywarp_normal_usage():
src = Path(os.environ['FSLDIR']) / 'data' / 'standard' / 'MNI152_T1_2mm'
ref = SCRIPT_DIR / 'roi_ref'
warp = SCRIPT_DIR / 'roi_warp'
expect = addExt(SCRIPT_DIR / 'roi_out')
applywarp(src, ref, 'roi_got', warp=warp)
assert np.isclose(evalImage(expect, addExt('roi_got')), 0)
# fsl/fugue!6
#
......@@ -37,6 +43,14 @@ def make_image(fname, data, sform, sform_code, qform, qform_code):
# diagonal
def test_applywarp_uses_sqform_correctly():
def make_image(fname, data, sform, sform_code, qform, qform_code):
hdr = nib.Nifti1Header()
hdr.set_sform(sform, sform_code)
hdr.set_qform(qform, qform_code)
img = Image(data, header=hdr)
img.save(fname)
return img
srcdata = np.zeros((20, 20, 20))
refdata = np.zeros((20, 20, 20))
......@@ -52,32 +66,33 @@ def test_applywarp_uses_sqform_correctly():
refaff = affine.scaleOffsetXform(1, [-5, -5, -5])
# aligned via sform
src = make_image('src', srcdata, srcaff, 2, eye, 1)
ref = make_image('ref', refdata, refaff, 2, eye, 1)
result = applywarp('src', 'ref')
assert np.all(np.isclose(result.data, ref.data))
src = make_image('src', srcdata, srcaff, 2, eye, 1)
ref = make_image('ref', refdata, refaff, 2, eye, 1)
applywarp('src', 'ref', 'out', usesqform=True)
assert np.isclose(evalImage(addExt('out'), addExt('ref')), 0)
# aligned via sform again
src = make_image('src', srcdata, srcaff, 2, eye, 0)
ref = make_image('ref', refdata, refaff, 2, eye, 0)
result = applywarp('src', 'ref')
assert np.all(np.isclose(result.data, ref.data))
src = make_image('src', srcdata, srcaff, 2, eye, 0)
ref = make_image('ref', refdata, refaff, 2, eye, 0)
applywarp('src', 'ref', 'out', usesqform=True)
assert np.isclose(evalImage(addExt('out'), addExt('ref')), 0)
# aligned via qform
src = make_image('src', srcdata, eye, 0, srcaff, 2)
ref = make_image('ref', refdata, eye, 0, refaff, 2)
result = applywarp('src', 'ref')
assert np.all(np.isclose(result.data, ref.data))
src = make_image('src', srcdata, eye, 0, srcaff, 2)
ref = make_image('ref', refdata, eye, 0, refaff, 2)
applywarp('src', 'ref', 'out', usesqform=True)
assert np.isclose(evalImage(addExt('out'), addExt('ref')), 0)
# not aligned - should result in a scaling
# matrix being used (an identify matrix here)
src = make_image('src', srcdata, eye, 0, srcaff, 0)
ref = make_image('ref', refdata, eye, 0, refaff, 0)
result = applywarp('src', 'ref')
assert not np.all(np.isclose(result.data, ref.data))
assert np.all(np.isclose(result.data, src.data))
src = make_image('src', srcdata, eye, 0, srcaff, 0)
ref = make_image('ref', refdata, eye, 0, refaff, 0)
applywarp('src', 'ref', 'out', usesqform=True)
assert not np.isclose(evalImage(addExt('out'), addExt('ref')), 0)
assert np.isclose(evalImage(addExt('out'), addExt('src')), 0)
if __name__ == '__main__':
os.chdir(sys.argv[1])
test_applywarp_normal_usage()
test_applywarp_uses_sqform_correctly()
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment