Exemplo n.º 1
0
def test_croptobbox():
    X, Y = np.meshgrid(np.arange(16) - 8, np.arange(16) - 8)
    ball = ((X**2 + Y**2) < 32).astype(np.uint8)
    assert mahotas.croptobbox(ball).sum() == ball.sum()
    assert mahotas.croptobbox(ball, border=2).sum() == ball.sum()
    assert mahotas.croptobbox(ball, border=256).sum() == ball.sum()
    assert mahotas.croptobbox(ball, border=256).size == ball.size
    assert mahotas.croptobbox(ball.T).sum() == ball.sum()

    assert mahotas.croptobbox(ball[::2]).sum() == ball[::2].sum()
    assert mahotas.croptobbox(ball[::2].T).sum() == ball[::2].sum()
    assert mahotas.croptobbox(ball.T, border=2).sum() == ball.sum()
    assert mahotas.croptobbox(ball.T, border=256).sum() == ball.sum()
    assert mahotas.croptobbox(ball.T, border=256).size == ball.size
Exemplo n.º 2
0
def test_croptobbox():
    X,Y = np.meshgrid(np.arange(16)-8,np.arange(16)-8)
    ball = ((X**2+Y**2) < 32).astype(np.uint8)
    assert mahotas.croptobbox(ball).sum() == ball.sum()
    assert mahotas.croptobbox(ball,border=2).sum() == ball.sum()
    assert mahotas.croptobbox(ball,border=256).sum() == ball.sum()
    assert mahotas.croptobbox(ball,border=256).size == ball.size
    assert mahotas.croptobbox(ball.T).sum() == ball.sum()

    assert mahotas.croptobbox(ball[::2]).sum() == ball[::2].sum()
    assert mahotas.croptobbox(ball[::2].T).sum() == ball[::2].sum()
    assert mahotas.croptobbox(ball.T, border=2).sum() == ball.sum()
    assert mahotas.croptobbox(ball.T, border=256).sum() == ball.sum()
    assert mahotas.croptobbox(ball.T, border=256).size == ball.size
Exemplo n.º 3
0
    def view_labels(array, labels, crop=True, large=True, return_it=False):

        if type(labels) != type(list()):
            labels = [labels]

        out = np.zeros(array.shape)

        for l in labels:

            l_arr = Util.threshold(array, l)
            out[l_arr == 1] = out.max() + 1

        if crop:
            out = mh.croptobbox(out)

        if large:
            figsize = (10, 10)
        else:
            figsize = (3, 3)

        if return_it:
            return out

        fig = plt.figure(figsize=figsize)

        plt.imshow(out)
Exemplo n.º 4
0
    def view(array,
             color=True,
             large=False,
             crop=False,
             text=None,
             no_axis=True,
             file=''):

        if large:
            figsize = (10, 10)
        else:
            figsize = (3, 3)

        fig = plt.figure(figsize=figsize)

        if crop:
            array = mh.croptobbox(array)

        if text:
            text = '\n\n\n' + str(text)
            fig.text(0, 1, text)

        if no_axis:
            plt.axis('off')

        if color:
            plt.imshow(Util.colorize(array), picker=True)
        else:
            plt.imshow(array, cmap='gray', picker=True)

        if file != '':
            plt.savefig(file)
Exemplo n.º 5
0
 def _get_grid_img(self, crop_img, elem_contour):
     cnt = Contour(elem_contour)
     halfbox = cnt.shrinkbox(100).astype("f")
     square = self._square_coordinates(cnt.side)
     trans = cv2.getPerspectiveTransform(halfbox, square)
     box = cv2.warpPerspective(crop_img, trans, (cnt.side, cnt.side))
     _, thresh = cv2.threshold(box, 127, 255, 0)
     binary = pm.binary(thresh)
     box = binary.astype(int) * 255
     box = pm.edgeoff(box)
     box = mh.croptobbox(box)
     return box
Exemplo n.º 6
0
    def view(array, color=True, large=False, crop=False, text=None):

        if large:
            figsize = (10, 10)
        else:
            figsize = (3, 3)

        fig = plt.figure(figsize=figsize)

        if crop:
            array = mh.croptobbox(array)

        if text:
            text = '\n\n\n' + str(text)
            fig.text(0, 1, text)

        if color:
            plt.imshow(Util.colorize(array), picker=True)
        else:
            plt.imshow(array, cmap='gray', picker=True)
Exemplo n.º 7
0
    def run_merge_test(cnn,
                       bbox=[0, 1024, 0, 1024],
                       data='gt',
                       slices=[70, 71, 72, 73, 74],
                       min_pixels=1000,
                       N=20,
                       oversampling=False,
                       keep_zeros=True,
                       verbose=False):

        if data == 'rhoana':
            print 'not implemented yet'
            return [], []

        print '-' * 80
        print '-' * 80
        print 'New Experiment:'
        print '  Data:', data
        print '  Slices:', slices
        print '  No. splits for borders:', N
        print '  Keep zeros in segmentation:', keep_zeros

        # global_vis = []
        global_vi_diffs = []
        # global_surenesses = []
        # global_merge_pairs = []

        for s in slices:

            if verbose:
                print '-' * 80
                print 'Working on slice', s

            # load slice
            input_image, input_prob, input_gold, input_rhoana = Util.read_section(
                s, keep_zeros=keep_zeros)

            # apply bbox
            input_image = input_image[bbox[0]:bbox[1], bbox[2]:bbox[3]]
            input_prob = input_prob[bbox[0]:bbox[1], bbox[2]:bbox[3]]
            input_gold = input_gold[bbox[0]:bbox[1], bbox[2]:bbox[3]]
            input_rhoana = input_rhoana[bbox[0]:bbox[1], bbox[2]:bbox[3]]

            framed_gold = Util.frame_image(input_gold, shape=(200, 200))

            hist = Util.get_histogram(framed_gold.astype(np.uint64))
            labels = range(len(hist))
            np.random.shuffle(labels)

            slice_vi_diffs = []

            for l in labels:

                if l == 0:
                    continue

                if len(framed_gold[framed_gold == l]) < min_pixels:
                    continue

                neighbors = Util.grab_neighbors(framed_gold, l)
                np.random.shuffle(neighbors)

                good_neighbors = []

                for n in neighbors:

                    if n == 0:
                        continue

                    if len(framed_gold[framed_gold == n]) < min_pixels:
                        continue

                    good_neighbors.append(n)

                if len(good_neighbors) > 0:

                    for n in good_neighbors:

                        # print 'merging', l, n

                        before_merge_error = np.zeros(framed_gold.shape)
                        before_merge_error[framed_gold == l] = 1
                        before_merge_error[framed_gold == n] = 2
                        before_merge_error = mh.croptobbox(before_merge_error)

                        cropped_image, cropped_prob, cropped_segmentation, cropped_binary, bbox, real_border = Uglify.merge_label(
                            input_image,
                            input_prob,
                            framed_gold,
                            l,
                            n,
                            crop=True)

                        vi_before = Util.vi(
                            before_merge_error[10:-10,
                                               10:-10].astype(np.uint8),
                            mh.croptobbox(cropped_binary)[10:-10,
                                                          10:-10].astype(
                                                              np.uint8))

                        # print 'VI after merge error:', vi_before

                        borders, best_border_image, result, result_no_border, results_no_border, predictions = Fixer.fix_single_merge(
                            cnn,
                            cropped_image,
                            cropped_prob,
                            cropped_binary,
                            real_border=real_border,
                            N=N,
                            erode=True,
                            oversampling=False)

                        if result_no_border.shape[0] == 0:
                            continue

                        if best_border_image.max() == 0:
                            # print 'no solution'
                            continue

            #             if before_merge_error.shape[0] != result_no_border.shape[0] or before_merge_error.shape[1] != result_no_border.shape[1]:
            #               result_no_border = np.resize(result_no_border, before_merge_error.shape)

            #             if before_merge_error.size != mh.croptobbox(r)

            #             compare_result = np.zeros(before_merge_error.shape, dtype=np.uint8)
            #             compare_result[:] = result_no_border[101:-101, 101:-101][0:before_merge_error.shape[0], 0:before_merge_error.shape[1]]

                        best_vi = np.inf
                        vi_diffs = []

                        # sorted_predictions = sorted(predictions)

                        for r in results_no_border:

                            if r.shape[0] == 0:
                                continue

                            r = r[100:-100, 100:-100]

                            result_no_border_center = (r.shape[0] / 2,
                                                       r.shape[1] / 2)
                            before_merge_center = (
                                before_merge_error.shape[0] / 2 - 10,
                                before_merge_error.shape[1] / 2 - 10)

                            r = r[result_no_border_center[0] -
                                  before_merge_center[0]:
                                  result_no_border_center[0] +
                                  before_merge_center[0],
                                  result_no_border_center[1] -
                                  before_merge_center[1]:
                                  result_no_border_center[1] +
                                  before_merge_center[1]]

                            b = before_merge_error[result_no_border_center[0] -
                                                   before_merge_center[0]:
                                                   result_no_border_center[0] +
                                                   before_merge_center[0],
                                                   result_no_border_center[1] -
                                                   before_merge_center[1]:
                                                   result_no_border_center[1] +
                                                   before_merge_center[1]]

                            vi_after_fixing = Util.vi(b.astype(np.uint8),
                                                      r.astype(np.uint8))

                            vi_diffs.append(vi_before - vi_after_fixing)

                        # now we have vi_diffs for this one merge error
                        slice_vi_diffs.append((vi_diffs, predictions))

            global_vi_diffs.append(slice_vi_diffs)

        vi_correction_bins = [0, 0, 0, 0, 0]
        bin_counts = [0, 0, 0, 0, 0]

        for s in global_vi_diffs:
            for merge_errors in s:
                vi_diff_per_error = merge_errors[0]
                predictions_per_error = merge_errors[1]

                # sort by prediction
                found_borders = sorted(zip(vi_diff_per_error,
                                           predictions_per_error),
                                       key=lambda x: x[1])
                for i in range(5):
                    if len(found_borders) > i:
                        for j in range(i, len(found_borders)):
                            print i, j, len(vi_correction_bins), len(
                                found_borders)
                            vi_correction_bins[j] += found_borders[j][0]
                            bin_counts[j] += 1

        for i in range(5):
            vi_correction_bins[i] /= bin_counts[i]

        return global_vi_diffs, vi_correction_bins
Exemplo n.º 8
0
def test_croptobbox_3d():
    YXZ = np.indices((32, 32, 64), float)
    YXZ -= 8
    Y, X, Z = YXZ
    ball = ((X**2 + Y**2 + Z**2) < 64).astype(np.uint8)
    assert np.sum(ball) == np.sum(mh.croptobbox(ball))
 def croppBoundingBox(self):
     # Returns a version of img cropped to the image’s bounding box.
     # http://mahotas.readthedocs.io/en/latest/api.html#mahotas.croptobbox
     return mh.croptobbox(self.imgArray, 0)
Exemplo n.º 10
0
def test_croptobbox_3d():
    YXZ = np.indices((32,32,64), float)
    YXZ -= 8
    Y,X,Z = YXZ
    ball = ((X**2+Y**2+Z**2) < 64).astype(np.uint8)
    assert np.sum(ball) == np.sum(mh.croptobbox(ball))