def test_fvtk_functions(): # This tests will fail if any of the given actors changed inputs or do # not exist # Create a renderer r = fvtk.ren() # Create 2 lines with 2 different colors lines = [np.random.rand(10, 3), np.random.rand(20, 3)] colors = np.random.rand(2, 3) c = fvtk.line(lines, colors) fvtk.add(r, c) # create streamtubes of the same lines and shift them a bit c2 = fvtk.streamtube(lines, colors) c2.SetPosition(2, 0, 0) fvtk.add(r, c2) # Create a volume and return a volumetric actor using volumetric rendering vol = 100 * np.random.rand(100, 100, 100) vol = vol.astype('uint8') r = fvtk.ren() v = fvtk.volume(vol) fvtk.add(r, v) # Remove all objects fvtk.rm_all(r) # Put some text l = fvtk.label(r, text='Yes Men') fvtk.add(r, l) # Slice the volume slicer = fvtk.slicer(vol) slicer.display(50, None, None) fvtk.add(r, slicer) # Change the position of the active camera fvtk.camera(r, pos=(0.6, 0, 0), verbose=False) fvtk.clear(r) # Peak directions p = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3)) fvtk.add(r, p) p2 = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3), np.random.rand(3, 3, 3, 5), colors=(0, 1, 0)) fvtk.add(r, p2)
def test_fvtk_functions(): # This tests will fail if any of the given actors changed inputs or do # not exist # Create a renderer r = fvtk.ren() # Create 2 lines with 2 different colors lines = [np.random.rand(10, 3), np.random.rand(20, 3)] colors = np.random.rand(2, 3) c = fvtk.line(lines, colors) fvtk.add(r, c) # create streamtubes of the same lines and shift them a bit c2 = fvtk.streamtube(lines, colors) c2.SetPosition(2, 0, 0) fvtk.add(r, c2) # Create a volume and return a volumetric actor using volumetric rendering vol = 100 * np.random.rand(100, 100, 100) vol = vol.astype('uint8') r = fvtk.ren() v = fvtk.volume(vol) fvtk.add(r, v) # Remove all objects fvtk.rm_all(r) # Put some text l = fvtk.label(r, text='Yes Men') fvtk.add(r, l) # Slice the volume slicer = fvtk.slicer(vol) slicer.display(50, None, None) fvtk.add(r, slicer) # Change the position of the active camera fvtk.camera(r, pos=(0.6, 0, 0), verbose=False) fvtk.clear(r) # Peak directions p = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3)) fvtk.add(r, p) p2 = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3), np.random.rand(3, 3, 3, 5), colors=(0, 1, 0)) fvtk.add(r, p2)
def loadPeaksFromMrtrix(): filename='CSD8.nii.gz' mask='mask.nii.gz' pkdir,pkval,pkind = getPeaksFromMrtrix(filename, mask) fodf_peaks = fvtk.peaks(pkdir, pkval, scale=1) #fodf_spheres = fvtk.sphere_funcs(data_small, sphere, scale=0.6, norm=False) ren = fvtk.ren() #fodf_spheres.GetProperty().SetOpacity(0.4) fvtk.add(ren, fodf_peaks) #fvtk.add(ren, fodf_peaks) fvtk.show(ren) return fodf_peaks
In Dipy we also provide tools for finding the peak directions (maxima) of the ODFs. For this purpose we recommend using ``peaks_from_model``. """ from dipy.direction import peaks_from_model csd_peaks = peaks_from_model(model=csd_model, data=data_small, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, parallel=True) fvtk.clear(ren) fodf_peaks = fvtk.peaks(csd_peaks.peak_dirs, csd_peaks.peak_values, scale=1.3) fvtk.add(ren, fodf_peaks) print('Saving illustration as csd_peaks.png') fvtk.record(ren, out_path='csd_peaks.png', size=(600, 600)) """ .. figure:: csd_peaks.png :align: center **CSD Peaks**. We can finally visualize both the ODFs and peaks in the same space. """ fodf_spheres.GetProperty().SetOpacity(0.4)
fvtk.record(ren, out_path='sf_odfs.png', size=(1000, 1000)) """ We can extract the peaks from the ODF, and plot these as well """ sf_peaks = dpp.peaks_from_model(sf_model, data_small, sphere, relative_peak_threshold=.5, min_separation_angle=25, return_sh=False) fvtk.clear(ren) fodf_peaks = fvtk.peaks(sf_peaks.peak_dirs, sf_peaks.peak_values, scale=1.3) fvtk.add(ren, fodf_peaks) print('Saving illustration as sf_peaks.png') fvtk.record(ren, out_path='sf_peaks.png', size=(1000, 1000)) """ Finally, we plot both the peaks and the ODFs, overlayed: """ fodf_spheres.GetProperty().SetOpacity(0.4) fvtk.add(ren, fodf_spheres) print('Saving illustration as sf_both.png') fvtk.record(ren, out_path='sf_both.png', size=(1000, 1000))
the following way. """ stopping_values = np.zeros(csd_peaks.peak_values.shape) stopping_values[:] = FA[..., None] """ For quality assurance we can also visualize a slice from the direction field which we will use as the basis to perform the tracking. """ ren = fvtk.ren() slice_no = data.shape[2] / 2 fvtk.add(ren, fvtk.peaks(csd_peaks.peak_dirs[:, :, slice_no:slice_no + 1], stopping_values[:, :, slice_no:slice_no + 1])) print('Saving illustration as csd_direction_field.png') fvtk.record(ren, out_path='csd_direction_field.png', size=(900, 900)) """ .. figure:: csd_direction_field.png :align: center **Direction Field (peaks)** ``EuDX`` [Garyfallidis12]_ is a fast algorithm that we use here to generate streamlines. If the parameter ``seeds`` is a positive integer it will generate that number of randomly placed seeds everywhere in the volume. Alternatively, you can specify the exact seed points using an array (N, 3) where N is the number of seed points. For simplicity, here we will use the first option
the following way. """ stopping_values = np.zeros(csd_peaks.peak_values.shape) stopping_values[:] = FA[..., None] """ For quality assurance we can also visualize a slice from the direction field which we will use as the basis to perform the tracking. """ ren = fvtk.ren() slice_no = data.shape[2] / 2 fvtk.add(ren, fvtk.peaks(csd_peaks.peak_dirs[:, :, slice_no:slice_no + 1], stopping_values[:, :, slice_no:slice_no + 1])) print('Saving illustration as csd_direction_field.png') fvtk.record(ren, out_path='csd_direction_field.png', size=(900, 900)) """ .. figure:: csd_direction_field.png :align: center **Direction Field (peaks)** ``EuDX`` [Garyfallidis12]_ is a fast algorithm that we use here to generate streamlines. If the parameter ``seeds`` is a positive integer it will generate that number of randomly placed seeds everywhere in the volume. Alternatively, you can specify the exact seed points using an array (N, 3) where N is the number of seed points. For simplicity, here we will use the first option
In Dipy we also provide tools for finding the peak directions (maxima) of the ODFs. For this purpose we recommend using ``peaks_from_model``. """ from dipy.direction import peaks_from_model csd_peaks = peaks_from_model(model=csd_model, data=data_small, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, parallel=True) fvtk.clear(ren) fodf_peaks = fvtk.peaks(csd_peaks.peak_dirs, csd_peaks.peak_values, scale=1.3) fvtk.add(ren, fodf_peaks) print('Saving illustration as csd_peaks.png') fvtk.record(ren, out_path='csd_peaks.png', size=(600, 600)) """ .. figure:: csd_peaks.png :align: center **CSD Peaks**. We can finally visualize both the ODFs and peaks in the same space. """ fodf_spheres.GetProperty().SetOpacity(0.4)