Skip to content

Commit 54b02d5

Browse files
committed
RF: Simplify affine transform
1 parent c233083 commit 54b02d5

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

nibabel/spatialimages.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -496,22 +496,24 @@ def slice_affine(self, idx):
496496
"""
497497
idx = canonical_slicers(idx, self.shape, check_inds=False)[:3]
498498

499-
origin = np.array([[0], [0], [0], [1]])
500-
scales = np.eye(3, dtype=int)
501-
502-
for i, slicer in enumerate(idx[:3]):
499+
# Transform:
500+
# sx 0 0 tx
501+
# 0 sy 0 ty
502+
# 0 0 sz tz
503+
# 0 0 0 1
504+
transform = np.eye(4, dtype=int)
505+
506+
for i, slicer in enumerate(idx):
503507
if isinstance(slicer, slice):
504-
origin[i] = slicer.start or 0
505-
if slicer.step is not None:
506-
scales[i, i] = slicer.step
508+
if slicer.step == 0:
509+
raise ValueError("slice step cannot be 0")
510+
transform[i, i] = slicer.step if slicer.step is not None else 1
511+
transform[i, 3] = slicer.start or 0
507512
elif isinstance(slicer, int):
508-
origin[i] = slicer
513+
transform[i, 3] = slicer
509514
# If slicer is None, nothing to do
510515

511-
affine = self.affine.copy()
512-
affine[:3, :3] = scales.dot(self.affine[:3, :3])
513-
affine[:, [3]] = self.affine.dot(origin)
514-
return affine
516+
return self.affine.dot(transform)
515517

516518
@property
517519
def slicer(self):

0 commit comments

Comments
 (0)