Skip to content

Commit c9a250f

Browse files
authored
Fixes to TotalVariation1D (#130)
1 parent 81d1b50 commit c9a250f

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

src/functions/TotalVariation1D.jl

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
export 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

Comments
 (0)