Esempio n. 1
0
    def step_last(self):
        # Assign attributes to local variables for convenience.
        u = self._u
        mask = thin(
            find_boundaries(gvoronoi(label(u, connectivity=1)), mode='inner'))

        if u is None:
            raise ValueError(
                "the levelset function is not set (use set_levelset)")

        data = self.data

        # Determine c0 and c1.
        inside = u > 0
        outside = u <= 0
        c0 = data[outside].sum() / float(outside.sum())
        c1 = data[inside].sum() / float(inside.sum())

        # Image attachment.
        dres = np.array(np.gradient(u))
        abs_dres = np.abs(dres).sum(0)
        aux = abs_dres * (self.lambda1 * (data - c1)**2 - self.lambda2 *
                          (data - c0)**2)

        res = np.copy(u)
        res[aux < 0] = 1
        res[aux > 0] = 0

        # Smoothing.
        for i in range(self.smoothing):
            res = curvop(res)
        res[mask] = 0
        self._u = res
Esempio n. 2
0
def levelset_geo_separete(img,
                          labels,
                          niter=10,
                          prop=-1,
                          advec=-0.5,
                          curve=-0.5):
    seg = sitk.GetImageFromArray((labels > 0).astype(np.uint8))
    init_ls = sitk.SignedMaurerDistanceMap(seg,
                                           insideIsPositive=True,
                                           useImageSpacing=True)

    mask = find_boundaries(gvoronoi(label(labels, connectivity=1)),
                           mode='inner')
    img1 = img.copy()
    img1[mask] = 0

    img_T1 = sitk.GetImageFromArray(img1)
    lsFilter = sitk.GeodesicActiveContourLevelSetImageFilter()
    lsFilter.SetMaximumRMSError(0.02)
    lsFilter.SetNumberOfIterations(niter)
    lsFilter.SetAdvectionScaling(advec)
    lsFilter.SetCurvatureScaling(curve)
    lsFilter.SetPropagationScaling(prop)
    # lsFilter.ReverseExpansionDirectionOn()

    ls = lsFilter.Execute(init_ls, sitk.Cast(img_T1, sitk.sitkFloat32))
    return label(sitk.GetArrayFromImage(ls) > 0, connectivity=1)
Esempio n. 3
0
def test_gvoronoi():
    labeled = np.zeros((128,128))
    labeled[0,0] = 1
    labeled[-1,-1] = 2
    regions = gvoronoi(labeled)
    Y,X = np.where(regions == 1)
    assert np.all(Y+X < 128)
Esempio n. 4
0
def test_gvoronoi():
    labeled = np.zeros((128, 128))
    labeled[0, 0] = 1
    labeled[-1, -1] = 2
    regions = gvoronoi(labeled)
    Y, X = np.where(regions == 1)
    assert np.all(Y + X < 128)
Esempio n. 5
0
def test_compare_w_scipy():
    np.random.seed(2322)
    for i in range(8):
        labeled = np.zeros((128,128))
        for p in range(16):
            y = np.random.randint(128)
            x = np.random.randint(128)
            labeled[y,x] = p+1
        sp = scipy_gvoronoi(labeled)
        mh = gvoronoi(labeled)
        assert np.all(sp == mh)
Esempio n. 6
0
def test_compare_w_scipy():
    np.random.seed(2322)
    for i in xrange(8):
        labeled = np.zeros((128, 128))
        for p in xrange(16):
            y = np.random.randint(128)
            x = np.random.randint(128)
            labeled[y, x] = p + 1
        sp = scipy_gvoronoi(labeled)
        mh = gvoronoi(labeled)
        assert np.all(sp == mh)