Example #1
0
    def test_all_data(self):
        folder = 'testing_data'
        all_files = [
            os.path.join(folder, f)
            for f in os.listdir(folder)
            if os.path.isfile(os.path.join(folder, f))]

        for f in all_files:
            if f.endswith('nii.gz'):
                loaded_shape = image_loader.load_image_obj(f).get_data().shape
                print(loaded_shape)
                self.assertGreaterEqual(5, len(loaded_shape))
            else:
                with self.assertRaisesRegexp(ValueError, ''):
                    image_loader.load_image_obj(f)
Example #2
0
    def test_all_data(self):
        folder = 'testing_data'
        all_files = [
            os.path.join(folder, f) for f in os.listdir(folder)
            if os.path.isfile(os.path.join(folder, f))
        ]

        for f in all_files:
            if f.endswith('nii.gz'):
                loaded_shape = image_loader.load_image_obj(f).get_data().shape
                print(loaded_shape)
                self.assertGreaterEqual(5, len(loaded_shape))
            else:
                with self.assertRaisesRegexp(ValueError, ''):
                    image_loader.load_image_obj(f)
Example #3
0
def infer_ndims_from_file(file_path, loader=None):
    # todo: loader specified by the user is not used for ndims infer.
    image_header = load_image_obj(file_path, loader).header
    try:
        return int(image_header['dim'][0])
    except TypeError:
        pass
    try:
        return int(len(image_header.get_data_shape()))
    except (TypeError, AttributeError):
        pass

    tf.logging.fatal('unsupported file header in: {}'.format(file_path))
    raise IOError('could not get ndims from file header, please '
                  'consider convert image files to NifTI format.')
Example #4
0
def infer_ndims_from_file(file_path, loader=None):
    # todo: loader specified by the user is not used for ndims infer.
    image_header = load_image_obj(file_path, loader).header
    try:
        return int(image_header['dim'][0])
    except TypeError:
        pass
    try:
        return int(len(image_header.get_data_shape()))
    except (TypeError, AttributeError):
        pass

    tf.logging.fatal('unsupported file header in: {}'.format(file_path))
    raise IOError('could not get ndims from file header, please '
                  'consider convert image files to NifTI format.')
Example #5
0
    def dtype(self):
        """
        data type property of the input images.

        :return: a tuple of input image data types
            ``len(self.dtype) == len(self.file_path)``
        """
        if not self._dtype:
            try:
                self._dtype = tuple(
                    load_image_obj(_file, _loader).header.get_data_dtype()
                    for _file, _loader in zip(self.file_path, self.loader))
            except (IOError, TypeError, AttributeError):
                tf.logging.warning('could not decide image data type')
                self._dtype = (np.dtype(np.float32),) * len(self.file_path)
        return self._dtype
Example #6
0
    def dtype(self):
        """
        data type property of the input images.

        :return: a tuple of input image data types
            ``len(self.dtype) == len(self.file_path)``
        """
        if not self._dtype:
            try:
                self._dtype = tuple(
                    load_image_obj(_file, _loader).header.get_data_dtype()
                    for _file, _loader in zip(self.file_path, self.loader))
            except (IOError, TypeError, AttributeError):
                tf.logging.warning('could not decide image data type')
                self._dtype = (np.dtype(np.float32),) * len(self.file_path)
        return self._dtype
Example #7
0
    def _load_header(self):
        """
        read original header for pixdim and affine info

        :return:
        """
        self._original_pixdim = []
        self._original_affine = []
        for file_i, loader_i in zip(self.file_path, self.loader):
            image_obj = load_image_obj(file_i, loader_i)
            try:
                misc.correct_image_if_necessary(image_obj)
                self._original_pixdim.append(image_obj.header.get_zooms()[:3])
                self._original_affine.append(image_obj.affine)
            except (TypeError, IndexError, AttributeError):
                tf.logging.fatal('could not read header from %s', file_i)
                raise ValueError
Example #8
0
    def _load_header(self):
        """
        read original header for pixdim and affine info

        :return:
        """
        self._original_pixdim = []
        self._original_affine = []
        for file_i, loader_i in zip(self.file_path, self.loader):
            image_obj = load_image_obj(file_i, loader_i)
            try:
                misc.correct_image_if_necessary(image_obj)
                self._original_pixdim.append(image_obj.header.get_zooms()[:3])
                self._original_affine.append(image_obj.affine)
            except (TypeError, IndexError, AttributeError):
                tf.logging.fatal('could not read header from %s', file_i)
                raise ValueError
Example #9
0
def infer_ndims_from_file(file_path, loader=None):
    """
    Get spatial rank of the image file.

    :param file_path:
    :param loader:
    :return:
    """
    image_header = load_image_obj(file_path, loader).header
    try:
        return int(image_header['dim'][0])
    except (TypeError, KeyError, IndexError):
        pass
    try:
        return int(len(image_header.get_data_shape()))
    except (TypeError, AttributeError):
        pass

    tf.logging.fatal('unsupported file header in: {}'.format(file_path))
    raise IOError('could not get ndims from file header, please '
                  'consider convert image files to NifTI format.')
    def shape(self):
        """
        This function read image shape info from the headers
        The lengths in the fifth dim of multiple images are summed
        as a multi-mod representation.
        The fourth dim corresponding to different time sequences
        is ignored.

        :return: a tuple of integers as image shape
        """
        if self._original_shape is None:
            try:
                self._original_shape = tuple(
                    load_image_obj(_file, _loader).header['dim'][1:6]
                    for _file, _loader in zip(self.file_path, self.loader))
            except (IOError, KeyError, AttributeError, IndexError):
                tf.logging.fatal('unknown image shape from header %s',
                                 self.file_path)
                raise ValueError
            try:
                non_modality_shapes = \
                    set([tuple(shape[:4].tolist())
                         for shape in self._original_shape])
                assert len(non_modality_shapes) == 1
            except (TypeError, IndexError, AssertionError):
                tf.logging.fatal(
                    "could not combining multimodal images: "
                    "shapes not consistent %s -- %s", self.file_path,
                    self._original_shape)
                raise ValueError
            n_modalities = \
                np.sum([int(shape[4]) for shape in self._original_shape])
            self._original_shape = non_modality_shapes.pop() + (n_modalities, )
            self._original_shape = \
                tuple([shape_i if shape_i > 0 else 1
                       for shape_i in self._original_shape])
        return self._original_shape
Example #11
0
    def shape(self):
        """
        This function read image shape info from the headers
        The lengths in the fifth dim of multiple images are summed
        as a multi-mod representation.
        The fourth dim corresponding to different time sequences
        is ignored.

        :return: a tuple of integers as image shape
        """
        if self._original_shape is None:
            try:
                self._original_shape = tuple(
                    load_image_obj(_file, _loader).header['dim'][1:6]
                    for _file, _loader in zip(self.file_path, self.loader))
            except (IOError, KeyError, AttributeError, IndexError):
                tf.logging.fatal(
                    'unknown image shape from header %s', self.file_path)
                raise ValueError
            try:
                non_modality_shapes = \
                    set([tuple(shape[:4].tolist())
                         for shape in self._original_shape])
                assert len(non_modality_shapes) == 1
            except (TypeError, IndexError, AssertionError):
                tf.logging.fatal("could not combining multimodal images: "
                                 "shapes not consistent %s -- %s",
                                 self.file_path, self._original_shape)
                raise ValueError
            n_modalities = \
                np.sum([int(shape[4]) for shape in self._original_shape])
            self._original_shape = non_modality_shapes.pop() + (n_modalities,)
            self._original_shape = \
                tuple([shape_i if shape_i > 0 else 1
                       for shape_i in self._original_shape])
        return self._original_shape
Example #12
0
 def load_2d_image(self, loader=None):
     data = image_loader.load_image_obj(CASE_LOGO_2D,
                                        loader=loader).get_data()
     self.assertAllClose(data.shape, (400, 677, 1, 1, 4))
Example #13
0
 def test_nibabel_3d(self):
     data = image_loader.load_image_obj(CASE_NIBABEL_3D).get_data()
     self.assertAllClose(data.shape, (256, 168, 256))
Example #14
0
 def _load_single_file(cls, file_path, loader, dtype=np.float32):
     image_obj = load_image_obj(file_path, loader)
     image_data = image_obj.get_data()  # new API: get_fdata()
     image_data = misc.expand_to_5d(image_data)
     return image_data.astype(dtype)
Example #15
0
 def load_2d_image(self, loader=None):
     data = image_loader.load_image_obj(CASE_LOGO_2D, loader=loader).get_data()
     self.assertAllClose(data.shape, (400, 677, 1, 1, 4))
Example #16
0
 def test_nibabel_3d(self):
     data = image_loader.load_image_obj(CASE_NIBABEL_3D).get_data()
     self.assertAllClose(data.shape, (256, 168, 256))
Example #17
0
 def _load_single_file(cls, file_path, loader, dtype=np.float32):
     image_obj = load_image_obj(file_path, loader)
     image_data = image_obj.get_data()  # new API: get_fdata()
     image_data = misc.expand_to_5d(image_data)
     return image_data.astype(dtype)