Beispiel #1
0
    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)
Beispiel #2
0
 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
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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
Beispiel #6
0
    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