Esempio n. 1
0
def readData(filename, x=all, y=all, z=all, **args):
    """Read data from a single tif image or stack
    
    Arguments:
        filename (str): file name as regular expression
        x,y,z (tuple): data range specifications
    
    Returns:
        array: image data
    """

    dsize = dataSize(filename)
    #print("dsize %s" % str(dsize);

    if len(dsize) == 2:
        data = tiff.imread(filename, key=0)
        #print("data.shape %s" % str(data.shape);

        return io.dataToRange(data.transpose([1, 0]), x=x, y=y)
        #return io.dataToRange(data, x = x, y = y);

    else:
        if z is all:
            data = tiff.imread(filename)
            if data.ndim == 2:
                # data = data
                data = data.transpose([1, 0])
            elif data.ndim == 3:
                #data = data.transpose([1,2,0]);
                data = data.transpose([2, 1, 0])
            elif data.ndim == 4:  # multi channel image
                #data = data.transpose([1,2,0,3]);
                data = data.transpose([2, 1, 0, 3])
            else:
                raise RuntimeError('readData: dimension %d not supproted!' %
                                   data.ndim)

            return io.dataToRange(data, x=x, y=y, z=all)

        else:  #optimize for z ranges
            ds = io.dataSizeFromDataRange(dsize, x=x, y=y, z=z)
            t = tiff.TiffFile(filename)
            p = t.pages[0]
            data = numpy.zeros(ds, dtype=p.dtype)
            rz = io.toDataRange(dsize[2], r=z)

            #print("test"
            #print(rz;
            #print(dsize

            for i in range(rz[0], rz[1]):
                xydata = t.pages[i].asarray()
                #data[:,:,i-rz[0]] = io.dataToRange(xydata, x = x, y = y);
                data[:, :, i - rz[0]] = io.dataToRange(xydata.transpose([1,
                                                                         0]),
                                                       x=x,
                                                       y=y)

            return data
Esempio n. 2
0
def readData(filename, x = all, y = all, z = all, **args):
    """Read data from a single tif image or stack
    
    Arguments:
        filename (str): file name as regular expression
        x,y,z (tuple): data range specifications
    
    Returns:
        array: image data
    """
    
    dsize = dataSize(filename);
    #print "dsize %s" % str(dsize);    
    
    if len(dsize) == 2:
        data = tiff.imread(filename, key = 0);
        #print "data.shape %s" % str(data.shape);        
        
        return io.dataToRange(data.transpose([1,0]), x = x, y = y);
        #return io.dataToRange(data, x = x, y = y);
        
    else:
        if z is all:
            data = tiff.imread(filename);
            if data.ndim == 2:
                # data = data
                data = data.transpose([1,0]);
            elif data.ndim == 3:
                #data = data.transpose([1,2,0]);
                data = data.transpose([2,1,0]);
            elif data.ndim == 4: # multi channel image
                #data = data.transpose([1,2,0,3]);
                data = data.transpose([2,1,0,3]);
            else:
                raise RuntimeError('readData: dimension %d not supproted!' % data.ndim)
            
            return io.dataToRange(data, x = x, y = y, z = all);
        
        else: #optimize for z ranges
            ds = io.dataSizeFromDataRange(dsize, x = x, y = y, z = z);
            t = tiff.TiffFile(filename);
            p = t.pages[0];
            data = numpy.zeros(ds, dtype = p.dtype);
            rz = io.toDataRange(dsize[2], r = z);
            
            #print "test"
            #print rz;
            #print dsize            
            
            for i in range(rz[0], rz[1]):
                xydata = t.pages[i].asarray();
                #data[:,:,i-rz[0]] = io.dataToRange(xydata, x = x, y = y);
                data[:,:,i-rz[0]] = io.dataToRange(xydata.transpose([1,0]), x = x, y = y);
            
            return data
Esempio n. 3
0
def readData(filename, x = all, y = all, z = all):
    """Read data from raw/mhd image
    
    Arguments:
        filename (str): file name as regular expression
        x,y,z (tuple): data range specifications
    
    Returns:
        array: image data
    """   
    
    imr = vtk.vtkMetaImageReader()
    imr.SetFileName(filename);
    imr.Update()
    
    im = imr.GetOutput()
    dims = im.GetDimensions()
    
    print dims    
    
    sc = im.GetPointData().GetScalars()
    img = vtk_to_numpy(sc)
    #print img.shape
    
    dims = list(dims);
    dims[0:3] = [dims[2], dims[1], dims[0]];
    
    imgs = list(img.shape);
    if len(imgs) > 1:
        imgs.pop(0);
        dims = dims + imgs;
    
    img = img.reshape(dims)
    #img = img.transpose([1,2,0]);
    tp = [2,1,0];
    tp = tp + [i for i in range(3, len(dims))];
    img = img.transpose(tp);
    
    return io.dataToRange(img, x = x, y = y, z = z);
Esempio n. 4
0
def readData(filename, x=all, y=all, z=all):
    """Read data from raw/mhd image
    
    Arguments:
        filename (str): file name as regular expression
        x,y,z (tuple): data range specifications
    
    Returns:
        array: image data
    """

    imr = vtk.vtkMetaImageReader()
    imr.SetFileName(filename)
    imr.Update()

    im = imr.GetOutput()
    dims = im.GetDimensions()

    print dims

    sc = im.GetPointData().GetScalars()
    img = vtk_to_numpy(sc)
    #print img.shape

    dims = list(dims)
    dims[0:3] = [dims[2], dims[1], dims[0]]

    imgs = list(img.shape)
    if len(imgs) > 1:
        imgs.pop(0)
        dims = dims + imgs

    img = img.reshape(dims)
    #img = img.transpose([1,2,0]);
    tp = [2, 1, 0]
    tp = tp + [i for i in range(3, len(dims))]
    img = img.transpose(tp)

    return io.dataToRange(img, x=x, y=y, z=z)
Esempio n. 5
0
def writeData(filename, data, options={}, separateHeader=False, x = all, y = all, z = all):
    """Write data to nrrd file
    
    Arguments:
        filename (str): file name as regular expression
        data (array): image data
        options (dict): options dictionary
        separateHeader (bool): write a separate header file
    
    Returns:
        str: nrrd output file name

    To sample data use `options['spacings'] = [s1, s2, s3]` for
    3d data with sampling deltas `s1`, `s2`, and `s3` in each dimension.
    """
    
    data = io.dataToRange(data, x = x, y = y, z = z);
    
    # Infer a number of fields from the ndarray and ignore values
    # in the options dictionary.
    options['type'] = _TYPEMAP_NUMPY2NRRD[data.dtype.str[1:]]
    if data.dtype.itemsize > 1:
        options['endian'] = _NUMPY2NRRD_ENDIAN_MAP[data.dtype.str[:1]]
    # if 'space' is specified 'space dimension' can not. See http://teem.sourceforge.net/nrrd/format.html#space
    if 'space' in options.keys() and 'space dimension' in options.keys():
        del options['space dimension']
    options['dimension'] = data.ndim
    dsize = list(data.shape);
    #dsize[0:2] = [dsize[1], dsize[0]];
    options['sizes'] = dsize;

    # The default encoding is 'gzip'
    if 'encoding' not in options:
        options['encoding'] = 'gzip'

    # A bit of magic in handling options here.
    # If *.nhdr filename provided, this overrides `separate_header=False`
    # If *.nrrd filename provided AND separate_header=True, separate files
    #   written.
    # For all other cases, header & data written to same file.
    if filename[-5:] == '.nhdr':
        separate_header = True
        if 'data file' not in options:
            datafilename = filename[:-4] + str('raw')
            if options['encoding'] == 'gzip':
                datafilename += '.gz'
            options['data file'] = datafilename
        else:
            datafilename = options['data file']
    elif filename[-5:] == '.nrrd' and separate_header:
        separate_header = True
        datafilename = filename
        filename = filename[:-4] + str('nhdr')
    else:
        # Write header & data as one file
        datafilename = filename;
        separate_header = False;

    with open(filename,'wb') as filehandle:
        filehandle.write(b'NRRD0005\n')
        filehandle.write(b'# This NRRD file was generated by pynrrd\n')
        filehandle.write(b'# on ' +
                         datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S').encode('ascii') +
                         b'(GMT).\n')
        filehandle.write(b'# Complete NRRD file format specification at:\n');
        filehandle.write(b'# http://teem.sourceforge.net/nrrd/format.html\n');

        # Write the fields in order, this ignores fields not in _NRRD_FIELD_ORDER
        for field in _NRRD_FIELD_ORDER:
            if field in options:
                outline = (field + ': ' +
                           _NRRD_FIELD_FORMATTERS[field](options[field]) +
                           '\n').encode('ascii')
                filehandle.write(outline)
        d = options.get('keyvaluepairs', {})
        for (k,v) in sorted(d.items(), key=lambda t: t[0]):
            outline = (str(k) + ':=' + str(v) + '\n').encode('ascii')
            filehandle.write(outline)

        # Write the closing extra newline
        filehandle.write(b'\n')

        # If a single file desired, write data
        if not separate_header:
            _write_data(data, filehandle, options)

    # If separate header desired, write data to different file
    if separate_header:
        with open(datafilename, 'wb') as datafilehandle:
            _write_data(data, datafilehandle, options)
    
    return filename;
Esempio n. 6
0
def writeData(filename,
              data,
              options={},
              separateHeader=False,
              x=all,
              y=all,
              z=all):
    """Write data to nrrd file
    
    Arguments:
        filename (str): file name as regular expression
        data (array): image data
        options (dict): options dictionary
        separateHeader (bool): write a separate header file
    
    Returns:
        str: nrrd output file name

    To sample data use `options['spacings'] = [s1, s2, s3]` for
    3d data with sampling deltas `s1`, `s2`, and `s3` in each dimension.
    """

    data = io.dataToRange(data, x=x, y=y, z=z)

    # Infer a number of fields from the ndarray and ignore values
    # in the options dictionary.
    options['type'] = _TYPEMAP_NUMPY2NRRD[data.dtype.str[1:]]
    if data.dtype.itemsize > 1:
        options['endian'] = _NUMPY2NRRD_ENDIAN_MAP[data.dtype.str[:1]]
    # if 'space' is specified 'space dimension' can not. See http://teem.sourceforge.net/nrrd/format.html#space
    if 'space' in options.keys() and 'space dimension' in options.keys():
        del options['space dimension']
    options['dimension'] = data.ndim
    dsize = list(data.shape)
    #dsize[0:2] = [dsize[1], dsize[0]];
    options['sizes'] = dsize

    # The default encoding is 'gzip'
    if 'encoding' not in options:
        options['encoding'] = 'gzip'

    # A bit of magic in handling options here.
    # If *.nhdr filename provided, this overrides `separate_header=False`
    # If *.nrrd filename provided AND separate_header=True, separate files
    #   written.
    # For all other cases, header & data written to same file.
    if filename[-5:] == '.nhdr':
        separate_header = True
        if 'data file' not in options:
            datafilename = filename[:-4] + str('raw')
            if options['encoding'] == 'gzip':
                datafilename += '.gz'
            options['data file'] = datafilename
        else:
            datafilename = options['data file']
    elif filename[-5:] == '.nrrd' and separate_header:
        separate_header = True
        datafilename = filename
        filename = filename[:-4] + str('nhdr')
    else:
        # Write header & data as one file
        datafilename = filename
        separate_header = False

    with open(filename, 'wb') as filehandle:
        filehandle.write(b'NRRD0005\n')
        filehandle.write(b'# This NRRD file was generated by pynrrd\n')
        filehandle.write(
            b'# on ' +
            datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S').encode('ascii') +
            b'(GMT).\n')
        filehandle.write(b'# Complete NRRD file format specification at:\n')
        filehandle.write(b'# http://teem.sourceforge.net/nrrd/format.html\n')

        # Write the fields in order, this ignores fields not in _NRRD_FIELD_ORDER
        for field in _NRRD_FIELD_ORDER:
            if field in options:
                outline = (field + ': ' +
                           _NRRD_FIELD_FORMATTERS[field](options[field]) +
                           '\n').encode('ascii')
                filehandle.write(outline)
        d = options.get('keyvaluepairs', {})
        for (k, v) in sorted(d.items(), key=lambda t: t[0]):
            outline = (str(k) + ':=' + str(v) + '\n').encode('ascii')
            filehandle.write(outline)

        # Write the closing extra newline
        filehandle.write(b'\n')

        # If a single file desired, write data
        if not separate_header:
            _write_data(data, filehandle, options)

    # If separate header desired, write data to different file
    if separate_header:
        with open(datafilename, 'wb') as datafilehandle:
            _write_data(data, datafilehandle, options)

    return filename