The Shape COnstraint REstoration algorithm (SCORE) is a proximal algorithm based on sparsity and shape constraints to restore images. Its main purpose is to restore images while preserving their shape information. The chosen shape information here, is the ellipticity which is used to study galaxies for cosmological purposes. In practice, SCORE give an estimation of the ground truth image, , of the inverse problem :
with
where are respectively the observation, the convolution kernel and a white additive Gaussian of standard deviation , is the shape constraint operator, is trade-off between the datafidelity and the shape constraint, is the positivity constraint operator (under the assumption that all the entries of are non-negative values) and finally, is the sparsity constraint (assuming that is sparse).
- Getting Started
- Running the examples
- Parameters
- Reproducible Research
- Authors
- License
- Acknowledgments
These instructions will get you a copy of the project up and running on your local machine. One easy way to install the prerequisites is using Anaconda. To install Anaconda see : https://docs.conda.io/projects/conda/en/latest/user-guide/install/
- Numpy
conda install -c anaconda numpy
- Scipy
conda install -c anaconda scipy
- Skimage
conda install -c conda-forge scikit-image
- α-shearlet Transform
Clone the library (https://github.com/dedale-fet/alpha-transform) and run the commands below to get the approriate version :
git clone https://github.com/dedale-fet/alpha-transform.git
cd alpha-transform/
git checkout adcf993
Then add the path of the α-shearlet Transform library to the PYTHONPATH variable in the bash profile
export PYTHONPATH="$HOME/path/to/alpha-transform-master:$PYTHONPATH"
Replace path/to
by the corresponding path
- GalSim [optional] (for research reproducibility)
conda install -c conda-forge galsim
- Matplotlib [optional]
conda install -c conda-forge matplotlib
After install the prerequisites, clone or download score
repository. And to be able to access from any working directory, use the following command to add the path to score
to PYTHONPATH variable in the bash profile :
export PYTHONPATH="$HOME/path/to/score:$PYTHONPATH"
Replace path/to
by the corresponding path
This repository contains two examples. They respectively illustrate a denoising and a deconvolution case.
In this simple denoising case, we restore a galaxy image corrupted by noise. The core of the code is:
#instantiate score and, for example, set the value of gamma the other parameters will take their default values
denoiser = score(gamma=0.5)
#denoise
denoiser.denoise(obs=gal_obs) #the result will be in denoiser.solution
It is also possible to change other parameters in score
.
In this deconvolution case, we compare the score algorithm with a value of γ = 1 (which is close to its optimal computed value) and the Sparse Restoration Algorithm (γ = 0 and no Removal of Isolated Pixels). We loop on a stack of galaxy images and perfom both deconvolution operation on each image:
#loop
for obs, psf, gt in zip(gals_obs,psfs,gals):
#deconvolve
g1.deconvolve(obs=obs,ground_truth=gt,psf=psf)
g0.deconvolve(obs=obs,ground_truth=gt,psf=psf)
#update ellipticity error lists
g1_error_list += [g1.relative_ell_error]
g0_error_list += [g0.relative_ell_error]
The following is an exhaustive list of parameters of score
:
Parameter | Type | Information |
---|---|---|
obs |
2D Numpy Array | observation (required) |
psf |
2D Numpy Array | convolution kernel (required for deconvolution) |
ground_truth |
2D Numpy Array (none by default) | ground_truth image (optional) |
sigma |
positive scalar | noise standard deviation (optional) |
beta_factor |
positive scalar < 1 (0.95 by default) | multiplicative factor to ensure that beta is not too big (optional) |
epsilon |
positive scalar | error upperbound for the Lipschitz constant estimation (optional) |
n_maps |
positive integer | threshold estimation parameter for hard thresholding (optional) |
n_shearlet |
positive integer (3 by default) | number of scales for the shearlet transform (optional) |
n_starlet |
positive integer (4 by default) | number of scales for the starlet transform (optional) |
starlet_gen |
positive integer (either 1 or 2) | starlet generation (optional) |
beta |
positive scalar | gradient step size (optional) |
k |
positive integer (3 by default) | threshold parameter for hard thresholding (optional) |
rip |
boolean (true by default) | activate Removal of Isolated Pixels after restoration (optional) |
gamma |
non-negative scalar (1 by default) | trade-off between data-fidelity and shape constraint (optional) |
n_itr |
positive integer | maximum number of iterations (optional) |
tolerance |
positive scalar < 1 (1e-6 by default) | threshold of the convergence test for deconvolution (optional) |
verbose |
boolean (true by default) | to activate verbose (optional) |
The code generate_dataset.py
allows to recreate the exactly the same dataset used for the numerical experiments of the original paper of score
. To be able to run this code, the catalog COSMOS_25.2_training_sample
is required. It is available as a compressed file, COSMOS_25.2_training_sample.tar.gz
, on this link.
See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the LICENSE.md file for details
We would like to thank the following researchers :
- Samuel Farrens for giving precious tips in programming.
- Axel Guinot for helping generating the dataset.
- Ming Jiang for providing the starlet transform code.
- Jérôme Bobin for giving us tips in optimisation.