def step_segmentation(self, operation: SegmentationProfile, children: List[CalculationTree]): """ Perform segmentation and iterate over ``children`` nodes :param SegmentationProfile operation: Specification of segmentation operation :param List[CalculationTree] children: list of nodes to iterate over after perform segmentation """ segmentation_class = analysis_algorithm_dict.get( operation.algorithm, None) if segmentation_class is None: raise ValueError( f"Segmentation class {operation.algorithm} do not found") segmentation_algorithm: RestartableAlgorithm = segmentation_class() segmentation_algorithm.set_image(self.image) segmentation_algorithm.set_mask(self.mask) segmentation_algorithm.set_parameters(**operation.values) result = segmentation_algorithm.calculation_run(report_empty_fun) backup_data = self.segmentation, self.additional_layers, self.algorithm_parameters self.segmentation = result.segmentation self.additional_layers = result.additional_layers self.algorithm_parameters = { "algorithm_name": operation.algorithm, "values": operation.values } self.iterate_over(children) self.segmentation, self.additional_layers, self.algorithm_parameters = backup_data
def step_measurement(self, operation: MeasurementCalculate): """ Calculate measurement defined in current operation. :param MeasurementCalculate operation: definition of measurement to calculate """ channel = operation.channel if channel == -1: segmentation_class: Type[ SegmentationAlgorithm] = analysis_algorithm_dict.get( self.algorithm_parameters["algorithm_name"], None) if segmentation_class is None: raise ValueError( f"Segmentation class {self.algorithm_parameters['algorithm_name']} do not found" ) channel = self.algorithm_parameters["values"][ segmentation_class.get_channel_parameter_name()] image_channel = self.image.get_channel(channel) # FIXME use additional information measurement = operation.statistic_profile.calculate( image_channel, self.segmentation, self.mask, self.image.spacing, operation.units, ) self.measurement.append(measurement)
def step_measurement(self, operation: MeasurementCalculate): """ Calculate measurement defined in current operation. :param MeasurementCalculate operation: definition of measurement to calculate """ channel = operation.channel if channel == -1: segmentation_class: Type[ SegmentationAlgorithm] = analysis_algorithm_dict.get( self.algorithm_parameters["algorithm_name"], None) if segmentation_class is None: # pragma: no cover raise ValueError( f"Segmentation class {self.algorithm_parameters['algorithm_name']} do not found" ) channel = self.algorithm_parameters["values"][ segmentation_class.get_channel_parameter_name()] # FIXME use additional information old_mask = self.image.mask self.image.set_mask(self.mask) measurement = operation.measurement_profile.calculate( self.image, channel, self.roi_info, operation.units, ) self.measurement.append(measurement) self.image.set_mask(old_mask)