Skip to content
Snippets Groups Projects
volread.py 1.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • abda's avatar
    abda committed
    """
    Created on Tue Oct 13 2020
    
    @author: Anders Bjorholm Dahl
    abda@dtu.dk
    """
    import numpy as np
    import io
    
    def readvol(file_name):
        """
        Todo: Test this function on images of uint8, uint16, and when dimensions are 
        not all the same.
        
        Parameters
        ----------
        file_name : Sting
            name of .vol and .vgi files without extension
    
        Returns
        -------
        V : numpy array (float32, uint8, or uint16)
            3D volume.
    
        """
        vgi_name = file_name + '.vgi'
        f = io.open(vgi_name, 'r')
        t = f.read()
        f.close()
        elem = []
        dt = ''
        for l in t.splitlines():
            if(l.startswith('Size = ')):
                elem = [int(n) for n in l.split() if n.isdigit()]
            if(l.startswith('Datatype = float')):
                dt = np.float32
            elif(l.startswith('Datatype = uint8')):
                dt = np.uint8
            elif(l.startswith('Datatype = uint16')):
                dt = np.uint16
    
        vol_name = file_name + '.vol'
        V = np.fromfile(vol_name, dtype = dt, count = elem[0]*elem[1]*elem[2])
        V = np.reshape(V, (elem[2], elem[0], elem[1]))
        V = V.transpose((0,2,1))
    
        return V