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
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)
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)
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)
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)
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)