Exemple #1
0
 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
Exemple #2
0
 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"
Exemple #3
0
 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)},
     )
Exemple #4
0
 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()
Exemple #5
0
 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