diff --git a/scripts/run_experiments.jl b/scripts/run_experiments.jl index 2bef78c3758240d936fc120cf355c7d6dde6dd62..ab18a632bc34114e8c702e0a2a7e9a3d0fc60e2a 100644 --- a/scripts/run_experiments.jl +++ b/scripts/run_experiments.jl @@ -1335,14 +1335,17 @@ end # NOTE: used also by inpaint_denoise experiment function inpaint(ctx) # expect ctx.params.g_arr - + duration = @elapsed begin #project_image! = project_l2_lagrange! project_image! = project_qi_lagrange! # convert to cartesian coordinates g_arr = from_img(ctx.params.g_arr) mask_arr = from_img(ctx.params.mask_arr) - + dim_g = size(g_arr) + dim_refine = floor.(Int, size(g_arr) ./ 2^(ctx.params.n_refine / 2)) + N_refine = floor.(Int, log2( (dim_g[1]-1) * (dim_g[2]-1) / ((dim_refine[1]-1)*(dim_refine[2]-1)) )) + println("Number of refinements: ", N_refine) mesh = init_grid(g_arr, floor.(Int, size(g_arr) ./ 2^(ctx.params.n_refine / 2))...) mesh_area = area(mesh) @@ -1406,7 +1409,8 @@ function inpaint(ctx) # refinement stop criterion k_refine += 1 - k_refine > ctx.params.n_refine && break + # k_refine > ctx.params.n_refine && break + k_refine > N_refine && break println("refine ...") #estimate_res!(st) marked_cells = Set(mark(st; theta = 0.5)) @@ -1435,16 +1439,18 @@ function inpaint(ctx) interpolate_image_data!() end end - #CSV.write(joinpath(ctx.outdir, "energies.csv"), df) + end # @elapsed u_sampled = sample(st.u) saveimg(joinpath(ctx.outdir, "g.png"), grayclamp.(to_img(g_arr))) saveimg(joinpath(ctx.outdir, "output.png"), grayclamp.(to_img(u_sampled))) + psnr = assess_psnr(u_sampled, g_arr) + ssim = assess_ssim(u_sampled, g_arr) #save_csv(joinpath(ctx.outdir, "mesh.csv"), st.u) savedata(joinpath(ctx.outdir, "data.tex"); ctx.params.eps_newton, ctx.params.n_refine, st.alpha1, st.alpha2, st.lambda, st.beta, st.gamma1, st.gamma2, - width=size(u_sampled, 1), height=size(u_sampled, 2)) + width=size(u_sampled, 1), height=size(u_sampled, 2), duration, psnr, ssim, N_refine) return st end @@ -1452,25 +1458,26 @@ function experiment_inpaint_adaptive(ctx) g_arr = loadimg(joinpath(ctx.indir, "input.png")) mask_arr = loadimg(joinpath(ctx.indir, "mask.png")) mesh = init_grid(g_arr;) - - params = ( - name = "test", - n_refine = 5, - g_arr, mask_arr, mesh, - #alpha1 = 0.2, alpha2 = 8., lambda = 1., - alpha1 = 0., alpha2 = 50., lambda = 1., - beta = 1e-5, S = Operators.SIdentity(), - gamma1 = 1e-4, gamma2 = 1e-4, - eps_newton = 1e-4) - - savedata(joinpath(ctx.outdir, "data.tex"); - params.eps_newton, params.n_refine, - params.alpha1, params.alpha2, params.lambda, - params.gamma1, params.gamma2, - params.beta, params.S, - width=size(g_arr, 1), height=size(g_arr, 2)) - - ctx(inpaint; params...) + for coarsen in 0:15 + params = ( + name = "test", + n_refine = coarsen, + g_arr, mask_arr, mesh, + #alpha1 = 0.2, alpha2 = 8., lambda = 1., + alpha1 = 0., alpha2 = 50., lambda = 1., + beta = 1e-5, S = Operators.SIdentity(), + gamma1 = 1e-4, gamma2 = 1e-4, + eps_newton = 1e-4) + + savedata(joinpath(ctx.outdir, "data.tex"); + params.eps_newton, params.n_refine, + params.alpha1, params.alpha2, params.lambda, + params.gamma1, params.gamma2, + params.beta, params.S, + width=size(g_arr, 1), height=size(g_arr, 2)) + + ctx(inpaint, "s-identity_alpha1_$(round(Int, params.alpha1))_alpha2_$(round(Int, params.alpha2))_coarse_$(params.n_refine)"; params...) + end end function experiment_inpaint_denoise(ctx)