@@ -16,17 +16,22 @@ mask = MaskMulti(rand(1:3, 100, 100))
1616showitem(mask)
1717```
1818"""
19- struct MaskMulti{N, T, B} <: AbstractArrayItem{N, T}
19+ struct MaskMulti{N, T<: Integer , U , B} <: AbstractArrayItem{N, T}
2020 data:: AbstractArray{T, N}
21- classes:: AbstractVector{T }
21+ classes:: AbstractVector{U }
2222 bounds:: AbstractArray{<:SVector{N, B}, N}
2323end
2424
2525
26- function MaskMulti (a:: AbstractArray , classes = unique (a), bounds = makebounds (size (a)))
27- return MaskMulti (a, classes = bounds)
26+ function MaskMulti (a:: AbstractArray , classes = unique (a))
27+ bounds = makebounds (size (a))
28+ minimum (a) >= 1 || error (" Class values must start at 1" )
29+ return MaskMulti (a, classes, bounds)
2830end
2931
32+ MaskMulti (a:: AbstractArray{<:Gray{T}} , args... ) where T = MaskMulti (reinterpret (T, a), args... )
33+ MaskMulti (a:: AbstractArray{<:Normed{T}} , args... ) where T = MaskMulti (reinterpret (T, a), args... )
34+
3035Base. show (io:: IO , mask:: MaskMulti{N, T} ) where {N, T} =
3136 print (io, " MaskMulti{$N , $T }() with size $(size (itemdata (mask))) and $(length (mask. classes)) classes" )
3237
125130
126131function mask_extrapolation (
127132 mask:: AbstractArray{T} ;
133+ t = T,
128134 degree = Constant (),
129135 boundary = Flat ()) where T
130- itp = interpolate (T, T , mask, BSpline (degree))
136+ itp = interpolate (t, t , mask, BSpline (degree))
131137 etp = extrapolate (itp, Flat ())
132138 return etp
133139end
0 commit comments