Skip to content

Commit 9424eaa

Browse files
committed
Move remaining erode/dilate to ImageMorphology
1 parent 16883e5 commit 9424eaa

File tree

4 files changed

+118
-123
lines changed

4 files changed

+118
-123
lines changed

src/Images.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import ImageShow: play, explore, gif
3636
# in deprecations.jl
3737
import ImageContrastAdjustment: build_histogram, adjust_histogram, adjust_histogram!
3838

39-
import ImageMorphology: dilate, erode
4039
using TiledIteration: EdgeIterator
4140

4241
# TODO(v1.0.0): remove these entry points

src/algorithms.jl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Base: axes1, tail
22
using OffsetArrays
33
import Statistics
4-
using ImageMorphology: dilate!, erode!
54

65
# Entropy for grayscale (intensity) images
76
function _log(kind::Symbol)
@@ -212,10 +211,6 @@ function imROF(img::AbstractMatrix{<:Color}, λ::Number, iterations::Integer)
212211
out
213212
end
214213

215-
# morphological operations for ImageMeta
216-
dilate(img::ImageMeta, region=coords_spatial(img)) = shareproperties(img, dilate!(copy(arraydata(img)), region))
217-
erode(img::ImageMeta, region=coords_spatial(img)) = shareproperties(img, erode!(copy(arraydata(img)), region))
218-
219214
"""
220215
```
221216
pyramid = gaussian_pyramid(img, n_scales, downsample, sigma)

test/algorithms.jl

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -110,123 +110,6 @@ using Test, Suppressor
110110
@test img2 A
111111
end
112112

113-
@testset "Erode/ dilate" begin
114-
A = zeros(4,4,3)
115-
A[2,2,1] = 0.8
116-
A[4,4,2] = 0.6
117-
Ae = erode(A)
118-
@test Ae == zeros(size(A))
119-
Ad = dilate(A, 1:2)
120-
Ar = [0.8 0.8 0.8 0;
121-
0.8 0.8 0.8 0;
122-
0.8 0.8 0.8 0;
123-
0 0 0 0]
124-
Ag = [0 0 0 0;
125-
0 0 0 0;
126-
0 0 0.6 0.6;
127-
0 0 0.6 0.6]
128-
@test Ad == cat(Ar, Ag, zeros(4,4), dims=3)
129-
Ae = erode(Ad, 1:2)
130-
Ar = [0.8 0.8 0 0;
131-
0.8 0.8 0 0;
132-
0 0 0 0;
133-
0 0 0 0]
134-
Ag = [0 0 0 0;
135-
0 0 0 0;
136-
0 0 0 0;
137-
0 0 0 0.6]
138-
@test Ae == cat(Ar, Ag, zeros(4,4), dims=3)
139-
# issue #311
140-
@test dilate(trues(3)) == trues(3)
141-
# ImageMeta
142-
@test arraydata(dilate(ImageMeta(A))) == dilate(A)
143-
@test arraydata(dilate(ImageMeta(A), 1:2)) == dilate(A, 1:2)
144-
@test arraydata(erode(ImageMeta(A))) == erode(A)
145-
@test arraydata(erode(ImageMeta(A), 1:2)) == erode(A, 1:2)
146-
end
147-
148-
@testset "Opening / closing" begin
149-
A = zeros(4,4,3)
150-
A[2,2,1] = 0.8
151-
A[4,4,2] = 0.6
152-
Ao = opening(A)
153-
@test Ao == zeros(size(A))
154-
A = zeros(10,10)
155-
A[4:7,4:7] .= 1
156-
B = copy(A)
157-
A[5,5] = 0
158-
Ac = closing(A)
159-
@test Ac == B
160-
end
161-
162-
@testset "Morphological Top-hat" begin
163-
A = zeros(13, 13)
164-
A[2:3, 2:3] .= 1
165-
Ae = copy(A)
166-
A[5:9, 5:9] .= 1
167-
Ao = tophat(A)
168-
@test Ao == Ae
169-
Aoo = tophat(Ae)
170-
@test Aoo == Ae
171-
end
172-
173-
@testset "Morphological Bottom-hat" begin
174-
A = ones(13, 13)
175-
A[2:3, 2:3] .= 0
176-
Ae = 1 .- copy(A)
177-
A[5:9, 5:9] .= 0
178-
Ao = bothat(A)
179-
@test Ao == Ae
180-
end
181-
182-
@testset "Morphological Gradient" begin
183-
A = zeros(13, 13)
184-
A[5:9, 5:9] .= 1
185-
Ao = morphogradient(A)
186-
Ae = zeros(13, 13)
187-
Ae[4:10, 4:10] .= 1
188-
Ae[6:8, 6:8] .= 0
189-
@test Ao == Ae
190-
Aee = dilate(A) - erode(A)
191-
@test Aee == Ae
192-
end
193-
194-
@testset "Morphological Laplacian" begin
195-
A = zeros(13, 13)
196-
A[5:9, 5:9] .= 1
197-
Ao = morpholaplace(A)
198-
Ae = zeros(13, 13)
199-
Ae[4:10, 4:10] .= 1
200-
Ae[5:9, 5:9] .= -1
201-
Ae[6:8, 6:8] .= 0
202-
@test Ao == Ae
203-
Aee = dilate(A) + erode(A) - 2A
204-
@test Aee == Ae
205-
end
206-
207-
@testset "Label components" begin
208-
A = [true true false true;
209-
true false true true]
210-
lbltarget = [1 1 0 2;
211-
1 0 2 2]
212-
lbltarget1 = [1 2 0 4;
213-
1 0 3 4]
214-
@test label_components(A) == lbltarget
215-
@test label_components(A, [1]) == lbltarget1
216-
connectivity = [false true false;
217-
true false true;
218-
false true false]
219-
@test label_components(A, connectivity) == lbltarget
220-
connectivity = trues(3,3)
221-
lbltarget2 = [1 1 0 1;
222-
1 0 1 1]
223-
@test label_components(A, connectivity) == lbltarget2
224-
@test component_boxes(lbltarget) == Vector{Tuple}[[(1,2),(2,3)],[(1,1),(2,2)],[(1,3),(2,4)]]
225-
@test component_lengths(lbltarget) == [2,3,3]
226-
@test component_indices(lbltarget) == Array{Int64}[[4,5],[1,2,3],[6,7,8]]
227-
@test component_subscripts(lbltarget) == Array{Tuple}[[(2,2),(1,3)],[(1,1),(2,1),(1,2)],[(2,3),(1,4),(2,4)]]
228-
@test @inferred(component_centroids(lbltarget)) == Tuple[(1.5,2.5),(4/3,4/3),(5/3,11/3)]
229-
end
230113

231114
# deprecated
232115
@suppress_err @testset "Phantoms" begin

test/legacy.jl

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,122 @@ using Images, Images.OffsetArrays, Statistics, Test
168168
@test findlocalmaxima(A,2,false) == [CartesianIndex((2,5,5)),CartesianIndex((5,5,5))]
169169
end
170170

171+
@testset "Erode/ dilate" begin
172+
A = zeros(4,4,3)
173+
A[2,2,1] = 0.8
174+
A[4,4,2] = 0.6
175+
Ae = erode(A)
176+
@test Ae == zeros(size(A))
177+
Ad = dilate(A, 1:2)
178+
Ar = [0.8 0.8 0.8 0;
179+
0.8 0.8 0.8 0;
180+
0.8 0.8 0.8 0;
181+
0 0 0 0]
182+
Ag = [0 0 0 0;
183+
0 0 0 0;
184+
0 0 0.6 0.6;
185+
0 0 0.6 0.6]
186+
@test Ad == cat(Ar, Ag, zeros(4,4), dims=3)
187+
Ae = erode(Ad, 1:2)
188+
Ar = [0.8 0.8 0 0;
189+
0.8 0.8 0 0;
190+
0 0 0 0;
191+
0 0 0 0]
192+
Ag = [0 0 0 0;
193+
0 0 0 0;
194+
0 0 0 0;
195+
0 0 0 0.6]
196+
@test Ae == cat(Ar, Ag, zeros(4,4), dims=3)
197+
# issue #311
198+
@test dilate(trues(3)) == trues(3)
199+
# ImageMeta
200+
@test arraydata(dilate(ImageMeta(A))) == dilate(A)
201+
@test arraydata(dilate(ImageMeta(A), 1:2)) == dilate(A, 1:2)
202+
@test arraydata(erode(ImageMeta(A))) == erode(A)
203+
@test arraydata(erode(ImageMeta(A), 1:2)) == erode(A, 1:2)
204+
end
205+
206+
@testset "Opening / closing" begin
207+
A = zeros(4,4,3)
208+
A[2,2,1] = 0.8
209+
A[4,4,2] = 0.6
210+
Ao = opening(A)
211+
@test Ao == zeros(size(A))
212+
A = zeros(10,10)
213+
A[4:7,4:7] .= 1
214+
B = copy(A)
215+
A[5,5] = 0
216+
Ac = closing(A)
217+
@test Ac == B
218+
end
219+
220+
@testset "Morphological Top-hat" begin
221+
A = zeros(13, 13)
222+
A[2:3, 2:3] .= 1
223+
Ae = copy(A)
224+
A[5:9, 5:9] .= 1
225+
Ao = tophat(A)
226+
@test Ao == Ae
227+
Aoo = tophat(Ae)
228+
@test Aoo == Ae
229+
end
230+
231+
@testset "Morphological Bottom-hat" begin
232+
A = ones(13, 13)
233+
A[2:3, 2:3] .= 0
234+
Ae = 1 .- copy(A)
235+
A[5:9, 5:9] .= 0
236+
Ao = bothat(A)
237+
@test Ao == Ae
238+
end
239+
240+
@testset "Morphological Gradient" begin
241+
A = zeros(13, 13)
242+
A[5:9, 5:9] .= 1
243+
Ao = morphogradient(A)
244+
Ae = zeros(13, 13)
245+
Ae[4:10, 4:10] .= 1
246+
Ae[6:8, 6:8] .= 0
247+
@test Ao == Ae
248+
Aee = dilate(A) - erode(A)
249+
@test Aee == Ae
250+
end
251+
252+
@testset "Morphological Laplacian" begin
253+
A = zeros(13, 13)
254+
A[5:9, 5:9] .= 1
255+
Ao = morpholaplace(A)
256+
Ae = zeros(13, 13)
257+
Ae[4:10, 4:10] .= 1
258+
Ae[5:9, 5:9] .= -1
259+
Ae[6:8, 6:8] .= 0
260+
@test Ao == Ae
261+
Aee = dilate(A) + erode(A) - 2A
262+
@test Aee == Ae
263+
end
264+
265+
@testset "Label components" begin
266+
A = [true true false true;
267+
true false true true]
268+
lbltarget = [1 1 0 2;
269+
1 0 2 2]
270+
lbltarget1 = [1 2 0 4;
271+
1 0 3 4]
272+
@test label_components(A) == lbltarget
273+
@test label_components(A, [1]) == lbltarget1
274+
connectivity = [false true false;
275+
true false true;
276+
false true false]
277+
@test label_components(A, connectivity) == lbltarget
278+
connectivity = trues(3,3)
279+
lbltarget2 = [1 1 0 1;
280+
1 0 1 1]
281+
@test label_components(A, connectivity) == lbltarget2
282+
@test component_boxes(lbltarget) == Vector{Tuple}[[(1,2),(2,3)],[(1,1),(2,2)],[(1,3),(2,4)]]
283+
@test component_lengths(lbltarget) == [2,3,3]
284+
@test component_indices(lbltarget) == Array{Int64}[[4,5],[1,2,3],[6,7,8]]
285+
@test component_subscripts(lbltarget) == Array{Tuple}[[(2,2),(1,3)],[(1,1),(2,1),(1,2)],[(2,3),(1,4),(2,4)]]
286+
@test @inferred(component_centroids(lbltarget)) == Tuple[(1.5,2.5),(4/3,4/3),(5/3,11/3)]
287+
end
288+
171289
end

0 commit comments

Comments
 (0)