SDI
SDI should be considered very experimental.
ADI.SDIAlgorithm — TypeADI.SDIAlgorithm <: ADI.ADIAlgorithmSpectral 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