Skip to content

Commit c541f93

Browse files
committed
🧹 Deprecate div in favor of fdiv
This, however, introduces some breaking change on the boundary.
1 parent 7cc4739 commit c541f93

File tree

4 files changed

+18
-46
lines changed

4 files changed

+18
-46
lines changed

‎src/algorithms.jl

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -301,42 +301,6 @@ end
301301
imgaussiannoise(img::AbstractArray{T}, variance::Number) where {T} = imgaussiannoise(img, variance, 0)
302302
imgaussiannoise(img::AbstractArray{T}) where {T} = imgaussiannoise(img, 0.01, 0)
303303

304-
# image gradients
305-
306-
function div(p::AbstractArray{T,3}) where T
307-
# Definition from the Chambolle citation below, between Eqs. 5 and 6
308-
# This is the adjoint of -forwarddiff
309-
inds = axes(p)[1:2]
310-
out = similar(p, inds)
311-
Router = CartesianIndices(inds)
312-
rstp = _oneunit(first(Router))
313-
Rinner = _clippedinds(Router,rstp)
314-
# Since most of the points are in the interior, compute them more quickly by avoiding branches
315-
for I in Rinner
316-
out[I] = p[I,1] - p[I[1]-1, I[2], 1] +
317-
p[I,2] - p[I[1], I[2]-1, 2]
318-
end
319-
# Handle the edge points
320-
for I in EdgeIterator(Router, Rinner)
321-
out[I] = 0
322-
if I[1] == first(inds[1])
323-
out[I] += p[I, 1]
324-
elseif I[1] == last(inds[1])
325-
out[I] -= p[I[1]-1, I[2], 1]
326-
else
327-
out[I] += p[I,1] - p[I[1]-1, I[2], 1]
328-
end
329-
if I[2] == first(inds[2])
330-
out[I] += p[I, 2]
331-
elseif I[2] == last(inds[2])
332-
out[I] -= p[I[1], I[2]-1, 2]
333-
else
334-
out[I] += p[I,2] - p[I[1], I[2]-1, 2]
335-
end
336-
end
337-
out
338-
end
339-
340304
"""
341305
```
342306
imgr = imROF(img, λ, iterations)
@@ -358,12 +322,12 @@ function imROF(img::AbstractMatrix{T}, λ::Number, iterations::Integer) where T<
358322
s1, s2 = size(img)
359323
p = zeros(T, s1, s2, 2)
360324
# This iterates Eq. (9) of the Chambolle citation
361-
local u
325+
u = similar(img)
362326
Ï„ = 1/4 # see 2nd remark after proof of Theorem 3.1.
363327
for i = 1:iterations
364-
div_p = div(p)
365-
u = img - λ*div_p # multiply term inside ∇ by -λ. Thm. 3.1 relates this to u via Eq. 7.
366-
grad_u = cat(fdiff(u, dims=1, boundary=:zero), fdiff(u, dims=2, boundary=:zero), dims=3)
328+
div_p = ImageBase.FiniteDiff.fdiv(view(p, :, :, 1), view(p, :, :, 2))
329+
u .= img - λ*div_p # multiply term inside ∇ by -λ. Thm. 3.1 relates this to u via Eq. 7.
330+
grad_u = cat(ImageBase.fdiff(u, dims=1, boundary=:zero), ImageBase.fdiff(u, dims=2, boundary=:zero), dims=3)
367331
grad_u_mag = sqrt.(sum(abs2, grad_u, dims=3))
368332
p .= (p .- (τ/λ).*grad_u)./(1 .+ (τ/λ).*grad_u_mag)
369333
end

‎src/deprecations.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,6 +1080,8 @@ end
10801080
@deprecate forwarddiffy(X) ImageBase.FiniteDiff.fdiff(X, dims=1, boundary=:zero)
10811081
@deprecate backdiffx(X) ImageBase.FiniteDiff.fdiff(X, dims=2, rev=true, boundary=:zero)
10821082
@deprecate backdiffy(X) ImageBase.FiniteDiff.fdiff(X, dims=1, rev=true, boundary=:zero)
1083+
@deprecate div(A::AbstractArray{<:Any,3}) ImageBase.FiniteDiff.fdiv(view(A, :, :, 1), view(A, :, :, 2)) false
1084+
10831085

10841086
# This is now replaced by ImageTransformations and Interpolations
10851087
using ImageTransformations.Interpolations: BSpline, Linear, interpolate

‎test/algorithms.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -469,12 +469,6 @@ using ImageBase.FiniteDiff: fdiff
469469
end
470470

471471
@testset "imROF" begin
472-
# Test that -div is the adjoint of forwarddiff
473-
p = rand(3,3,2)
474-
u = rand(3,3)
475-
gu = cat(fdiff(u, dims=1, boundary=:zero), fdiff(u, dims=2, boundary=:zero), dims=3)
476-
@test sum(-Images.div(p) .* u) ≈ sum(p .* gu)
477-
478472
img = [0.1 0.2 0.1 0.8 0.9 0.7;
479473
0.2 0.1 0.1 0.8 0.1 0.8;
480474
0.1 0.2 0.1 0.7 0.9 0.8]

‎test/legacy.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,16 @@
116116
@test axes(axs[2])[1] == axes(Aor)[2]
117117
AAA = AxisArray(Aor, axs) # just test that it's constructable (another way of enforcing agreement)
118118
end
119+
120+
# moved to ImageBase.FiniteDiff.fdiv
121+
@testset "div" begin
122+
# Test that -div is the adjoint of forwarddiff
123+
p = rand(3,3,2)
124+
u = rand(3,3)
125+
gu = cat(
126+
ImageBase.FiniteDiff.fdiff(u, dims=1, boundary=:periodic),
127+
ImageBase.FiniteDiff.fdiff(u, dims=2, boundary=:periodic),
128+
dims=3)
129+
@test sum(-Images.div(p) .* u) ≈ sum(p .* gu)
130+
end
119131
end

0 commit comments

Comments
 (0)