[5d12a0]: / ants / registration / average_transform.py

Download this file

49 lines (35 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from tempfile import mktemp
import os
import ants
from ants.internal import get_lib_fn, process_arguments
__all__ = ['average_affine_transform',
'average_affine_transform_no_rigid']
def _average_affine_transform_driver(transformlist, referencetransform=None, funcname="AverageAffineTransform"):
"""
takes a list of transforms (files at the moment)
and returns the average
"""
# AverageAffineTransform deals with transform files,
# so this function will need to deal with already
# loaded files. Doesn't look like the magic
# available for images has been added for transforms.
res_temp_file = mktemp(suffix='.mat')
# could do some stuff here to cope with transform lists that
# aren't files
# load one of the transforms to figure out the dimension
tf = ants.read_transform(transformlist[0])
if referencetransform is None:
args = [tf.dimension, res_temp_file] + transformlist
else:
args = [tf.dimension, res_temp_file] + ['-R', referencetransform] + transformlist
pargs = process_arguments(args)
print(pargs)
libfun = get_lib_fn(funcname)
status = libfun(pargs)
res = ants.read_transform(res_temp_file)
os.remove(res_temp_file)
return res
def average_affine_transform(transformlist, referencetransform=None):
return _average_affine_transform_driver(transformlist, referencetransform, "AverageAffineTransform")
def average_affine_transform_no_rigid(transformlist, referencetransform=None):
return _average_affine_transform_driver(transformlist, referencetransform, "AverageAffineTransformNoRigid")