def show_tract(segmented_tract, color): ren = fvtk.ren() fvtk.add( ren, fvtk.line(segmented_tract.tolist(), colors=color, linewidth=2, opacity=0.3)) fvtk.show(ren) fvtk.clear(ren)
def show_tract(segmented_tract, color): """Visualization of the segmented tract. """ ren = fvtk.ren() fvtk.add(ren, fvtk.line(segmented_tract.tolist(), colors=color, linewidth=2, opacity=0.3)) fvtk.show(ren) fvtk.clear(ren)
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 show_odfs(fpng, odf_sh, invB, sphere): ren = fvtk.ren() ren.SetBackground(1, 1, 1.0) odf = np.dot(odf_sh, invB) print(odf.shape) odf = odf[14:24, 22, 23:33] # odf = odf[:, 22, :] # odf = odf[:, 0, :] sfu = fvtk.sphere_funcs(odf[:, None, :], sphere, norm=True) sfu.RotateX(-90) fvtk.add(ren, sfu) fvtk.show(ren) fvtk.record(ren, n_frames=1, out_path=fpng, size=(900, 900)) fvtk.clear(ren)
def show_tracts(estimated_target_tract, target_tract): """Visualization of the tracts. """ ren = fvtk.ren() fvtk.add( ren, fvtk.line(estimated_target_tract, fvtk.colors.green, linewidth=1, opacity=0.3)) fvtk.add( ren, fvtk.line(target_tract, fvtk.colors.white, linewidth=2, opacity=0.3)) fvtk.show(ren) fvtk.clear(ren)
def show_tract(segmented_tract_positive, color_positive, color_negative, segmented_tract_negative): """Visualization of the segmented tract. """ ren = fvtk.ren() fvtk.add( ren, fvtk.line(segmented_tract_positive.tolist(), colors=color_positive, linewidth=2, opacity=0.3)) # fvtk.add(ren, fvtk.line(segmented_tract_negative.tolist(), # colors=color_negative, # linewidth=2, # opacity=0.3)) fvtk.show(ren) fvtk.clear(ren)
def renderCentroids(streamlines, clusters): from dipy.viz import fvtk import numpy as np ren = fvtk.ren() ren.SetBackground(0, 0, 0) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster in clusters: colormap_full[cluster.indices] = np.random.rand(3) #fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white, opacity=0.05)) fvtk.add(ren, fvtk.line(clusters.centroids, linewidth=0.4, opacity=1)) #fvtk.record(ren, n_frames=1, out_path='fornix_centroids.png', size=(600, 600)) fvtk.show(ren) fvtk.clear(ren)
def renderBundles(streamlines, clusters): from dipy.viz import fvtk import numpy as np ren = fvtk.ren() ren.SetBackground(0, 0, 0) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster in clusters: colormap_full[cluster.indices] = np.random.rand(3) fvtk.add(ren, fvtk.line(streamlines, colormap_full)) #fvtk.record(ren, n_frames=1, out_path='fornix_clusters.png', size=(600, 600)) fvtk.show(ren) fvtk.clear(ren)
def renderCentroids(clusters): from dipy.viz import fvtk import numpy as np ren = fvtk.ren() ren.SetBackground(0, 0, 0) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster in clusters: colormap_full[cluster.indices] = np.random.rand(3) #fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white, opacity=0.05)) fvtk.add(ren, fvtk.line(clusters.centroids, linewidth=0.4, opacity=1)) #fvtk.record(ren, n_frames=1, out_path='fornix_centroids.png', size=(600, 600)) fvtk.show(ren) fvtk.clear(ren)
def renderBundles(clusters): from dipy.viz import fvtk import numpy as np ren = fvtk.ren() ren.SetBackground(0, 0, 0) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster in clusters: colormap_full[cluster.indices] = np.random.rand(3) fvtk.add(ren, fvtk.line(streamlines, colormap_full)) #fvtk.record(ren, n_frames=1, out_path='fornix_clusters.png', size=(600, 600)) fvtk.show(ren) fvtk.clear(ren)
def show_peak_directions(fpng, peaks, scale=0.3, x=10, y=0, z=10): r = fvtk.ren() for index in ndindex(peaks.shape[:-1]): peak = peaks[index] directions = peak.reshape(peak.shape[0] / 3, 3) # pos = np.array(index) for i in xrange(directions.shape[0]): if norm(directions[i]) != 0: line_actor = fvtk.line( index + scale * np.vstack((-directions[i], directions[i])), abs(directions[i] / norm(directions[i])) ) line_actor.RotateX(-90) fvtk.add(r, line_actor) fvtk.show(r) fvtk.record(r, out_path=fpng, size=(900, 900)) fvtk.clear(r)
def show(T,A,IND,VERTS,scale): r=fvtk.ren() fvtk.clear(r) fvtk.add(r,fvtk.line(T,fvtk.red)) fvtk.show(r) Td=[downsample(t,20) for t in T] C=local_skeleton_clustering(Td,3) fvtk.clear(r) lent=float(len(T)) for c in C: color=np.random.rand(3) virtual=C[c]['hidden']/float(C[c]['N']) if length(virtual)> virtual_thr: linewidth=100*len(C[c]['indices'])/lent if linewidth<1.: linewidth=1 #fvtk.add(r,fvtk.line(virtual,color,linewidth=linewidth)) #fvtk.add(r,fvtk.label(r,str(len(C[c]['indices'])),pos=virtual[0],scale=3,color=color )) #print C[c]['hidden'].shape print A.shape print IND.shape print VERTS.shape all,allo=fvtk.crossing(A,IND,VERTS,scale,True) colors=np.zeros((len(all),3)) for (i,a) in enumerate(all): if allo[i][0]==0 and allo[i][1]==0 and allo[i][2]==1: pass else: colors[i]=cm.boys2rgb(allo[i]) fvtk.add(r,fvtk.line(all,colors)) fvtk.show(r)
**CSD ODFs**. 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. """
all_streamlines_threshold_classifier = LocalTracking(dg, threshold_classifier, seeds, affine, step_size=.5, return_all=True) save_trk("deterministic_threshold_classifier_all.trk", all_streamlines_threshold_classifier, affine, labels.shape) streamlines = [sl for sl in all_streamlines_threshold_classifier] fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) fvtk.record(ren, out_path='all_streamlines_threshold_classifier.png', size=(600, 600)) """ .. figure:: all_streamlines_threshold_classifier.png :align: center **Deterministic tractography using a thresholded fractional anisotropy.** """ """ Binary Tissue Classifier ------------------------
**Deterministic streamlines with EuDX on ODF peaks field modulated by GFA**. It is also possible to use EuDX with multiple ODF peaks, which is very helpful when tracking in crossing areas. """ eu = EuDX(csapeaks.peak_values, csapeaks.peak_indices, seeds=10000, odf_vertices=sphere.vertices, ang_thr=20., a_low=0.6) csa_streamlines_mult_peaks = [streamline for streamline in eu] fvtk.clear(r) fvtk.add( r, fvtk.line(csa_streamlines_mult_peaks, line_colors(csa_streamlines_mult_peaks))) print('Saving illustration as csa_tracking_mpeaks.png') fvtk.record(r, n_frames=1, out_path='csa_tracking_mpeaks.png', size=(600, 600)) """ .. figure:: csa_tracking_mpeaks.png :align: center **Deterministic streamlines with EuDX on multiple ODF peaks**.
fvtk.add(r,fvtk.line(T,fvtk.white,opacity=1)) #fvtk.show(r) fvtk.record(r,n_frames=1,out_path='fornix_initial',size=(600,600)) """ .. figure:: fornix_initial1000000.png :align: center **Initial Fornix dataset**. """ """ Show the *Fornix* after clustering (with random bundle colors): """ fvtk.clear(r) colors=np.zeros((len(T),3)) for c in C: color=np.random.rand(1,3) for i in C[c]['indices']: colors[i]=color fvtk.add(r,fvtk.line(T,colors,opacity=1)) #fvtk.show(r) fvtk.record(r,n_frames=1,out_path='fornix_clust',size=(600,600)) """ .. figure:: fornix_clust1000000.png :align: center **Showing the different clusters with random colors**.