SDI
SDI should be considered very experimental.
ADI.SDIAlgorithm
— TypeADI.SDIAlgorithm <: ADI.ADIAlgorithm
Spectral differential imaging (SDI) algorithms. These work on 4-D SDI tensors. To use these algorithms, simply treat them like functions (or call process
)
(::SDIAlgorithm)(data::AbstractArray{T,4}, angles, scales; [ref] kwargs...)
The data is expected to be laid out in (nx, ny, nλ, nf)
format, so you may need to permutedims
before processing the data. The scales
correspond to the relative wavelength scales for each spectrum, and can be retrieved with HCIToolbox.scale_list
.
Algorithms
The current SDI implementations are
API/Reference
ADI.SingleSDI
— TypeSingleSDI(alg)
A wrapper algorithm for spectral differential imaging (SDI) data reduced in a single pass. This means that each channel will be scaled and then concatenated together, so an SDI tensor (nx, ny, nλ, nf)
becomes a stack (nx, ny, nλ * nf)
which is processed by the underlying alg
like ADI data.
SingleSDI
is the default SDI mode. This means instead of writing
SingleSDI(PCA(15))(data, angles, scales)
you can just write
PCA(15)(data, angles, scales)
ADI.DoubleSDI
— TypeDoubleSDI(alg)
DoubleSDI(alg_spec, alg_temp)
A wrapper algorithm for spectral differential imaging (SDI) data reduced in two passes. The first pass uses alg_spec
to reduce each spectral cube slice in the SDI tensor. Then, the spectral residual frames will be reduced using alg_temp
, which will include the derotation and final combination.
The difference between DoubleSDI
and SliceSDI
is that DoubleSDI
does its first pass in the spectral slice, effectively collapsing the slice before performing ADI on the residual cube. SliceSDI
does its first pass in the temporal slice, collapsing it first before performing ADI on the residual cube.
Examples
julia> data, angles, scales = # load data...
# Median subtraction for each spectral slice,
# GreeDS{PCA} subtraction on spectral residual cube
julia> res = DoubleSDI(Classic(), GreeDS(15))(data, angles, scales)
ADI.SliceSDI
— TypeSliceSDI(alg)
SliceSDI(alg_spec, alg_temp)
A wrapper algorithm for spectral differential imaging (SDI) data reduced in two passes. The first pass uses alg_temp
to reduce each temporal cube slice in the SDI tensor. These residuals will be rescaled and stacked into a new cube. Then, the temporal residual frames will be reduced using alg_spec
, which will include the derotation and final combination.
The difference between SliceSDI
and DoubleSDI
is that DoubleSDI
does its first pass in the spectral slice, effectively collapsing the slice before performing ADI on the residual cube. SliceSDI
does its first pass in the temporal slice, collapsing it first before performing ADI on the residual cube.
Examples
julia> data, angles, scales = # load data...
# Median subtraction for each spectral slice,
# GreeDS{PCA} subtraction on spectral residual cube
julia> res = SliceSDI(Classic(), GreeDS(15))(data, angles, scales)
HCIToolbox.scale_list
— Functionscale_list(wavelengths)
Returns a list of scaling factors for aligning SDI tensors from a list of wavelengths.
Examples
julia> scale_list([0.5, 2, 4])
3-element Vector{Float64}:
8.0
2.0
1.0