33export TotalVariation1D
44
55"""
6- ** 1-dimensional Total Variation**
6+ **1-dimensional Total Variation**
77
88 TotalVariation1D(λ=1)
99
@@ -39,7 +39,7 @@ function tvnorm_prox_condat(y::AbstractArray, x::AbstractArray, lambda::Real)
3939 # solves y = arg min_z lambda*sum_k |z_{k+1}-z_k| + 1/2 * ||z-x||^2
4040 N = length (x)
4141
42- k= k0 = kmin= kplus= 1
42+ k = k0 = kmin = kplus = 1
4343 vmin = x[1 ] - lambda
4444 vmax = x[1 ] + lambda
4545 umin = lambda
@@ -51,13 +51,15 @@ function tvnorm_prox_condat(y::AbstractArray, x::AbstractArray, lambda::Real)
5151 y[k0: kmin] .= vmin
5252 kmin += 1
5353 k = k0 = kmin
54- vmin = x[k]; umin = lambda;
54+ vmin = x[k]
55+ umin = lambda
5556 umax = x[k] + lambda - vmax
5657 elseif umax > 0
5758 y[k0: kplus] .= vmax
5859 kplus += 1
59- k= k0= kplus
60- vmax = x[k]; umax = - lambda;
60+ k = k0 = kplus
61+ vmax = x[k]
62+ umax = - lambda
6163 umin = x[k] - lambda - vmin
6264 else
6365 y[k0: N] .= vmin + umin/ (k- k0+ 1 )
@@ -73,28 +75,34 @@ function tvnorm_prox_condat(y::AbstractArray, x::AbstractArray, lambda::Real)
7375
7476 if x[k+ 1 ] + umin < vmin - lambda
7577 y[k0: kmin] .= vmin
76- kmin += 1
77- k = k0 = kplus = kmin
78- vmin = x[k]; vmax = x[k] + 2 * lambda;
79- umin = lambda; umax = - lambda;
78+ kmin += 1
79+ k = k0 = kplus = kmin
80+ vmin = x[k]
81+ vmax = x[k] + 2 * lambda
82+ umin = lambda
83+ umax = - lambda
8084 elseif x[k+ 1 ] + umax > vmax + lambda
8185 y[k0: kplus] .= vmax
82- kplus += 1
86+ kplus += 1
8387 k = k0 = kmin = kplus
84- vmin = x[k] - 2 * lambda; vmax = x[k];
85- umin = lambda; umax = - lambda;
88+ vmin = x[k] - 2 * lambda
89+ vmax = x[k]
90+ umin = lambda
91+ umax = - lambda
8692 else
87- k += 1 ;
93+ k += 1
8894 umin = umin + x[k] - vmin
8995 umax = umax + x[k] - vmax
9096 if umin >= lambda
9197 vmin = vmin + (umin- lambda)/ (k- k0+ 1 )
92- umin = lambda; kmin = k;
98+ umin = lambda
99+ kmin = k
93100 end
94101
95102 if umax <= - lambda
96103 vmax += (umax+ lambda)/ (k- k0+ 1 )
97- umax = - lambda; kplus = k;
104+ umax = - lambda
105+ kplus = k
98106 end
99107 end
100108 end
0 commit comments