def main(): args = getArguments(getParser()) # prepare logger logger = Logger.getInstance() if args.debug: logger.setLevel(logging.DEBUG) elif args.verbose: logger.setLevel(logging.INFO) # loading input images (as image, header pairs) images = [] headers = [] for image_name in args.images: i, h = load(image_name) images.append(i) headers.append(h) # loading binary foreground masks if supplied, else create masks from threshold value if args.masks: masks = [load(mask_name)[0].astype(numpy.bool) for mask_name in args.masks] else: masks = [i > args.threshold for i in images] # if in application mode, load the supplied model and apply it to the images if args.lmodel: logger.info('Loading the model and transforming images...') with open(args.lmodel, 'r') as f: trained_model = pickle.load(f) if not isinstance(trained_model, IntensityRangeStandardization): raise ArgumentError('{} does not seem to be a valid pickled instance of an IntensityRangeStandardization object'.format(args.lmodel)) transformed_images = [trained_model.transform(i[m], surpress_mapping_check = args.ignore) for i, m in zip(images, masks)] # in in training mode, train the model, apply it to the images and save it else: logger.info('Training the average intensity model...') irs = IntensityRangeStandardization() trained_model, transformed_images = irs.train_transform([i[m] for i, m in zip(images, masks)], surpress_mapping_check = args.ignore) logger.info('Saving the trained model as {}...'.format(args.smodel)) with open(args.smodel, 'wb') as f: pickle.dump(trained_model, f) # save the transformed images if args.simages: logger.info('Saving intensity transformed images to {}...'.format(args.simages)) for ti, i, m, h, image_name in zip(transformed_images, images, masks, headers, args.images): i[m] = ti save(i, '{}/{}'.format(args.simages, image_name.split('/')[-1]), h, args.force) logger.info('Terminated.')
def test_Method(self): """Test the normal functioning of the method.""" # test training with good and bad images irs = IntensityRangeStandardization() irs.train(TestIntensityRangeStandardization.good_trainingset + [TestIntensityRangeStandardization.bad_image]) irs.transform(TestIntensityRangeStandardization.bad_image) # test equal methods irs = IntensityRangeStandardization() irs_ = irs.train(TestIntensityRangeStandardization.good_trainingset) self.assertEqual(irs, irs_) irs = IntensityRangeStandardization() irs.train(TestIntensityRangeStandardization.good_trainingset) timages = [] for i in TestIntensityRangeStandardization.good_trainingset: timages.append(irs.transform(i)) irs = IntensityRangeStandardization() irs_, timages_ = irs.train_transform(TestIntensityRangeStandardization.good_trainingset) self.assertEqual(irs, irs_, 'instance returned by transform() method is not the same as the once initialized') for ti, ti_ in zip(timages, timages_): numpy.testing.assert_allclose(ti, ti_, err_msg = 'train_transform() failed to produce the same results as transform()') # test pickling irs = IntensityRangeStandardization() irs_ = irs.train(TestIntensityRangeStandardization.good_trainingset) timages = [] for i in TestIntensityRangeStandardization.good_trainingset: timages.append(irs.transform(i)) with tempfile.TemporaryFile() as f: pickle.dump(irs, f) f.seek(0, 0) irs_ = pickle.load(f) timages_ = [] for i in TestIntensityRangeStandardization.good_trainingset: timages_.append(irs_.transform(i)) for ti, ti_ in zip(timages, timages_): numpy.testing.assert_allclose(ti, ti_, err_msg = 'pickling failed to preserve the instances model')