From 4a819a2c991754b67dae0f210b1ddda3a22efd94 Mon Sep 17 00:00:00 2001
From: Andreas Langer <andreas.langer@math.lth.se>
Date: Wed, 3 Jul 2024 13:55:09 +0200
Subject: [PATCH] add adaptive inpainting experiments

---
 scripts/run_experiments.jl | 55 +++++++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/scripts/run_experiments.jl b/scripts/run_experiments.jl
index 2bef78c..ab18a63 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)
-- 
GitLab