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
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
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);
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)
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;
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