Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()