using PyPlot using NtToolBox # using Autoreload # arequire("NtToolBox") # include("NtToolBox/src/ndgrid.jl") n = 200 (Y, X) = meshgrid(collect(1:n), collect(1:n)); r = n/3.; c = [r, r] .+ 10; phi1 = sqrt((X .- c[1]).^2 + (Y .- c[2]).^2) - r; include("NtSolutions/segmentation_3_snakes_levelset/exo1.jl"); ## Insert your code here. figure(figsize = (10,5)) subplot(1,2,1) NtToolBox.plot_levelset(phi1) subplot(1,2,2) NtToolBox.plot_levelset(phi2) include("NtSolutions/segmentation_3_snakes_levelset/exo2.jl") ## Insert your code here. Tmax = 200; tau = .5; niter = Int(Tmax/tau); phi = copy(phi0); g0 = NtToolBox.Grad(phi, "sym", 2); d = max(eps().*ones(n, n), sqrt(sum(g0.^2, 3))); g = g0./cat(3, d[:, :], d[:, :]); K = - d.*NtToolBox.Div(g[:, :, 1], g[:, :, 2], "sym", 2); phi = phi - tau.*K; include("NtSolutions/segmentation_3_snakes_levelset/exo3.jl") ## Insert your code here. phi = phi0.^3; include("NtToolBox/src/perform_fast_marching.jl") include("NtToolBox/src/perform_redistancing.jl") phi1 = perform_redistancing(phi0); figure(figsize = (10, 5)) subplot(1, 2, 1) plot_levelset(phi) title("Before redistancing") subplot(1, 2, 2) plot_levelset(phi1) title("After redistancing") show() n = 200; f0 = NtToolBox.rescale(NtToolBox.load_image("NtToolBox/src/data/cortex.png", n)); g = NtToolBox.Grad(f0, "sym", 2) d0 = sqrt(sum(g.^2, 3)); a = 5; d = NtToolBox.perform_blurring(d0[:, :, 1], [a], "per"); epsilon = 1e-1; W = 1./(epsilon + d) W = NtToolBox.rescale(-d, 0.1, 1); figure(figsize = (10, 5)) NtToolBox.imageplot(f0, "Image to segment", [1, 2, 1]) NtToolBox.imageplot(W, "Weight", [1, 2, 2]) include("NtSolutions/segmentation_3_snakes_levelset/exo4.jl"); ## Insert your code here. figure(figsize = (5, 5)) NtToolBox.plot_levelset(phi0, 0, f0) tau = .4; Tmax = 1500 niter = Int(Tmax/tau); phi = copy(phi0); gW = NtToolBox.Grad(W, "sym", 2); include("NtSolutions/segmentation_3_snakes_levelset/exo5.jl"); ## Insert your code here. phi = phi - tau*G; phi = perform_redistancing(phi[:, :]); # run -i nt_solutions/segmentation_3_snakes_levelset/exo6 include("NtSolutions/segmentation_3_snakes_levelset/exo6.jl") # figure(figsize = (10, 10)) # phi = copy(phi0) # k = 0 # gW = NtToolBox.Grad(W, "sym", 2) # for i in 1 : niter # gD = NtToolBox.Grad(phi, "sym", 2) # d = max(eps().*ones(n, n), sqrt(sum(g0.^2, 3))) # g = gD./cat(3, d[:, :], d[:, :]) # G = W.*(d.*NtToolBox.Div(g[:, :, 1], g[:, :, 2], "sym", 2)) + sum(gW.*gD, 3) # phi = (phi + tau.*G)[:, :] # if i % 30 == 0 # phi = NtToolBox.perform_redistancing(phi) # end # if i % Base.div(niter, 4.) == 0 # k = k + 1 # subplot(2, 2, k) # NtToolBox.plot_levelset(phi, 0, f0) # end # end ## Insert your code here. include("NtSolutions/segmentation_3_snakes_levelset/exo7.jl") ## Insert your code here. lambd = 2; c1 = .7 c2 = 0; tau = .5; Tmax = 100 niter = Int(Tmax/ tau); phi = copy(phi0); include("NtSolutions/segmentation_3_snakes_levelset/exo8.jl"); ## Insert your code here. phi = phi + tau*G; include("NtSolutions/segmentation_3_snakes_levelset/exo9.jl") ## Insert your code here.