JuliaImages / ImageFiltering.jl

Julia implementations of multidimensional array convolution and nonlinear stencil operations
Other
99 stars 49 forks source link

Mapwindow StackOverflowError? #212

Open mdhe1248 opened 3 years ago

mdhe1248 commented 3 years ago

Hi,

I get a StackOverflowError with mapwindow:

julia> mapwindow(median!, rand(300,300,500), (1,1,11))
ERROR: StackOverflowError:
Stacktrace:
 [1] CartesianIndex at ./multidimensional.jl:65 [inlined]
 [2] CartesianIndex at ./multidimensional.jl:68 [inlined]
 [3] CartesianIndex at ./multidimensional.jl:76 [inlined]
 [4] nextedgeitem(::TiledIteration.EdgeIterator{3,Tuple{Base.OneTo{Int64},Base.OneTo{Int64},Base.OneTo{Int64}},Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}}}, ::CartesianIndex{3}) at /home/donghoon/.julia/packages/TiledIteration/7kjuN/src/TiledIteration.jl:110
 [5] nextedgeitem(::TiledIteration.EdgeIterator{3,Tuple{Base.OneTo{Int64},Base.OneTo{Int64},Base.OneTo{Int64}},Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}}}, ::CartesianIndex{3}) at /home/donghoon/.julia/packages/TiledIteration/7kjuN/src/TiledIteration.jl:111 (repeats 79983 times)

but it works with a bit smaller array or a larger filtering window.

#Both work:
mapwindow(median!, rand(300,300,400), (1,1,11))
mapwindow(median!, rand(300,300,500), (3,3,11))

Does anyone have any idea on this issue?

roflmaostc commented 3 years ago

I encountered a similar situation with:

julia> arr = randn((3, 620, 620, 18, 1));

julia> mapwindow(median, arr, (1, 1, 3, 3, 1))
ERROR: StackOverflowError:
Stacktrace:
  [1] map
    @ ./tuple.jl:236 [inlined]
  [2] in
    @ ./multidimensional.jl:443 [inlined]
  [3] nextedgeitem(iter::TiledIteration.EdgeIterator{5, NTuple{5, Base.OneTo{Int64}}, NTuple{5, UnitRange{Int64}}}, I::CartesianIndex{5})
    @ TiledIteration ~/.julia/packages/TiledIteration/4pU9I/src/TiledIteration.jl:66
  [4] nextedgeitem(iter::TiledIteration.EdgeIterator{5, NTuple{5, Base.OneTo{Int64}}, NTuple{5, UnitRange{Int64}}}, I::CartesianIndex{5}) (repeats 58142 times)
    @ TiledIteration ~/.julia/packages/TiledIteration/4pU9I/src/TiledIteration.jl:69
  [5] iterate(iter::TiledIteration.EdgeIterator{5, NTuple{5, Base.OneTo{Int64}}, NTuple{5, UnitRange{Int64}}}, state::CartesianIndex{5})
    @ TiledIteration ~/.julia/packages/TiledIteration/4pU9I/src/TiledIteration.jl:60
  [6] mapwindow_kernel!(f::typeof(median), out::Array{Float64, 5}, img::Array{Float64, 5}, window::NTuple{5, UnitRange{Int64}}, border::Pad{0}, imginds::NTuple{5, Base.OneTo{Int64}})
    @ ImageFiltering.MapWindow ~/.julia/packages/ImageFiltering/bTMw9/src/mapwindow.jl:292
  [7] _mapwindow(f::typeof(median), img::Array{Float64, 5}, window::NTuple{5, UnitRange{Int64}}, border::Pad{0}, imginds::NTuple{5, Base.OneTo{Int64}})
    @ ImageFiltering.MapWindow ~/.julia/packages/ImageFiltering/bTMw9/src/mapwindow.jl:93
  [8] mapwindow(f::typeof(median), img::Array{Float64, 5}, window::NTuple{5, Int64}; border::String, indices::NTuple{5, Base.OneTo{Int64}}, callmode::Symbol)
    @ ImageFiltering.MapWindow ~/.julia/packages/ImageFiltering/bTMw9/src/mapwindow.jl:69
  [9] mapwindow(f::typeof(median), img::Array{Float64, 5}, window::NTuple{5, Int64})
    @ ImageFiltering.MapWindow ~/.julia/packages/ImageFiltering/bTMw9/src/mapwindow.jl:66
 [10] top-level scope
    @ REPL[24]:1