def test_save_segmentation(self, tmpdir, data_test_dir): seg = LoadROIImage.load( [os.path.join(data_test_dir, "test_nucleus_1_1.seg")], metadata={"default_spacing": (1, 1, 1)} ) SaveROI.save(os.path.join(tmpdir, "segmentation.seg"), seg, {"relative_path": False}) assert os.path.exists(os.path.join(tmpdir, "segmentation.seg")) os.makedirs(os.path.join(tmpdir, "seg_save")) save_components( seg.image, seg.selected_components, os.path.join(tmpdir, "seg_save"), seg.roi_info, SaveComponents.get_default_values(), ) assert os.path.isdir(os.path.join(tmpdir, "seg_save")) assert len(glob(os.path.join(tmpdir, "seg_save", "*"))) == 4 seg2 = LoadROI.load([os.path.join(tmpdir, "segmentation.seg")]) assert seg2 is not None save_components( seg.image, [], os.path.join(tmpdir, "seg_save2"), seg.roi_info, SaveComponents.get_default_values(), ) assert os.path.isdir(os.path.join(tmpdir, "seg_save2")) assert len(glob(os.path.join(tmpdir, "seg_save2", "*"))) == 8
def test_load_seg_with_image(self, data_test_dir): seg = LoadROIImage.load( [os.path.join(data_test_dir, "test_nucleus_1_1.seg")], metadata={"default_spacing": (1, 1, 1)} ) assert isinstance(seg.image, Image) assert seg.selected_components == [1, 3] assert isinstance(seg.roi, np.ndarray) seg.image.fit_array_to_image(seg.roi) assert os.path.basename(seg.image.file_path) == "test_nucleus.tif"
def test_save_segmentation_without_image(self, tmpdir, data_test_dir): seg = LoadROIImage.load( [os.path.join(data_test_dir, "test_nucleus_1_1.seg")], metadata={"default_spacing": (1, 1, 1)} ) seg_clean = dataclasses.replace(seg, image=None, roi=reduce_array(seg.roi)) SaveROI.save(os.path.join(tmpdir, "segmentation.seg"), seg_clean, {"relative_path": False}) SaveROI.save( os.path.join(tmpdir, "segmentation1.seg"), seg_clean, {"relative_path": False, "spacing": (210 * 10 ** -6, 70 * 10 ** -6, 70 * 10 ** -6)}, )
def run_calculation(self): while not self.queue.empty(): task: BatchTask = self.queue.get() if isinstance(task.data, str): file_path = task.data if path.splitext(task.data)[1] == ".seg": project_tuple = LoadROIImage.load([task.data]) else: project_tuple = LoadStackImage.load([task.data]) elif isinstance(task.data, MaskProjectTuple): project_tuple: MaskProjectTuple = task.data file_path = project_tuple.image.file_path else: continue try: name = path.basename(file_path) blank = get_mask(project_tuple.roi, project_tuple.mask, project_tuple.selected_components) algorithm: StackAlgorithm = mask_algorithm_dict[task.parameters.algorithm]() algorithm.set_image(project_tuple.image) algorithm.set_mask(blank) algorithm.set_parameters(**task.parameters.values) if isinstance(task.save_prefix, tuple): self.range_signal.emit(0, algorithm.get_steps_num() + 1) else: self.range_signal.emit(0, algorithm.get_steps_num()) # noinspection PyTypeChecker segmentation = algorithm.calculation_run(partial(self.progress_info, name)) state2 = StackSettings.transform_state( project_tuple, segmentation.roi_info, defaultdict(lambda: segmentation.parameters), [] ) if isinstance(task.save_prefix, tuple): self.progress_info(name, "saving", algorithm.get_steps_num()) name = path.splitext(path.basename(file_path))[0] + ".seg" re_end = re.compile(r"(.*_version)(\d+)\.seg$") while path.exists(path.join(task.save_prefix[0], name)): match = re_end.match(name) if match: num = int(match.group(2)) + 1 name = match.group(1) + str(num) + ".seg" else: name = path.splitext(path.basename(file_path))[0] + "_version1.seg" SaveROI.save(path.join(task.save_prefix[0], name), state2, parameters=task.save_prefix[1]) else: self.multiple_result.emit(state2) except Exception as e: # pylint: disable=W0703 self.error_signal.emit(f"Exception occurred during proceed {file_path}. Exception info {e}") self.index += 1 self.index = 0 self.execution_done.emit()
def test_load_segmentation_image(self, data_test_dir, stack_settings): pi = LoadROIImage.load( [os.path.join(data_test_dir, "test_nucleus.seg")]) assert isinstance(pi, MaskProjectTuple) stack_settings.set_project_info(pi) assert pi.image is not None