Mercurial > repos > greg > linear_fascile_evaluation
changeset 3:0ddfcb3b5ce6 draft
Uploaded
author | greg |
---|---|
date | Wed, 29 Nov 2017 09:51:57 -0500 |
parents | 5daa2541c7fa |
children | efa122bf8d94 |
files | linear_fascile_evaluation.py |
diffstat | 1 files changed, 28 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/linear_fascile_evaluation.py Wed Nov 29 09:51:50 2017 -0500 +++ b/linear_fascile_evaluation.py Wed Nov 29 09:51:57 2017 -0500 @@ -1,20 +1,24 @@ #!/usr/bin/env python import argparse -import numpy as np -import os.path as op -import nibabel as nib +import shutil + import dipy.core.optimize as opt import dipy.tracking.life as life -import matplotlib.pyplot as plt -import matplotlib - +from dipy.data import fetch_stanford_t1, read_stanford_labels, read_stanford_t1 +from dipy.viz import fvtk from dipy.viz.colormap import line_colors -from dipy.viz import fvtk + +import matplotlib +import matplotlib.pyplot as plt + from mpl_toolkits.axes_grid1 import AxesGrid -from dipy.data import read_stanford_labels, fetch_stanford_t1, read_stanford_t1 + +import nibabel as nib + +import numpy as np parser = argparse.ArgumentParser() -parser.add_argument('--candidates', dest='candidates', help='Candidates selection') +parser.add_argument('--input', dest='input', help='Track Visualization Header dataset') parser.add_argument('--output_life_candidates', dest='output_life_candidates', help='Output life candidates') parser.add_argument('--output_life_optimized', dest='output_life_optimized', help='Output life optimized streamlines') parser.add_argument('--output_beta_histogram', dest='output_beta_histogram', help='Output beta histogram') @@ -33,7 +37,7 @@ data = hardi_img.get_data() # Read the candidates from file in voxel space: -candidate_sl = [s[0] for s in nib.trackvis.read(args.candidates, points_space='voxel')[0]] +candidate_sl = [s[0] for s in nib.trackvis.read(args.input, points_space='voxel')[0]] # Visualize the initial candidate group of streamlines # in 3D, relative to the anatomical structure of this brain. candidate_streamlines_actor = fvtk.streamtube(candidate_sl, line_colors(candidate_sl)) @@ -48,7 +52,8 @@ fvtk.add(ren, cc_ROI_actor) fvtk.add(ren, vol_actor) fvtk.add(ren, vol_actor2) -fvtk.record(ren, n_frames=1, out_path=args.output_life_candidates, size=(800, 800)) +fvtk.record(ren, n_frames=1, out_path="life_candidates.png", size=(800, 800)) +shutil.move("life_candidates.png", args.output_life_candidates) # Initialize a LiFE model. fiber_model = life.FiberModel(gtab) # Fit the model, producing a FiberFit class instance, @@ -59,15 +64,17 @@ ax.hist(fiber_fit.beta, bins=100, histtype='step') ax.set_xlabel('Fiber weights') ax.set_ylabel('# fibers') -fig.savefig(args.output_beta_histogram) +fig.savefig("beta_histogram.png") +shutil.move("beta_histogram.png", args.output_beta_histogram) # Filter out these redundant streamlines and # generate an optimized group of streamlines. -optimized_sl = list(np.array(candidate_sl)[np.where(fiber_fit.beta>0)[0]]) +optimized_sl = list(np.array(candidate_sl)[np.where(fiber_fit.beta > 0)[0]]) ren = fvtk.ren() fvtk.add(ren, fvtk.streamtube(optimized_sl, line_colors(optimized_sl))) fvtk.add(ren, cc_ROI_actor) fvtk.add(ren, vol_actor) -fvtk.record(ren, n_frames=1, out_path=args.output_life_optimized, size=(800, 800)) +fvtk.record(ren, n_frames=1, out_path="optimized.png", size=(800, 800)) +shutil.move("optimized.png", args.output_life_optimized) model_predict = fiber_fit.predict() # Focus on the error in prediction of the diffusion-weighted # data, and calculate the root of the mean squared error. @@ -90,11 +97,12 @@ # between these two alternative models of the ROI. fig, ax = plt.subplots(1) ax.hist(mean_rmse - model_rmse, bins=100, histtype='step') -ax.text(0.2, 0.9,'Median RMSE, mean model: %.2f' % np.median(mean_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) -ax.text(0.2, 0.8,'Median RMSE, LiFE: %.2f' % np.median(model_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) +ax.text(0.2, 0.9, 'Median RMSE, mean model: %.2f' % np.median(mean_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) +ax.text(0.2, 0.8, 'Median RMSE, LiFE: %.2f' % np.median(model_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) ax.set_xlabel('RMS Error') ax.set_ylabel('# voxels') -fig.savefig(args.output_error_histograms) +fig.savefig("error_histograms.png") +shutil.move("error_histograms.png", args.output_error_histograms) # Show the spatial distribution of the two error terms, # and of the improvement with the model fit: vol_model = np.ones(data.shape[:3]) * np.nan @@ -106,7 +114,7 @@ sl_idx = 49 fig = plt.figure() fig.subplots_adjust(left=0.05, right=0.95) -ax = AxesGrid(fig, 111, nrows_ncols = (1, 3), label_mode = "1", share_all = True, cbar_location="top", cbar_mode="each", cbar_size="10%", cbar_pad="5%") +ax = AxesGrid(fig, 111, nrows_ncols=(1, 3), label_mode="1", share_all=True, cbar_location="top", cbar_mode="each", cbar_size="10%", cbar_pad="5%") ax[0].matshow(np.rot90(t1_data[sl_idx, :, :]), cmap=matplotlib.cm.bone) im = ax[0].matshow(np.rot90(vol_model[sl_idx, :, :]), cmap=matplotlib.cm.hot) ax.cbar_axes[0].colorbar(im) @@ -119,4 +127,5 @@ for lax in ax: lax.set_xticks([]) lax.set_yticks([]) -fig.savefig(args.output_spatial_errors) +fig.savefig("spatial_errors.png") +shutil.move("spatial_errors.png", args.output_spatial_errors)