Пример #1
0
    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
Пример #2
0
    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)
Пример #3
0
    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)