ThreshLab: Matlab algorithms for wavelet noise reduction
Version 4.6.1, released April 2020
Key words: Wavelet, multiscale, sparse, nonequidistant, threshold, inverse
ThreshLab is a collection of Matlab procedures that runs without any additional
toolbox. In the early years, it was set up to be combined with
WaveLab, but since long it
has been standing on its own, i.e. it provides its own procedures for wavelet
ThreshLab has several routines for:
See a more extended table of contents
fast and undecimated, (bi)orthogonal, 1D, 2D, first generation,
i.e., classical filterbanks (Mallat's algorithm) on equispaced data,
but also second generation, using the lifting scheme on nonequispaced data.
Special attention was paid to fast implementation through Matlab blass
routines and polyphase implementation of filter banks.
Multiscale local polynomial transforms (MLPT):
by wavelet thresholding, including threshold assessment by
minimum prediction error, minimum SURE, minimum GCV, EBayesThresh.
Hidden Markov Field
modelling of wavelet coefficients
Variable selection in sparse high-dimensional models
including LARS/lasso algorithms, mirror correction (Jansen, 2013, Biometrika),
best subtree selection
History of added features
Version 1.2.1 added:
CVS - Conditional Variance Stabilisation for Poisson
intensities, including a Bayesian model within this framework.
It also includes routines for Fisz-wavelet transforms (Fryzlewicz,
Nason). Some of the test routines require that you download software from
Sapatinas' collection of Poisson Wavelet Denoising Software.
See the related paper on Poisson intensity estimation:
M. Jansen: Multiscale Poisson data smoothing, JRSSb, 68(1), pages
Version 2.1.1 added:
Continuous unbalanced Haar transform for change point
Version 3.1.1 (Nov. 2009) added:
Iterative soft- and hard-thresholding with variable
thresholds for inverse problems
Lasso, hard-thresholding, mirror correction
See these papers:
Generalized Cross Validation in variable selection with and without
Journal of Statistical Planning and Inference. To Appear.
Information criteria for variable selection under sparsity.
Biometrika, 101(1), pages 37-55, 2014.
Version 3.1.2 (Mar. 2010) added:
Version 3.1.3 (Mar. 2010) added:
Version 3.1.4 (Sep. 2010) added:
minor updates and
PiefLab (the old name of this package) into ThreshLab (version Pi)
Version 3.1.5 (Mar. 2011) added:
Version 3.1.6 (Feb. 2012) added:
Version 3.2.1 (Mar. 2012) added:
multiscale kernel and local polynomial transforms
See this paper:
Multiscale local polynomial smoothing in a lifted pyramid for
IEEE Transactions on Signal Processing, 61(3), pages 545-555, 2013.
Version 3.2.2 (Sep 2012) added:
Version 3.2.3 (Dec 2012) added:
Version 3.2.4 (Nov 2013) added:
Version 4.1.1 (Dec 2014) added:
Second generation spline wavelets
Version 4.1.2 (Feb 2015) added:
new version of finescaleBsplinecoefs.m + minor updates
Version 4.1.3 (June 2015) added:
minor updates and numerical issues (e.g. in cumgauss.m)
Version 4.1.4 (July 2015) added:
minor updates; renamed main routines for Multiscale Local Polynomial Decomposition (old names are now in folder ThreshLab/OldNames)
Version 4.2.1 (Sep 2015) added:
2D scattered data Multiscale Local Polynomial Decomposition (FMLPT2D and IMLPT2D)
Version 4.2.2 (Apr 2016) added:
various small updates
Version 4.3.1 (Jan 2017) added:
Best subtree selection, along with numerous small updates
Version 4.3.2 (March 2017) added:
various small updates (Slight simplification in parameter handling FMLPT1D;
exact calculation of B-spline moments in Bsplinemoments.m,...)
Version 4.3.3 (Nov 2018) added:
Version 4.3.4 (Nov 2018) added:
minor updates (fixed bugs in FMLPT1D1step.m and IMLPT1D1step.m)
Version 4.4.1 (Dec 2018):
New (equivalent) implementations of FMLPT1D.m and IMLPT1D.m (simpler code,
no longer calling FMLPT1D1step.m and IMLPT1D1step.m; removed all code for
adaptive MLPT); New implementation (not equivalent) of splitfrombandwidth.m;
several minor updates
Version 4.4.2 (Jan 2019) added:
minor updates (extended output parameters FMLPT1D.m)
Version 4.4.3 (Apr 2019) added:
(corrections in illustratefinescalecoefs and derivBsplinebasis)
Version 4.4.4 (Sep 2019) added:
(adding Gasser-Müller estimation in kernelestimation.m, correction coiflet.m, adding integralkernel.m)
Version 4.5.1 (Oct 2019) added:
refinementfromliftingsteps.m in ThreshLab2/Irregular/1D/
minor maintenance (allpowercoefsBsplines.m, Bsplinebasis.m, Bsplinebasisbyrefinement.m, refinementfromliftingsteps.m)
Version 4.5.2 (Dec 2019) added:
DDbasisbyrefinement.m, grammatrixBsplines.m, updatesemiorth.m
major extension in Bsplinebasisbyrefinement (end points handling)
and in FWT_2Gspline.m (semi-orthogonal B-spline wavelet transforms);
Revision of drawaxes for proper handling of legend;
minor maintenance (CDF_LDL.m, CDFspline.m, constructMLPTtree.m, finescalehist.m,weightedLSpol.m, refinescalingfunctionsMLPT.m
Version 4.6.1 (April 2020) added:
Second generation wavelet packet transforms (FWT_2Gpacket.m and IWT_2Gpacket.m
Revision of second generation nondecimated wavelet transforms (filenames
starting with RWT_2G and IRT_2G in ThreshLab2/Irregular/1D/)
Users without access to Matlab may download and install first
GNU Octave (a free alternative)
ThreshLab should run on octave as well. If you experience serious troubles, you
are welcome to report them! (see contact info at the bottom of this page)
Download the tar-file to your favorite directory.
unwrap the tar-file. In Unix/Linux this is done by: tar xvf threshlab.tar . This
creates a directory ThreshLab with subdirectories.
cd ThreshLab and edit the startup.m file to adapt it to your specific path. This
startup file sets the Matlab path, thereby giving access to all .m-files in the
starting Matlab in ThreshLab should now make all .m-files available
Alternatively, you can work with this zip file
You can download several
Type `help ThreshLab' (mind the capitals!) after having started Matlab in the
ThreshLab-directory. The answer will be a list of .m-files and subdirectories.
Browse through this list by typing `help ' (omitting the
The subdirectory ThreshLab/Tests has several test procedures (mainly with images)
The command `gcvdemo' starts a very simple demonstration of GCV threshold
estimation. See ThreshLab/Tests/GCVdemo.
This software is copyrighted material. Permission is
granted to use and modify this software for research, under the following
Research in or financed by weapon or tobacco industry is excluded without
any exception from the use of this software.
Any commercial use without explicit permission is strictly forbidden.
All research papers presenting results which are (partly) based on this
software should include in their bibliography one or more references to the
corresponding papers. Check
this list of
All redistributions of this software, even if modified or compiled or
translated into a different programming language or binary code, should
mention the origin of the software and include these copyright instructions.
This software comes as it is. No guarantee whatsoever is given. The author
cannot be held responable for any misunderstanding, incorrect use, false
scientific conclusions or other problems following this software.
Users are welcome to report any bug to
This page is maintained by