From 59cdd730b8742e91395c22cf6ce228a58b6c8ee4 Mon Sep 17 00:00:00 2001 From: Stephan Hilb <stephan@ecshi.net> Date: Mon, 6 Dec 2021 18:47:03 +0100 Subject: [PATCH] refactor --- scripts/run_experiments.jl | 6 +++--- src/image.jl | 17 ++++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/run_experiments.jl b/scripts/run_experiments.jl index 321fee6..f12db0f 100644 --- a/scripts/run_experiments.jl +++ b/scripts/run_experiments.jl @@ -502,7 +502,7 @@ function denoise(img; name, params...) ctx = L1L2TVContext(name, mesh, m; T, tdata = nothing, S, params...) project_img!(ctx.g, img) - #interpolate!(ctx.g, x -> interpolate_bilinear(img, x)) + #interpolate!(ctx.g, x -> evaluate_bilinear(img, x)) #m = (size(img) .- 1) ./ 2 .+ 1 #interpolate!(ctx.g, x -> norm(x .- m) < norm(m .- 1) / 3) @@ -572,7 +572,7 @@ function denoise_pd(st, img; df=nothing, name, algorithm, params_...) theta = 1. #project_img!(st.g, img) - interpolate!(st.g, x -> interpolate_bilinear(img, x)) + interpolate!(st.g, x -> evaluate_bilinear(img, x)) st.u.data .= st.g.data save_denoise(st, i) = @@ -688,7 +688,7 @@ function denoise_approximation(ctx) ctx.params.gamma1, ctx.params.gamma2) #project_img!(st.g, img) - interpolate!(st.g, x -> interpolate_bilinear(ctx.params.img, x)) + interpolate!(st.g, x -> evaluate_bilinear(ctx.params.img, x)) st.u.data .= st.g.data #st.u.data .= rand(size(st.u.data)) diff --git a/src/image.jl b/src/image.jl index dfab9b8..d0d1b33 100644 --- a/src/image.jl +++ b/src/image.jl @@ -1,4 +1,4 @@ -export interpolate_bilinear, halve, warp_backwards +export evaluate_bilinear, halve, warp_backwards # ImageFunction @@ -16,7 +16,7 @@ bind!(f::ImageFunction, cell) = f.cell[] = cell # transform coordinates to image/matrix indexing space img_coord(img, x) = (size(img, 1) - x[2] + 1, x[1]) evaluate(f::ImageFunction, xloc) = - interpolate_bilinear(f.img, + evaluate_bilinear(f.img, img_coord(f.img, elmap(f.mesh, f.cell[])(xloc))) # FIXME: unused? @@ -25,7 +25,7 @@ from_img(img) = permutedims(reverse(arr; dims = 1)) eval_neumann(img, x) = img[clamp.(Tuple(x), axes(img))...] # uses native array indexing, i.e. 1:n -function interpolate_bilinear(img, x) +function evaluate_bilinear(img, x) x0 = floor.(Int, x) x1 = x0 .+ 1 @@ -47,7 +47,7 @@ function warp_backwards(img, u) res = similar(img) for I in CartesianIndices(img) x = Tuple(I) .+ ntuple(i -> u[i, I], d) - res[I] = interpolate_bilinear(img, x) + res[I] = evaluate_bilinear(img, x) end return res end @@ -125,17 +125,20 @@ end """ interprets `img` as a bilinearly interpolated continuous function and applies -the default interpolation function for the discrete function u. +the default interpolation operator for the discrete function u. """ -function interpolate!(u, img) +function interpolate!(u::FeFunction, img::AbstractArray) f = ImageFunction(u.space.mesh, img) interpolate!(u, @inline (x; f) -> f; f) end +# TODO: refine interface: projection vs interpolation, unify different +# algorithms + project_img(space::FeSpace, img) = (u = FeFunction(space); project_img!(u, img)) -function project_img!(u::FeFunction, img) +function project_img!(u::FeFunction, img::AbstractArray) d = 2 # domain dimension space = u.space mesh = space.mesh -- GitLab