Beispiel #1
0
    def find_merge_error(self, image, prob, segmentation, label):
        '''
    Find a merge error in a segment.

    This generates 50 borders within the segment and ranks them
    using the CNN.

    Returns
      The corrected segment.
        and
      Rank (1-p) for the found merge error.
        1 If confident
        ..
        0 If uncertain


        or

      -1 If there was a problem.
    '''

        # create binary mask
        binary = Util.threshold(segmentation, label)

        # here potential boundaries are generated and ranked by the CNN
        results = Legacy.fix_single_merge(self._cnn,
                                          image,
                                          prob,
                                          binary,
                                          N=50,
                                          erode=True,
                                          invert=True,
                                          dilate=True,
                                          border_seeds=True,
                                          oversampling=False)

        if len(results) > 0:

            # sort the prediction/border tuples (prediction, border)-tupels
            sorted_pred = sorted(results, key=lambda x: x[0])
            lowest_rank = sorted_pred[0][0]
            border = sorted_pred[0][1]

            corrected = Legacy.correct_merge(segmentation, label, border)

            return corrected, 1. - lowest_rank

        else:

            return -1