@@ -10,15 +10,15 @@ See also [`imresize`](@ref).
1010"""
1111restrict (img:: AbstractArray , :: Tuple{} ) = img
1212
13- restrict (A:: AbstractArray , region:: Vector{Int} ) = restrict (A, (region... ))
13+ restrict (A:: AbstractArray , region:: Vector{Int} ) = restrict (A, (region... , ))
1414restrict (A:: AbstractArray ) = restrict (A, coords_spatial (A))
1515function restrict (A:: AbstractArray , region:: Dims )
1616 restrict (restrict (A, region[1 ]), Base. tail (region))
1717end
1818
1919function restrict (A:: AbstractArray{T,N} , dim:: Integer ) where {T,N}
20- indsA = indices (A)
21- newinds = ntuple (i-> i== dim? restrict_indices (indsA[dim]): indsA[i], Val{N} )
20+ indsA = axes (A)
21+ newinds = ntuple (i-> i== dim ? restrict_indices (indsA[dim]) : indsA[i], Val (N) )
2222 out = similar (Array{restrict_eltype (first (A)),N}, newinds)
2323 restrict! (out, A, dim)
2424 out
@@ -35,9 +35,9 @@ restrict_eltype(x::Colorant) = restrict_eltype_default(convert(ARGB, x))
3535
3636function restrict! (out:: AbstractArray{T,N} , A:: AbstractArray , dim) where {T,N}
3737 if dim > N
38- return copy ! (out, A)
38+ return copyto ! (out, A)
3939 end
40- indsout, indsA = indices (out), indices (A)
40+ indsout, indsA = axes (out), axes (A)
4141 ndims (out) == ndims (A) || throw (DimensionMismatch (" input and output must have the same number of dimensions" ))
4242 for d = 1 : length (indsA)
4343 target = d== dim ? restrict_indices (indsA[d]) : indsA[d]
155155end
156156
157157restrict_size (len:: Integer ) = isodd (len) ? (len+ 1 )>> 1 : (len>> 1 )+ 1
158-
158+ # CHECKME: wild guess here
159+ function restrict_indices (r:: Base.Slice )
160+ f, l = first (r), last (r)
161+ isodd (f) && return (f+ 1 )>> 1 : restrict_size (l)
162+ f>> 1 : (isodd (l) ? (l+ 1 )>> 1 : l>> 1 )
163+ end
159164restrict_indices (r:: Base.OneTo ) = Base. OneTo (restrict_size (length (r)))
160165function restrict_indices (r:: UnitRange )
161166 f, l = first (r), last (r)
@@ -173,8 +178,8 @@ function imresize(original::AbstractArray, short_size::Tuple)
173178 imresize (original, new_size)
174179end
175180odims (original, i, short_size:: Tuple{Integer,Vararg{Integer}} ) = size (original, i)
176- odims (original, i, short_size:: Tuple{} ) = indices (original, i)
177- odims (original, i, short_size) = oftype (first (short_size), indices (original, i))
181+ odims (original, i, short_size:: Tuple{} ) = axes (original, i)
182+ odims (original, i, short_size) = oftype (first (short_size), axes (original, i))
178183
179184"""
180185 imresize(img, sz) -> imgr
@@ -193,18 +198,18 @@ See also [`restrict`](@ref).
193198"""
194199function imresize (original:: AbstractArray{T,0} , new_inds:: Tuple{} ) where T
195200 Tnew = imresize_type (first (original))
196- copy ! (similar (original, Tnew), original)
201+ copyto ! (similar (original, Tnew), original)
197202end
198203
199204function imresize (original:: AbstractArray{T,N} , new_size:: Dims{N} ) where {T,N}
200205 Tnew = imresize_type (first (original))
201- inds = indices (original)
206+ inds = axes (original)
202207 if map (length, inds) == new_size
203208 dest = similar (original, Tnew, new_size)
204- if indices (dest) == inds
205- copy ! (dest, original)
209+ if axes (dest) == inds
210+ copyto ! (dest, original)
206211 else
207- copy ! (dest, CartesianRange ( indices (dest)), original, CartesianRange (inds))
212+ copyto ! (dest, CartesianIndices ( axes (dest)), original, CartesianIndices (inds))
208213 end
209214 else
210215 imresize! (similar (original, Tnew, new_size), original)
213218
214219function imresize (original:: AbstractArray{T,N} , new_inds:: Indices{N} ) where {T,N}
215220 Tnew = imresize_type (first (original))
216- if indices (original) == new_inds
217- copy ! (similar (original, Tnew), original)
221+ if axes (original) == new_inds
222+ copyto ! (similar (original, Tnew), original)
218223 else
219224 imresize! (similar (original, Tnew, new_inds), original)
220225 end
@@ -247,8 +252,10 @@ function imresize!(resized::AbstractArray{T,N}, original::AbstractInterpolation{
247252 # (0.5, 0.5) -> (0.5, 0.5) (outer corner, top left)
248253 # size(resized)+0.5 -> size(original)+0.5 (outer corner, lower right)
249254 # This ensures that both images cover exactly the same area.
250- Ro, Rr = CartesianRange (indices (original)), CartesianRange (indices (resized))
251- sf = map (/ , (last (Ro)- first (Ro)+ 1 ). I, (last (Rr)- first (Rr)+ 1 ). I) # +1 for outer corners
255+ Ro, Rr = CartesianIndices (axes (original)), CartesianIndices (axes (resized))
256+ # CHECKME: is this general enough? previously had
257+ # sf = map(/, (last(Ro)-first(Ro)+1).I, (last(Rr)-first(Rr)+1).I) # +1 for outer corners
258+ sf = map (/ , (last (Ro)- first (Ro)). I .+ 1 , (last (Rr)- first (Rr)). I .+ 1 ) # +1 for outer corners
252259 offset = map ((io,ir,s)-> io - 0.5 - s* (ir- 0.5 ), first (Ro). I, first (Rr). I, sf)
253260 if all (x-> x >= 1 , sf)
254261 @inbounds for I in Rr
268275@inline map3 (f, a, b, c) = (f (a[1 ], b[1 ], c[1 ]), map3 (f, tail (a), tail (b), tail (c))... )
269276@inline map3 (f, :: Tuple{} , :: Tuple{} , :: Tuple{} ) = ()
270277
271- @compat function clampR (I:: NTuple{N} , R:: CartesianRange {N} ) where N
278+ function clampR (I:: NTuple{N} , R:: CartesianIndices {N} ) where N
272279 map3 (clamp, I, first (R). I, last (R). I)
273280end
0 commit comments