In [ ]:
# - compatibility with Python 3
from __future__ import print_function  # print('me') instead of print 'me'
from __future__ import division  # 1/2 == 0.5, not 0
In [ ]:
# - show figures inside the notebook
%matplotlib inline
In [ ]:
# - import common modules
import numpy as np  # the Python array package
import matplotlib.pyplot as plt  # the Python plotting package
In [ ]:
# - set gray colormap and nearest neighbor interpolation by default
plt.rcParams['image.cmap'] = 'gray'
plt.rcParams['image.interpolation'] = 'nearest'
In [ ]:
# - import numpy.linalg with a shorter name
import numpy.linalg as npl
In [ ]:
# - make numpy print out values in less verbose form
np.set_printoptions(suppress=True, precision=4)

What transforms did I add?

I took this image

  • ds114_sub009_highres.nii

and I made a new copy, in img, hdr format:

  • ds114_sub009_highres_moved.img

I then modified the affine in ds114_sub009_highres_moved.hdr to add an extra rotation and translation.

What extra translation and rotation did I add?

Hint: remember the rotation formulae:

$$ \begin{alignat}{1} R_x(\theta) &= \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\[3pt] 0 & \sin \theta & \cos \theta \\[3pt] \end{bmatrix} \\[6pt] R_y(\theta) &= \begin{bmatrix} \cos \theta & 0 & \sin \theta \\[3pt] 0 & 1 & 0 \\[3pt] -\sin \theta & 0 & \cos \theta \\ \end{bmatrix} \\[6pt] R_z(\theta) &= \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\[3pt] \sin \theta & \cos \theta & 0\\[3pt] 0 & 0 & 1\\ \end{bmatrix} \end{alignat} $$

You might also want to compare against results from our rotations code:

In [ ]:
# - get our functions to make rotation matrices
# If this gives an error - maybe you didn't set your PYTHONPATH? Let us know!
from rotations import x_rotmat, y_rotmat, z_rotmat

Final hint:

  • inverse sine, cosine are np.arcsin, np.arccos.
In [ ]:
# Get the original image affine
In [ ]:
# Get the new image affine
In [ ]:
# Work out what transform has been added in the new affine
In [ ]:
# What rotation and translation has been applied?