Algorithms for performing angular differential imaging (ADI)
Author JuliaHCI
4 Stars
Updated Last
1 Month Ago
Started In
March 2020


Build Status PkgEval Coverage License

Stable Dev JOSS DOI

A package for angular differential imaging (ADI) post-processing algorithms.


ADI.jl is a registered package and can be installed using the Julia package manager. From the Julia REPL, enter Pkg mode (by pressing ])


(@v1.5) pkg> add ADI

To exit Pkg mode, just backspace. Once the package is installed it can be imported with

julia> using ADI

To exit Pkg mode, just backspace. Once the package is installed it can be imported with For more information, see the Pkg documentation.


If you use ADI.jl or derivates in your work, please consider citing both the JOSS paper and the code record. The JOSS paper citation can be found in CITATION.bib. The code will have a unique reference for each released version, so visit the zenodo record to grab the BibTeX for whichever version you used.


The following is an extremely brief PCA reduction of an ADI cube. Please see the documentation for further usage, tutorials, and api reference.

julia> using ADI

julia> cube, angles = # load data

julia> alg = PCA(ncomps=10)

julia> flat_resid = alg(cube, angles) # ADI

julia> flat_resid_rdi = alg(cube, angles; ref=cube_ref) # flexible RDI

get the S/N and significance

julia> fwhm = # PSF fwhm in pixels

julia> snmap = detectionmap(snr, flat_residual, fwhm)

julia> sigmap = detectionmap(significance, flat_residual, fwhm)

get the contrast curve

julia> psf = # load psf or choose from HCIToolbox.Kernels

julia> cc = contrast_curve(alg, cube, angles, psf; fwhm=fwhm)

which can be easily loaded into a DataFrame or anything adopting the Tables.jl interface.

julia> using DataFrames

julia> df = DataFrame(cc)

julia> first(df, 5)

Contributing and Support

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages

In general contributions should follow ColPrac. If you are interested in extending/improving ADI.jl, head to the discussions to reach out. For support with using ADI.jl, please open an issue describing the problem and steps to reproduce it.


This package is licensed under the MIT Expat license. See LICENSE for more information.

Author's Note: This package is still under active development and is subject to change. Anything from minor behind-the-scenes details to large-scale design can change as I incorporate more methods into ADI.jl. I don't plan on spending much time with deprecation warnings throughout this process, since that limits my ability to experiment with implementation ideas and design goals. This package follows semantic versioning, so an upgrade from 0.6 to 0.7 may be breaking and I recommend anybody using this package to browse the release notes for changes. Once ADI.jl is somewhat stable, I'll release a version 1.0, at which point I'll worry about deprecations and other long-term usability considerations.