Switch to unified view

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