|
17 | 17 | from nibabel.affines import from_matvec, voxel_sizes, obliquity
|
18 | 18 | from .base import TransformBase
|
19 | 19 | from .patched import shape_zoom_affine
|
20 |
| -from .io import LinearTransformArray, VolumeGeometry |
| 20 | +from .io import LinearTransformArray, LinearTransform, VolumeGeometry |
21 | 21 |
|
22 | 22 |
|
23 | 23 | LPS = np.diag([-1, -1, 1, 1])
|
@@ -300,12 +300,20 @@ def to_filename(self, filename, fmt='X5', moving=None):
|
300 | 300 | np.savetxt(filename, mat[0], delimiter=' ', fmt='%g')
|
301 | 301 | return filename
|
302 | 302 | elif fmt.lower() in ('fs', 'lta'):
|
303 |
| - # linear tranform info |
304 |
| - src = VolumeGeometry.from_image(moving) |
305 |
| - dst = VolumeGeometry.from_image(self.reference) |
306 |
| - |
307 |
| - |
| 303 | + # xform info |
| 304 | + lt = LinearTransform() |
| 305 | + lt['sigma'] = 1. |
| 306 | + lt['m_L'] = self.matrix |
| 307 | + lt['src'] = VolumeGeometry.from_image(moving) |
| 308 | + lt['dst'] = VolumeGeometry.from_image(self.reference) |
| 309 | + # to make LTA file format |
| 310 | + lta = LinearTransformArray() |
| 311 | + lta['type'] = 1 # RAS2RAS |
| 312 | + lta['xforms'] = [lt] |
308 | 313 |
|
| 314 | + with open(filename, 'w') as f: |
| 315 | + f.write(lta.to_string()) |
| 316 | + return filename |
309 | 317 |
|
310 | 318 | return super(Affine, self).to_filename(filename, fmt=fmt)
|
311 | 319 |
|
@@ -338,8 +346,7 @@ def load(filename, fmt='X5', reference=None):
|
338 | 346 | elif fmt.lower() in ('fs', 'lta'):
|
339 | 347 | with open(filename) as ltafile:
|
340 | 348 | lta = LinearTransformArray.from_fileobj(ltafile)
|
341 |
| - # TODO: multiple transforms? |
342 |
| - assert lta['nxforms'] == 1 |
| 349 | + assert lta['nxforms'] == 1 # ever have multiple transforms? |
343 | 350 | matrix = lta._xforms[0]['m_L']
|
344 | 351 | elif fmt.lower() in ('x5', 'bids'):
|
345 | 352 | raise NotImplementedError
|
|
0 commit comments