library(imager) library(pracma) library(plot3D) options(warn=-1) # turns off warnings, to turn on: "options(warn=0)" # Importing the libraries for (f in list.files(path="nt_toolbox/toolbox_general/", pattern="*.R")) { source(paste("nt_toolbox/toolbox_general/", f, sep="")) } for (f in list.files(path="nt_toolbox/toolbox_signal/", pattern="*.R")) { source(paste("nt_toolbox/toolbox_signal/", f, sep="")) } name = "nt_toolbox/data/lena.png" n = 256 f0 = load_image(name, n) f0 = rescale(crop(f0, n / 2)) options(repr.plot.width=5, repr.plot.height=5) f0 = f0[,] imageplot(f0) rho = .8 Lambda = rand(n / 2, n / 2) > rho Phi = function(f){f * Lambda} y = Phi(f0) imageplot(y) K = function(f){grad_3(f)} KS = function(u){-div_2(u)} Amplitude = function(u){sqrt(u[,,1]^2 + u[,,2]^2)} F = function(u){sum(sum(Amplitude(u)))} ProxF = function(u,lambda) { return(pmax(0,1 - lambda / array(c(Amplitude(u), Amplitude(u)), dim=c(dim(u)[1],dim(u)[2],2))) * u) } t = -linspace(-2,2, 201) Y = meshgrid(t,t)$Y X = meshgrid(t,t)$X U = array(c(X,Y), dim=c(201, 201, 2)) V = ProxF(U,1.) persp3D(X, Y, V[,,1], theta=30, phi=50, ticktype="detailed") ProxFS = function(y,sigma){y - sigma * ProxF(y / sigma, 1. / sigma)} V = ProxFS(U,1) persp3D(X, Y, V[,,1], theta=20, phi=50, ticktype="detailed") ProxG = function(f,tau){f + Phi(y - Phi(f))} L = 8 sigma = 10 tau = .9/(L * sigma) theta = 1 f = y g = K(y) * 0 f1 = f fold = f g = ProxFS(g + sigma * K(f1), sigma) f = ProxG(f - tau * KS(g), tau) f1 = f + theta * (f - fold) source("nt_solutions/optim_5_primal_dual/exo1.R") # Insert code here imageplot(f) source("nt_solutions/optim_5_primal_dual/exo2.R") # Solution not available n = 64 radius = 0.6 t = linspace(-1,1,n) Y = meshgrid(t,t)$Y X = meshgrid(t,t)$X f0 = (pmax(abs(X),abs(Y) ) < radius) * 1.0 a = 4 Lambda = matrix(1, n, n) Lambda[((n/2) - a):((n/2) + a),] = 0 imageplot(f0, 'Original', c(1,2,1)) imageplot(Phi(f0), 'Damaged', c(1,2,2)) source("nt_solutions/optim_5_primal_dual/exo3.R") # Insert code here