Mercurial > repos > greg > fast_fiber_tracking
changeset 0:4e3d4331fa58 draft
Uploaded
author | greg |
---|---|
date | Tue, 07 Nov 2017 13:48:48 -0500 |
parents | |
children | 25e38b59bc8e |
files | fast_fiber_tracking.py fast_fiber_tracking.xml |
diffstat | 2 files changed, 112 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fast_fiber_tracking.py Tue Nov 07 13:48:48 2017 -0500 @@ -0,0 +1,70 @@ +#!/usr/bin/env python +import argparse +import shutil + +from dipy.data import fetch_sherbrooke_3shell +from dipy.data import fetch_stanford_hardi +from dipy.data import get_sphere +from dipy.data import read_sherbrooke_3shell +from dipy.data import read_stanford_hardi +from dipy.direction import peaks_from_model +from dipy.io.image import save_nifti +from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response) +from dipy.reconst.dti import TensorModel +from dipy.segment.mask import median_otsu +from dipy.tracking.local import LocalTracking, ThresholdTissueClassifier +from dipy.tracking.streamline import Streamlines +from dipy.tracking.utils import random_seeds_from_mask +from dipy.viz import actor, window + +import numpy as np + +parser = argparse.ArgumentParser() +parser.add_argument('--drmi_dataset', dest='drmi_dataset', help='Input dataset') +parser.add_argument('--output_csd_direction_field', dest='output_csd_direction_field', help='Output csd direction field dataset') +parser.add_argument('--output_det_streamlines', dest='output_det_streamlines', help='Output det streamlines dataset') +parser.add_argument('--output_fa_map', dest='output_fa_map', help='Output fa map dataset') + +args = parser.parse_args() + +interactive = False + +# Get input data. +input_dir = args.drmi_dataset +if input_dir == 'sherbrooke_3shell': + fetch_sherbrooke_3shell() + img, gtab = read_sherbrooke_3shell() +elif input_dir == 'stanford_hardi': + fetch_stanford_hardi() + img, gtab = read_stanford_hardi() + +data = img.get_data() +maskdata, mask = median_otsu(data, 3, 1, False, vol_idx=range(10, 50), dilate=2) + +response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) +csd_model = ConstrainedSphericalDeconvModel(gtab, response) +sphere = get_sphere('symmetric724') +csd_peaks = peaks_from_model(model=csd_model, data=data, sphere=sphere, mask=mask, relative_peak_threshold=.5, min_separation_angle=25, parallel=True) + +tensor_model = TensorModel(gtab, fit_method='WLS') +tensor_fit = tensor_model.fit(data, mask) +fa = tensor_fit.fa + +tissue_classifier = ThresholdTissueClassifier(fa, 0.1) +seeds = random_seeds_from_mask(fa > 0.3, seeds_count=1) + +ren = window.Renderer() +ren.add(actor.peak_slicer(csd_peaks.peak_dirs, csd_peaks.peak_values, colors=None)) +window.record(ren, out_path='csd_direction_field.png', size=(900, 900)) +shutil.move('csd_direction_field.png', args.output_csd_direction_field) + +streamline_generator = LocalTracking(csd_peaks, tissue_classifier, seeds, affine=np.eye(4), step_size=0.5) +streamlines = Streamlines(streamline_generator) + +ren.clear() +ren.add(actor.line(streamlines)) +window.record(ren, out_path='det_streamlines.png', size=(900, 900)) +shutil.move('det_streamlines.png', args.output_det_streamlines) + +save_nifti('fa_map.nii', fa, img.affine) +shutil.move('fa_map.nii', args.output_fa_map)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fast_fiber_tracking.xml Tue Nov 07 13:48:48 2017 -0500 @@ -0,0 +1,42 @@ +<tool id="fast_fiber_tracking" name="Perform fast fiber tracking" version="0.13.0"> + <description>using constrained spherical deconvolution </description> + <requirements> + <requirement type="package" version="0.13.0">dipy</requirement> + </requirements> + <command detect_errors="exit_code"><![CDATA[ +python '$__tool_directory__/fast_fiber_tracking.py' +--drmi_dataset $drmi_dataset +--output_csd_direction_field '$output_csd_direction_field' +--output_det_streamlines '$output_det_streamlines' +--output_fa_map '$output_fa_map' + ]]></command> + <inputs> + <param name="drmi_dataset" type="select" label="dRMI dataset"> + <option value="stanford_hardi" selected="true">stanford_hardi</option> + <option value="sherbrooke_3shell">sherbrooke_3shell</option> + </param> + </inputs> + <outputs> + <data name="output_csd_direction_field" format="png" label="${tool.name}: CSD direction field" /> + <data name="output_det_streamlines" format="png" label="${tool.name}: streamlines" /> + <data name="output_fa_map" format="nifti1" label="${tool.name}: fractional anisotropic" /> + </outputs> + <tests> + <test> + </test> + </tests> + <help> +**What it does** + +Performs fast fiber tracking using constrained spherical deconvolution (CSD) for local reconstruction and generates +deterministic streamlines using the fiber directions (peaks) from CSD and fractional anisotropic (FA) from DTI as a +stopping criteria for the tracking. + +----- + +**Options** + + </help> + <citations> + </citations> +</tool>