CurveLab Toolbox, Version 2.0
Emmanuel Cand`es, Laurent Demanet, Lexing Ying
Applied and Computational Mathematics
California Institute of Technology, Pasadena CA 91125
1 Introduction
CurveLab is a collection of Matlab and C++ programs for the Fast Discrete Curvelet
Transform in two and three dimensions.
For the 2d curvelet transform, the software package includes two distinct implementations:
the wrapping-based transform and the transform using unequally-spaced fast Fourier trans-
form (USFFT). Both variants are based on the Curvelet transform as described in ‘New
Tight Frames of Curvelets and Optimal Representations of Objects with Piec ewis e C
2
Singularities’, Comm. Pure Appl. Math. 57 (2004) 219-266. The implementation is
also discussed in detail in the Technical Report “Fast Curvelet Transforms” available at
http://www.curvelet.org. We advise users to b e com e familiar with these references.
The two implementations differ by the choice of spatial grid used to translate curvelets at
each scale and angle.
• The USFFT version uses a decimated rectangular grid tilted along the main direction
of each curvelet. There is one such grid per scale and angle, and this implementation
is therefore very close to the definition given in the above reference. For the digital
transform, tilting the grids induces a resampling of the Fourier transform on semi-
regular grids, hence the use of a (perhaps novel) USFFT routine. For the inversion,
a conjugate-gradient solver rapidly converges to the solution.
• The wrapping version uses, instead, a decimated rectangular grid aligned with the
image axes. For a given sc ale, there are essentially two such grids (decimated mostly
horizontally or mostly vertically). The resulting sampling is not as faithful to the
original transform, but the basis functions are curvelets as much as in the USFFT-
based implementation. Since no interpolation is necessary in the frequency plane, the
transform is a numerical isometry and can be inverted by its adjoint.
For the 3d curvelet transform, the software in this package is an extension of the wrapping
version in 2d. Due to the large size of the 3d data and the increased redundancy of the
curvelet transform, three different implementation are included:
• The in-core implementation which stores both the input data and the curvelet coef-
ficients in the memory.
• The out-core implementation which stores the input data in the memory and most of
the curvelet coefficients on the disc.
1