Esempio n. 1
0
def segment_morphsnakes(img,
                        centers,
                        init_center=True,
                        smoothing=5,
                        lambdas=(3, 3),
                        bb_dist=INIT_MASK_BORDER):
    """ segmentation using morphological snakes with some parameters

    :param ndarray img: input image / segmentation
    :param [[int, int]] centers: position of centres / seeds
    :param bool init_center:
    :param int smoothing:
    :param [int, int] lambdas:
    :param float bb_dist:
    :return (ndarray, [[int, int]]): resulting segmentation, updated centres
    """
    logging.debug('segment: morph-snakes...')
    if img.ndim == 3:
        img = img[:, :, 0]
    if init_center:
        _, mask, _ = create_circle_center(img.shape[:2], centers, radius=15)
    else:
        mask = np.zeros_like(img, dtype=int)
        mask[bb_dist:-bb_dist, bb_dist:-bb_dist] = 1
    # Morphological ACWE. Initialization of the level-set.
    params = dict(smoothing=smoothing, lambda1=lambdas[0], lambda2=lambdas[1])
    ms = multi_snakes.MultiMorphSnakes(img, mask, morphsnakes.MorphACWE,
                                       params)

    diag = np.sqrt(img.shape[0]**2 + img.shape[1]**2)
    ms.run(int(diag / 2.))
    segm = ms.levelset
    return segm, centers, None
Esempio n. 2
0
def test_multi_lakes():
    logging.info('running: test_multi_lakes...')
    # Load the image.
    imgcolor = plt.imread(PATH_IMG_LAKES) / 255.
    img = rgb2gray(imgcolor)

    # MorphACWE does not need g(I)

    # Morphological ACWE. Initialization of the level-set.
    mask = np.zeros(img.shape, dtype=int)
    mask[circle_levelset(img.shape, (50, 100), 25) == 1] = 1
    mask[circle_levelset(img.shape, (150, 150), 25) == 1] = 2
    mask[circle_levelset(img.shape, (120, 220), 15) == 1] = 3
    mask[circle_levelset(img.shape, (80, 250), 15) == 1] = 4

    ms = multi_ms.MultiMorphSnakes(img, mask, MorphACWE,
                                   dict(smoothing=3, lambda1=1, lambda2=1))

    # Visual evolution.
    fig = plt.figure()
    evolve_visual(ms, fig, num_iters=200, background=imgcolor)
    assert os.path.exists(PATH_OUTPUT)
    fig.savefig(os.path.join(PATH_OUTPUT, 'cmorphsnakes_multi_lakes.png'))
    plt.close(fig)