def test_aff_to_hdr(): hdr = {} affine = np.diag([1,2,3,1]) affine[:3,3] = [10,11,12] tv.aff_to_hdr(affine, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), affine) # put flip into affine aff2 = affine.copy() aff2[:,2] *=-1 tv.aff_to_hdr(aff2, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), aff2)
def test_aff_to_hdr(): for version in (1, 2): hdr = {'version': version} affine = np.diag([1, 2, 3, 1]) affine[:3, 3] = [10, 11, 12] tv.aff_to_hdr(affine, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), affine) # put flip into affine aff2 = affine.copy() aff2[:, 2] *= -1 tv.aff_to_hdr(aff2, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), aff2) if version == 2: yield assert_array_almost_equal(hdr['vox_to_ras'], aff2)
def test_aff_to_hdr(): for version in (1, 2): hdr = {'version': version} affine = np.diag([1,2,3,1]) affine[:3,3] = [10,11,12] tv.aff_to_hdr(affine, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), affine) # put flip into affine aff2 = affine.copy() aff2[:,2] *=-1 tv.aff_to_hdr(aff2, hdr) yield assert_array_almost_equal(tv.aff_from_hdr(hdr), aff2) if version == 2: yield assert_array_almost_equal(hdr['vox_to_ras'], aff2)
def test_get_affine(): hdr = tv.empty_header() # default header gives useless affine yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([0, 0, 0, 1])) hdr['voxel_size'] = 1 yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([0, 0, 0, 1])) # DICOM direction cosines hdr['image_orientation_patient'] = [1, 0, 0, 0, 1, 0] yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([-1, -1, 1, 1])) # RAS direction cosines hdr['image_orientation_patient'] = [-1, 0, 0, 0, -1, 0] yield assert_array_equal(tv.aff_from_hdr(hdr), np.eye(4)) # translations hdr['origin'] = [1, 2, 3] exp_aff = np.eye(4) exp_aff[:3, 3] = [-1, -2, 3] yield assert_array_equal(tv.aff_from_hdr(hdr), exp_aff) # now use the easier vox_to_ras field hdr = tv.empty_header() aff = np.eye(4) aff[:3, :] = np.arange(12).reshape(3, 4) hdr['vox_to_ras'] = aff yield assert_array_equal(tv.aff_from_hdr(hdr), aff) # mappings work too d = { 'version': 1, 'voxel_size': np.array([1, 2, 3]), 'image_orientation_patient': np.array([1, 0, 0, 0, 1, 0]), 'origin': np.array([10, 11, 12]) } aff = tv.aff_from_hdr(d)
def test_get_affine(): hdr = tv.empty_header() # default header gives useless affine yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([0,0,0,1])) hdr['voxel_size'] = 1 yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([0,0,0,1])) # DICOM direction cosines hdr['image_orientation_patient'] = [1,0,0,0,1,0] yield assert_array_equal(tv.aff_from_hdr(hdr), np.diag([-1,-1,1,1])) # RAS direction cosines hdr['image_orientation_patient'] = [-1,0,0,0,-1,0] yield assert_array_equal(tv.aff_from_hdr(hdr), np.eye(4)) # translations hdr['origin'] = [1,2,3] exp_aff = np.eye(4) exp_aff[:3,3] = [-1,-2,3] yield assert_array_equal(tv.aff_from_hdr(hdr), exp_aff) # now use the easier vox_to_ras field hdr = tv.empty_header() aff = np.eye(4) aff[:3,:] = np.arange(12).reshape(3,4) hdr['vox_to_ras'] = aff yield assert_array_equal(tv.aff_from_hdr(hdr), aff) # mappings work too d = {'version': 1, 'voxel_size': np.array([1,2,3]), 'image_orientation_patient': np.array([1,0,0,0,1,0]), 'origin': np.array([10,11,12])} aff = tv.aff_from_hdr(d)
def load_reduce_translate(fname, reduction=1): """ Loads a trackvis file using DIPY io, only keeping a ratio of 1/reduction tracks. Performs trajectory approximation to reduce the track lengths. Parameter --------- fname : str The Trackvis file reduction : int, optional The reduction factor (keep only 1 line per set of reduction lines) Returns ------- tracks : list A list of tracks """ lines, hdr = tv.read(fname) print 'loaded,', sys.stdout.flush() #ras = tv.get_affine(hdr) ras = tv.aff_from_hdr(hdr) if not ras[:3,-1].any(): # dot(ras[:3,:3],md_vox) + t = (0,0,0) --> t = -dot(ras[:3,:3],md_vox) md_vox = hdr['dim']/2 t = -np.dot(ras[:3,:3], md_vox) ras[:3,-1] = t tracks = [l[0] for l in lines[::reduction]] del lines ras_cmap = ni_api.AffineTransform.from_params('ijk', 'xyz', ras) flat_tracks, breaks = flatten_tracks(tracks) del tracks flat_tracks_xyz = ras_cmap(flat_tracks) tracks = recombine_flattened_tracks(flat_tracks_xyz, breaks) print 'translated,', sys.stdout.flush() tracks_reduced = [tp.approximate_ei_trajectory(line, alpha=np.pi/4) for line in tracks ] print 'reduced,' sys.stdout.flush() return tracks_reduced
def init(self): import dipy.io.trackvis as tv lines,hdr = tv.read(self.fname) ras = tv.aff_from_hdr(hdr) self.affine=ras tracks = [l[0] for l in lines] if self.yellow_indices != None : tracks = [t for t in tracks if tm.length(t) > 20] print 'tracks loaded' #self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)]#tracks[:20000] if self.dummy_data: self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)] if self.data_subset!=None: self.data = tracks[self.data_subset[0]:self.data_subset[1]] else: self.data = tracks data_stats = np.concatenate(tracks) self.min=np.min(data_stats,axis=0) self.max=np.max(data_stats,axis=0) self.mean=np.mean(data_stats,axis=0) del data_stats del lines self.multiple_colors()
def __init__(self,fname,ang_table=None,colormap=None, line_width=3., shrink=None,subset=None,tracks=None,text=None,text_color=np.array([1,0,0])): self.position = (0,0,0) self.fname = fname self.manycolors = True self.bbox = None self.list_index = None self.affine = None self.data = None self.list_index = None self.rot_angle = 0 self.colormap = None self.text = text self.min = None self.max = None self.mean = None self.material_color = False self.fadeout = False self.fadein = False self.fadeout_speed = 0. self.fadein_speed = 0. self.min_length = 20. self.angle = 0. self.angular_speed = .5 self.line_width = line_width self.opacity = 1. self.near_pick = None self.far_pick = None self.near_pick_prev = None self.far_pick_prev = None self.picked_track = None self.pick_color = [1,1,0] self.brain_color = [1,1,1] self.yellow_indices = None self.dummy_data = False self.tracks = tracks if subset != None: self.data_subset = subset #[0,20000]#None else: self.data_subset = None self.orbit_demo = False self.orbit_anglez = 0. self.orbit_anglez_rate = 10. self.orbit_anglex = 0. self.orbit_anglex_rate = 2. self.angle_table = ang_table self.angle_table_index = 0 self.shrink = shrink self.picking_example = False self.partial_colors = False import dipy.io.trackvis as tv if self.tracks == None: lines,hdr = tv.read(self.fname) ras = tv.aff_from_hdr(hdr) self.affine=ras tracks = [l[0] for l in lines] del lines else: tracks = self.tracks if self.yellow_indices != None : tracks = [t for t in tracks if tm.length(t) > 20] print '%d tracks loaded' % len(tracks) #self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)]#tracks[:20000] if self.dummy_data: self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)] if self.data_subset!=None: self.data = tracks[self.data_subset[0]:self.data_subset[1]] else: self.data = tracks if self.shrink != None: self.data = [ self.shrink*t for t in self.data] data_stats = np.concatenate(tracks) self.min=np.min(data_stats,axis=0) self.max=np.max(data_stats,axis=0) self.mean=np.mean(data_stats,axis=0) del data_stats
def __init__(self,fname,colormap=None, line_width=1., shrink=None, thinning = 0, angle_table = None, manycolors = False, brain_color=[1,1,1]): self.position = (0,0,0) self.fname = fname self.manycolors = manycolors #self.color = monocolor self.bbox = None self.list_index = None self.affine = None self.data = None self.list_index = None self.rot_angle = 0 self.colormap = None self.min = None self.max = None self.mean = None self.material_color = False self.fadeout = False self.fadein = False self.fadeout_speed = 0. self.fadein_speed = 0. self.min_length = 20. self.angle = 0. self.angular_speed = .5 self.line_width = line_width self.opacity = 1. self.opacity_rate = 0. self.near_pick = None self.far_pick = None self.near_pick_prev = None self.far_pick_prev = None self.picked_track = None self.pick_color = [1,1,0] #self.brain_color = [1,1,1] # white #self.brain_color = [.941,.862,.510] # buff self.brain_color = brain_color self.yellow_indices = None self.dummy_data = False self.data_subset = [0,20000]#None self.orbit_demo = False self.orbit_anglez =0. self.orbit_anglez_rate = 10. self.orbit_anglex = 0. self.orbit_anglex_rate = 2. self.angle_table = angle_table if angle_table != None: print 'Tracks angle_table shape %s' % str(self.angle_table.shape) self.angle_table_index = 0 #print 'angle_table_index %d' % self.angle_table_index self.shrink = shrink self.picking_example = False import dipy.io.trackvis as tv lines,hdr = tv.read(self.fname) ras = tv.aff_from_hdr(hdr ) self.affine=ras tracks = [l[0] for l in lines] print 'tracks %d loaded' % len(tracks) self.thinning = thinning if self.yellow_indices != None : tracks = [t for t in tracks if tm.length(t) > 20] if self.thinning != 0: tracks = [tracks[k] for k in range(0,len(tracks),self.thinning)] print '%d tracks active' % len(tracks) #self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)]#tracks[:20000] if self.dummy_data: self.data = [100*np.array([[0,0,0],[1,0,0],[2,0,0]]).astype(np.float32) ,100*np.array([[0,1,0],[0,2,0],[0,3,0]]).astype(np.float32)] if self.data_subset!=None: self.data = tracks[self.data_subset[0]:self.data_subset[1]] else: self.data = tracks if self.shrink != None: self.data = [ self.shrink*t for t in self.data] data_stats = np.concatenate(tracks) self.min=np.min(data_stats,axis=0) self.max=np.max(data_stats,axis=0) self.mean=np.mean(data_stats,axis=0) del data_stats del lines