Skip to main content

A compressed sensing library for Python

Project description

pySPIRAL-TAP, a Python version of SPIRAL-TAP

# Inspiration

Everything comes from the code by [Zachary Harmany]( (

Original source: or (might be more up-to-date). The algorithm is described in this paper:
> Z. T. Harmany, R. F. Marcia, and R. M. Willett, "This is SPIRAL-TAP: Sparse Poisson Intensity Reconstruction ALgorithms – Theory and Practice," IEEE Transactions on Image Processing, vol. 21, pp. 1084–1096, Mar. 2012.

# Disclaimer

2. *Code*: still experimental.

# Install
## Requirements
`pySPIRALTAP` requires the following dependencies:
- `numpy`
- `rwt`, the Rice Wavelet Toolbox, available on this page:
- `` (only to run the demo)
- `pytest` (only to run the tests)

## Installing `numpy`
Installation using your package manager (Debian/Ubuntu):

sudo apt-get install python-numpy

Alternatively, if you have `pip` installed, you can install `numpy` by typing the following:

pip install --user numpy

## Installing `rwt`
You can install the [Rice Wavelet Toolbox]( by typing the following. Before that, make sure that you have `cmake` installed (`sudo apt-get install cmake` if you use a Debian-derived distribution):

git clone
cd rwt/python
cmake .
sudo make install

And then test if the installation succeeded by typing:

python -c "import rwt"

If this returns nothing, the installation worked. In case it returns an error such as:

Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named rwt

This means that the installation failed. It can be because the installation was performed using a different version of Python that is not the default version. So far, I do not have information about how to perform this installation.

More information about the installation can be found in the `INSTALL` file, or on the `rwt` [webpage](

## Installing `pySPIRALTAP`

Installation can be performed using the following `shell` commands:

git clone
sudo python install

# Usage/Example

## Demo examples
A simple working example can be run at (in the main folder):


This file contains one demo where a 1D signal is reconstructed using a $l1$ penalty. This demo uses `matplotlib` for plotting output.

Alternatively, one can play with the [Jupyter notebook]( `SPIRALdemo.ipynb`, that feature the same demo as ``, but in a more fancy format.

## Calling from a script
The pySPIRALTAP methods can be imported with `import pySPIRALTAP`.

## `SPIRALTAP` function parameters

Here is a canonical function call with many parameters exposed:

resSPIRAL = pySPIRALTAP.SPIRALTAP(y,A, # y: measured signal, A: projection matrix
1e-6, # regularization parameter
maxiter=100, # min. number of iterations
miniter=5, # max. number of iterations
penalty='canonical', # type of penalty to apply
noisetype='gaussian',# form of the log-likelihood penalty
stopcriterion=3, # index of the termination criterion
verbose=verbose, savecputime=True)

# Status
The methods based on RDP (*recursive dyadic partitions*) have not been implemented yet. Additionnally, the code has not been fully tested, although we did our best to provide a working product.

# License
- This software is released under the MIT license. See the `LICENSE` file for more details.
- The `denoise_bound` code is released under the GNU GPLv2 license and was written by Copyright (2008): Amir Beck and Marc Teboulle.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pySPIRALTAP, version 0.4.12
Filename, size File type Python version Upload date Hashes
Filename, size pySPIRALTAP-0.4.12.tar.gz (18.0 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page