# - 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
# - show figures inside the notebook
%matplotlib inline
# - import common modules
import numpy as np # the Python array package
import matplotlib.pyplot as plt # the Python plotting package
# - set gray colormap and nearest neighbor interpolation by default
plt.rcParams['image.cmap'] = 'gray'
plt.rcParams['image.interpolation'] = 'nearest'
import nibabel as nib
img = nib.load('ds114_sub009_t2r1.nii')
data = img.get_data()
from scipy.optimize import fmin_powell
from scipy.ndimage import affine_transform
fixed_data = data[..., 1:]
run_mean = fixed_data.mean(axis=-1)
run_mean.shape
plt.imshow(run_mean[..., 17])
def cost_function(trans_rots):
trans = trans_rots[:3]
M = nib.eulerangles.euler2mat(*trans_rots[3:])
out_vol = affine_transform(run_mean, M, trans, order=1)
return mismatch(out_vol, single_vol)
def mismatch(X, Y):
return -np.corrcoef(X.ravel(), Y.ravel())[0, 1]
def my_callback(params):
print("Trying parameters " + str(params))
single_vol = fixed_data[..., 0]
best_params = fmin_powell(cost_function, np.zeros(6), callback=my_callback)
best_params
single_vol = fixed_data[..., -1]
best_params = fmin_powell(cost_function, np.zeros(6), callback=my_callback)
best_params
from nipy.algorithms.registration import HistogramRegistration
to_img = nib.Nifti1Image(run_mean, img.affine, img.header)
from_img = nib.Nifti1Image(data[..., -1], img.affine, img.header)
R = HistogramRegistration(from_img, to_img, similarity='cc', interp='tri')
res = R.optimize('rigid', optimizer='powell')
res
res.as_affine()
import nipy
nipy.__version__
img = nib.load('ds107_sub012_t1r2.nii')
from nipy.algorithms.registration import SpaceTimeRealign
R = SpaceTimeRealign(img, tr=2.5, slice_times='asc_alt_2', slice_info=2)
R.estimate(refscan=None)
corr_run = R.resample()
from nipy.algorithms.utils.pca import pca_image
nipy_img = nipy.load_image('ds107_sub012_t1r2.nii')
pca1 = pca_image(nipy_img, axis=-1)
pca2 = pca_image(corr_run[0], axis=-1)
fig, axes = plt.subplots(10, 1)
for i, ax in enumerate(axes):
ax.plot(pca1['basis_vectors'][:, i])
fig, axes = plt.subplots(10, 1)
for i, ax in enumerate(axes):
ax.plot(pca2['basis_vectors'][:, i])
!mcflirt -in ds107_sub012_t1r2.nii -refvol 1
flirted_img = nipy.load_image('ds107_sub012_t1r2_mcf.nii.gz')
pca3 = pca_image(flirted_img, axis=-1)
fig, axes = plt.subplots(10, 1)
for i, ax in enumerate(axes):
ax.plot(pca2['basis_vectors'][:, i])
SpaceTimeRealign?
from nipy.algorithms.registration.groupwise_registration import SpaceRealign
realigner = SpaceRealign(img)
realigner.estimate()
corr_run, = realigner.resample()
pca4 = pca_image(corr_run, axis=-1)
fig, axes = plt.subplots(10, 1)
for i, ax in enumerate(axes):
ax.plot(pca4['basis_vectors'][:, i])
fig, axes = plt.subplots(10, 1)
for i, ax in enumerate(axes):
ax.plot(pca1['basis_vectors'][:, i])
fig, axes = plt.subplots(2, 5, figsize=(15, 10))
for i, ax in enumerate(axes.ravel()):
ax.imshow(pca1['basis_projections'][:, :, 17, i])
aff = realigner._transforms[0][-1].as_affine()
import transforms3d
rzs, trans = nib.affines.to_matvec(aff)
rzs
nib.eulerangles.mat2euler(rzs)
trans
best_params
!mcflirt -in ds107_sub012_t1r2.nii -plots -refvol 0
params = np.loadtxt('ds107_sub012_t1r2_mcf.par')
params[-1]
params[0]