Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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
Example #7
0
    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()
Example #8
0
File: tracks.py Project: arokem/Fos
    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
Example #9
0
File: tracks.py Project: arokem/Fos
    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