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