Skip to content

Commit c4d86eb

Browse files
authored
Merge pull request #102 from poldracklab/fix/reading-ANTS-mat-files
FIX: Accept double precision when reading ANTs' ``.mat`` affines
2 parents e728b57 + 9583dd6 commit c4d86eb

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

nitransforms/io/itk.py

+14-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ITKLinearTransform(LinearParameters):
2222
[
2323
("type", "i4"),
2424
("index", "i4"),
25-
("parameters", "f4", (4, 4)),
25+
("parameters", "f8", (4, 4)),
2626
("offset", "f4", 3), # Center of rotation
2727
]
2828
)
@@ -67,11 +67,11 @@ def to_filename(self, filename):
6767
np.hstack(
6868
(sa["parameters"][:3, :3].reshape(-1), sa["parameters"][:3, 3])
6969
)[..., np.newaxis],
70-
dtype="f4",
70+
dtype="f8",
7171
)
7272
fixed = np.array(sa["offset"][..., np.newaxis], dtype="f4")
7373
mdict = {
74-
"AffineTransform_float_3_3": affine,
74+
"AffineTransform_double_3_3": affine,
7575
"fixed": fixed,
7676
}
7777
_save_mat(str(filename), mdict, format="4")
@@ -129,10 +129,18 @@ def from_matlab_dict(cls, mdict, index=0):
129129
tf = cls()
130130
sa = tf.structarr
131131

132+
affine = mdict.get(
133+
"AffineTransform_double_3_3",
134+
mdict.get("AffineTransform_float_3_3")
135+
)
136+
137+
if affine is None:
138+
raise NotImplementedError("Unsupported transform type")
139+
132140
sa["index"] = index
133-
parameters = np.eye(4, dtype="f4")
134-
parameters[:3, :3] = mdict["AffineTransform_float_3_3"][:-3].reshape((3, 3))
135-
parameters[:3, 3] = mdict["AffineTransform_float_3_3"][-3:].flatten()
141+
parameters = np.eye(4, dtype=affine.dtype)
142+
parameters[:3, :3] = affine[:-3].reshape((3, 3))
143+
parameters[:3, 3] = affine[-3:].flatten()
136144
sa["parameters"] = parameters
137145
sa["offset"] = mdict["fixed"].flatten()
138146
return tf

0 commit comments

Comments
 (0)