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)
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)
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.')
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
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
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
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
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))
def test_nibabel_3d(self): data = image_loader.load_image_obj(CASE_NIBABEL_3D).get_data() self.assertAllClose(data.shape, (256, 168, 256))
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)