Curvelet FAQs

What are curvelets?

Curvelets have a long history and rich history in signal processing. They have been used for a multitude of tasks related in areas such as biomedical imaging (ultrasound, MRI), seismic imaging, synthetic aperture radar, among others. They allow us to extract useful features which can be used to attack problems such as segmentation, inpaining, classification, adaptive subtraction, etc.

You can find a good overview (disclaimer: I wrote it!) of curvelets in Demystifying Curvelets.

Curvelets are like wavelets, but in 2D (3D, 4D, etc.). So are steerable wavelets, Gabor wavelets, wedgelets, beamlets, bandlets, contourlets, shearlets, wave atoms, platelets, surfacelets… you get the idea. Like wavelets, these “X-lets” allow us to separate a signal into different “scales” (analog to frequency in 1D, that is, how fast the signal is varying), “location” (equivalent to time in 1D, that is, where the signal is varying), and the direction in which the signal is varying (no 1D analog).

What separates curvelets from the other X-lets are their interesting properties, including:

Why do we need another curvelet transform library?

There are three flavors of the discrete curvelet transform with publicly available implementations [1]. The first two are based on the Fast Discrete Curvelet Transform (FDCT) pioneered by Candès, Demanet, Donoho and Ying. They are the “wrapping” and “USFFT” (unequally-spaced Fast Fourier Transform) versions of the FDCT. Both are implemented (2D and 3D for the wrapping version and 2D for the USFFT version) in the proprietary CurveLab Toolbox in MATLAB and C++.

As of 2026, any non-academic use of the CurveLab Toolbox requires a commercial license. Any library which ports or converts Curvelab code to another language is also subject to Curvelab’s license. While this does not include libraries which wrap the CurveLab toolbox and therefore do not contain any source code of Curvelab, their usage still requires Curvelab and therefore its license. Such wrappers include curvelops, PyCurvelab, both MIT licensed.

A third flavor is the Uniform Discrete Curvelet Transform (UDCT) which does not have the same restrictive license as the FDCT. The UDCT was first implemented in MATLAB (ucurvmd [dead link]) by one of its authors, Truong Nguyen.

This library provides the first open-source, pure-Python implementation of the UDCT, borrowing heavily from Nguyen’s original implementation. The goal of this library is to allow industry professionals to use curvelets more easily. It also goes beyond the original implementation by providing a the support for complex signals, monogenic extension for real signals [Storath, 2010], and a wavelet transform at the highest scale.

Can I use the Curvelets package for deep learning?

Yes! The package provides a PyTorch module, UDCTModule, which can be used to train deep networks.

Should I use curvelets for deep learning?

This is yet another facet of the “data-centric” vs. “model-centric” debate in machine learning. Exploiting curvelets is a type of model engineering when used as part of the model architecture, or feature engineering when used as a preprocessing step.

It has been shown that fixed filter banks can be useful in speeding up training and improving performance of deep neural networks in some situations [Andreux et al., 2020, Luan et al., 2018]. My suggestion is to use curvelets or similar transforms for small to mid-sized datasets, especially in niche areas without a wide variety of high-quality training data.

Another aspect to consider is the availability of high-performance, GPU-accelerated, autodiff-friendly libraries. As far as I know, no curvelet library (apart from this one) satisfies those constraints. Alternative transforms can be found in Kymatio which implements the wavelet scattering transform [Bruna and Mallat, 2013] in PyTorch, TensorFlow and JAX, and Pytorch Wavelets which implements the dual-tree complex wavelet transform [Kingsbury, 2001] in PyTorch.

References

[AAE+20]

Mathieu Andreux, Tomás Angles, Georgios Exarchakis, Roberto Leonarduzzi, Gaspar Rochette, Louis Thiry, John Zarka, Stéphane Mallat, Joakim andén, Eugene Belilovsky, Joan Bruna, Vincent Lostanlen, Muawiz Chaudhary, Matthew J. Hirn, Edouard Oyallon, Sixin Zhang, Carmine Cella, and Michael Eickenberg. Kymatio: scattering transforms in python. Journal of Machine Learning Research, 21(60):1–6, 2020. URL: http://jmlr.org/papers/v21/19-047.html.

[BM13]

Joan Bruna and S. Mallat. Invariant scattering convolution networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 35(8):1872–1886, August 2013. doi:10.1109/tpami.2012.230.

[CDDY06]

Emmanuel Candès, Laurent Demanet, David Donoho, and Lexing Ying. Fast Discrete Curvelet Transforms. Multiscale Modeling & Simulation, 5(3):861–899, jan 2006. doi:10.1137/05064182X.

[CD05]

Emmanuel J. Candès and Laurent Demanet. The curvelet representation of wave propagators is optimally sparse. Communications on Pure and Applied Mathematics, 58(11):1472–1528, March 2005. doi:10.1002/cpa.20078.

[CD04]

Emmanuel J. Candès and David L. Donoho. New tight frames of curvelets and optimal representations of objects with piecewise C2 singularities. Communications on Pure and Applied Mathematics, 57(2):0219–0266, feb 2004. doi:10.1002/cpa.10116.

[CLKM17]

Jennifer Y. H. Chan, Boris Leistedt, Thomas D. Kitching, and Jason D. McEwen. Second-generation curvelets on the sphere. IEEE Transactions on Signal Processing, 65(1):5–14, January 2017. doi:10.1109/tsp.2016.2600506.

[Kin01]

Nick Kingsbury. Complex wavelets for shift invariant analysis and filtering of signals. Applied and Computational Harmonic Analysis, 10(3):234–253, May 2001. doi:10.1006/acha.2000.0343.

[LZZ+18]

Shangzhen Luan, Baochang Zhang, Siyue Zhou, Chen Chen, Jungong Han, Wankou Yang, and Jianzhuang Liu. Gabor convolutional networks. In 2018 IEEE Winter Conference on Applications of Computer Vision (WACV), 1254–1262. IEEE, March 2018. doi:10.1109/wacv.2018.00142.

[NC10] (1,2)

Truong T. Nguyen and Hervé Chauris. Uniform Discrete Curvelet Transform. IEEE Transactions on Signal Processing, 58(7):3618–3634, jul 2010. doi:10.1109/TSP.2010.2047666.

[Sto10] (1,2,3)

Martin Storath. The monogenic curvelet transform. In 2010 IEEE International Conference on Image Processing, 353–356. IEEE, sep 2010. doi:10.1109/ICIP.2010.5651318.

[WSF10]

A. Woiselle, J.-L. Starck, and J. Fadili. 3D curvelet transforms and astronomical data restoration. Applied and Computational Harmonic Analysis, 28(2):171–188, mar 2010. doi:10.1016/j.acha.2009.12.003.