@@ -30,7 +30,9 @@ def __init__(self, parameters=None, offset=None):
30
30
"""Initialize with default offset and index."""
31
31
super ().__init__ ()
32
32
self .structarr ['index' ] = 0
33
- self .structarr ['offset' ] = offset or [0 , 0 , 0 ]
33
+ if offset is None :
34
+ offset = np .zeros ((3 ,), dtype = 'float' )
35
+ self .structarr ['offset' ] = offset
34
36
self .structarr ['parameters' ] = np .eye (4 )
35
37
if parameters is not None :
36
38
self .structarr ['parameters' ] = parameters
@@ -307,24 +309,25 @@ def from_h5obj(cls, fileobj, check=True):
307
309
except KeyError :
308
310
typo_fallback = "Tranform"
309
311
310
- for xfm in reversed (h5group .keys ())[:- 1 ]:
311
- if h5group [xfm ]["TransformType" ][0 ].startswith (b"AffineTransform" ):
312
+ for xfm in reversed (list (h5group .values ())[1 :]):
313
+ if xfm ["TransformType" ][0 ].startswith (b"AffineTransform" ):
314
+ _params = np .asanyarray (xfm [f"{ typo_fallback } Parameters" ])
312
315
xfm_list .append (
313
316
ITKLinearTransform (
314
- parameters = np . asanyarray ( h5group [ xfm ][ f" { typo_fallback } Parameters" ]),
315
- offset = np .asanyarray (h5group [ xfm ] [f"{ typo_fallback } FixedParameters" ])
317
+ parameters = from_matvec ( _params [: - 3 ]. reshape ( 3 , 3 ), _params [ - 3 : ]),
318
+ offset = np .asanyarray (xfm [f"{ typo_fallback } FixedParameters" ])
316
319
)
317
320
)
318
321
continue
319
- if h5group [ xfm ] ["TransformType" ][0 ].startswith (b"DisplacementFieldTransform" ):
320
- _fixed = np .asanyarray (h5group [ xfm ] [f"{ typo_fallback } FixedParameters" ])
322
+ if xfm ["TransformType" ][0 ].startswith (b"DisplacementFieldTransform" ):
323
+ _fixed = np .asanyarray (xfm [f"{ typo_fallback } FixedParameters" ])
321
324
shape = _fixed [:3 ].astype ('uint16' ).tolist ()
322
325
offset = _fixed [3 :6 ].astype ('uint16' )
323
326
zooms = _fixed [6 :9 ].astype ('float' )
324
327
directions = _fixed [9 :].astype ('float' ).reshape ((3 , 3 ))
325
328
affine = from_matvec (directions * zooms , offset )
326
- field = np .asanyarray (h5group [ xfm ] [f"{ typo_fallback } Parameters" ]).reshape (
327
- tuple (shape + [- 1 ])
329
+ field = np .asanyarray (xfm [f"{ typo_fallback } Parameters" ]).reshape (
330
+ tuple (shape + [1 , - 1 ])
328
331
)
329
332
hdr = Nifti1Header ()
330
333
hdr .set_intent ("vector" )
@@ -338,7 +341,7 @@ def from_h5obj(cls, fileobj, check=True):
338
341
continue
339
342
340
343
raise NotImplementedError (
341
- f"Unsupported transform type { h5group [ xfm ] ['TransformType' ][0 ]} "
344
+ f"Unsupported transform type { xfm ['TransformType' ][0 ]} "
342
345
)
343
346
344
347
return xfm_list
0 commit comments