def load_image(self, filename, target_dtype, vrange): # bytes per pixel bytepix = self.bitpix / 8 numtype = datatype2dtype[self.datatype] byteoffset = 0 if target_dtype is not None and \ not range_exceeds(target_dtype, numtype): raise ValueError("the dynamic range of the desired datatype does "\ "not exceed that of the raw data") # need to cook tdim if vrange is set if self.tdim and vrange: vend = (vrange[1]<0 or vrange[1]>=self.tdim) \ and self.tdim-1 or vrange[1] vstart = (vrange[0] > vend) and vend or vrange[0] self.tdim = vend - vstart + 1 byteoffset = vstart * bytepix * np.product( (self.kdim, self.jdim, self.idim)) dims = self.tdim > 1 and (self.tdim, self.kdim, self.jdim, self.idim) \ or (self.kdim, self.jdim, self.idim) datasize = bytepix * np.product(dims) fp = file(filename, 'rb') fp.seek(byteoffset, 1) data = np.fromstring(fp.read(datasize), numtype).reshape(dims) if self.swapped: data = data.byteswap() if target_dtype is not None and target_dtype != numtype: if target_dtype not in integer_ranges.keys(): scale = self.scale_factor or 1.0 self.data = (data * scale).astype(target_dtype) else: self.data = data.astype(target_dtype) else: self.data = data fp.close()
def load_image(self, filename, target_dtype, vrange): # bytes per pixel bytepix = self.bitpix / 8 numtype = datatype2dtype[self.datatype] byteoffset = 0 if target_dtype is not None and not range_exceeds(target_dtype, numtype): raise ValueError("the dynamic range of the desired datatype does " "not exceed that of the raw data") # need to cook tdim if vrange is set if self.tdim and vrange: vend = (vrange[1] < 0 or vrange[1] >= self.tdim) and self.tdim - 1 or vrange[1] vstart = (vrange[0] > vend) and vend or vrange[0] self.tdim = vend - vstart + 1 byteoffset = vstart * bytepix * np.product((self.kdim, self.jdim, self.idim)) dims = self.tdim > 1 and (self.tdim, self.kdim, self.jdim, self.idim) or (self.kdim, self.jdim, self.idim) datasize = bytepix * np.product(dims) fp = file(filename, "rb") fp.seek(byteoffset, 1) data = np.fromstring(fp.read(datasize), numtype).reshape(dims) if self.swapped: data = data.byteswap() if target_dtype is not None and target_dtype != numtype: if target_dtype not in integer_ranges.keys(): scale = self.scale_factor or 1.0 self.data = (data * scale).astype(target_dtype) else: self.data = data.astype(target_dtype) else: self.data = data fp.close()
def load_data(self, filestem, target_dtype, vrange): bytepix = self.bitpix/8 numtype = datatype2dtype[self.datatype] byteoffset = 0 if target_dtype is not None and \ not range_exceeds(target_dtype, numtype): raise ValueError("the dynamic range of the desired datatype does "\ "not exceed that of the raw data") if self.filetype == 'single': fp = open(filestem+".nii", 'rb') fp.seek(self.vox_offset) else: fp = open(filestem+".img", 'rb') # need to cook tdim if vrange is set if self.tdim and vrange: vend = (vrange[1]<0 or vrange[1]>=self.tdim) \ and self.tdim-1 or vrange[1] vstart = (vrange[0] > vend) and vend or vrange[0] self.tdim = vend-vstart+1 byteoffset = vstart*bytepix*N.product((self.kdim, self.jdim,self.idim)) dims = self.tdim > 1 and (self.tdim, self.kdim, self.jdim, self.idim) \ or self.kdim > 1 and (self.kdim, self.jdim, self.idim) \ or (self.jdim, self.idim) datasize = bytepix * N.product(dims) fp.seek(byteoffset, 1) data = N.fromstring(fp.read(datasize), numtype).reshape(dims) if self.swapped: data = data.byteswap() if target_dtype is not None and target_dtype != numtype: if target_dtype not in integer_ranges.keys(): scaling = self.scl_slope or 1.0 yinter = self.scl_inter self.data = (data*scaling+yinter).astype(target_dtype) else: self.data = data.astype(target_dtype) else: self.data = data fp.close()