def _read_data_raw_full(self, fileobj=None, lock=None, mmap=None): """Read the full data from disk Parameters ---------- fileobj : Opener, default=`self.fileobj('image')` lock : Lock, default=`self._lock['image']` mmap : bool, default=`self._image.dataobj._mmap` Returns ------- dat : np.ndarray """ if fileobj is None: with self.fileobj('image') as fileobj: return self._read_data_raw_full(fileobj, lock) if lock is None: with self._lock['image'] as lock: return self._read_data_raw_full(fileobj, lock) if mmap is None: mmap = self._image.dataobj._mmap return array_from_file(self._shape, self.dtype, fileobj, offset=self._image.dataobj._offset, order=self._image.dataobj.order, mmap=mmap)
def raw_data_from_fileobj(self, frame=0): dtype = self._get_data_dtype(frame) if not self._header.endianness is native_code: dtype=dtype.newbyteorder(self._header.endianness) shape = self.get_shape(frame) offset = self._get_frame_offset(frame) fid_obj = self.fileobj raw_data = array_from_file(shape, dtype, fid_obj, offset=offset) ## put data into neurologic orientation ### ASSUME Patient orientation is HFS as patient orientation ### is not always set in header raw_data = raw_data[::-1,::-1,::-1] return raw_data
def data_from_fileobj(self, fileobj): ''' Read data array from `fileobj` Parameters ---------- fileobj : file-like Must be open, and implement ``read`` and ``seek`` methods Returns ------- arr : ndarray data array ''' dtype = self.get_data_dtype() shape = self.get_data_shape() offset = self.get_data_offset() return array_from_file(shape, dtype, fileobj, offset)
def get_volume(self, volume_idx): """Return a specified volume belonging to a 4dim image. This can be useful when the image is large and we want to avoid loading the whole image into memory. """ from nibabel.volumeutils import allopen, array_from_file def get_fileobj(nibimage): fileobj = allopen(nibimage.get_filename()) return fileobj dtype = self._base.get_data_dtype() shape = self._base.get_header().get_data_shape()[:-1] bytes_per_volume = np.prod(shape) * dtype.itemsize offset = self._base.get_header().get_data_offset() + (volume_idx * bytes_per_volume) data = array_from_file(shape, dtype, get_fileobj(self._base), offset) return data