3D Deconvolution with Pyxu library
You can install pyxudeconv
via pip:
pip install pyxudeconv
To install latest development version :
pip install git+https://github.com/ThanhAnPham/pyxudeconv.git
After the package import, the deconvolution is performed by the function deconvolve
which expects the parameters (namespace). To modify the parameters, there are two ways
- Load the default parameters via
get_param
and modify each field of interestimport pyxudeconv par = pyxudeconv.get_param() par.psfpath = '/home/tampham/3DWCR/data/simulated/psf_sample_calib_nv_32_coi_2.ome.tif' par.datapath = '/home/tampham/3DWCR/data/simulated/g_sample_calib_nv_32_coi_2.ome.tif' par.phantom = '/home/tampham/3DWCR/data/simulated/phantom_sample_calib_nv_32_coi_2.ome.tif' par.fres = '/home/tampham/yo' par.saveIter = [10] par.methods = ['RL','GARL','Tikhonov'] imdeconv = pyxudeconv.deconvolve(par)
- Change the json file and load it.
import pyxudeconv par = pyxudeconv.get_param(param_file='./my_params.json') imdeconv = pyxudeconv.deconvolve(par)
Note that par.psfpath
and par.datapath
can be numpy.ndarray
already loaded in the python code
par.psfpath = mypsf #numpy.ndarray
par.datapath = mydata #numpy.ndarray
The main function deconvolve
can be called as a command-line with arguments or via a bash file (see main_example.sh
or main_calibration.sh
) with the option -m.
Two arguments are important if applied on your own data
datapath
: Path to the data to deconvolve OR if ran through a python script it can be a ndarray itselfpsfpath
: Path to the point-spread function OR if ran through a python script it can be a ndarray itself
Currently supported file formats
.czi
: Carl Zeiss files.tif
: Expected order of the dimension (Time, Views, Channels, Z, Y, X). Note that the file is first fully loaded, then the region of interest is kept for further processing. One drawback is that the RAM memory usage may be temporarily large.
An example of calling the script with a command-line
python -m pyxudeconv.deconvolve --fres '../res/donuts' --gpu 0 --datapath '../data/real_donut/data.tif' --psfpath '../data/real_donut/psf.tif' --saveIter 10 10 10 10 10 --nviews 1 --methods 'RL' 'GARL' --Nepoch 50 --bufferwidth 20 10 10 --pxsz 79.4 79.4 1000 --bg 0 --psf_sz -1 -1 128 128 --roi 0 0 150 150 --config_GARL 'widefield_params'
If Goujon accelerated Richardon-Lucy (GARL) and/or GPU will be used, please install torch
1 according to your case. For instance, If the GPU CUDA version is 12.1, the conda environment can be created in a terminal with the commands
conda create -n pyxudeconv python=3.11 pytorch=2.4.1 pytorch-cuda=12.1 tifffile numpy scipy matplotlib -c pytorch -c nvidia -c conda-forge
conda activate pyxudeconv
pip install pyxu[complete]
To use GARL, call python -m pyxudeconv.deconvolve
with the argument --methods 'GARL'
.
To run over different hyperparameters, you can add the argument --config_GARL 'full_path/your_config_file.json'
.
Note: Each parameter must be a list of values, even if it is a single-valued list.
For instance, here is an example of a .json
config file
{
"WCRnet": ["pyxudeconv/trained_models/3Dtubes/"],
"epochoi": [40180],
"lmbd": [0.1, 0.5],
"sigWC": [0.1, 0.5]
}
Alternatively, one can set a range of values for a parameter (e.g., lmbd
) as follows
{
"WCRnet": ["pyxudeconv/trained_models/3Dtubes/"],
"epochoi": [40180],
"lmbd_min": 0.1,
"lmbd_max": 0.5,
"lmbd_nsteps": 2,
"sigWC": [0.1, 0.5]
}
#ToDo
The function simulate
can simulate measurements obtained from a phantom defined by --phantom your_phantom_file
convolved with a PSF defined by --psfpath your_psf_file
. Future releases may change the organisation of the simulation part.
Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.
Distributed under the terms of the MIT license, "pyxudeconv" is free and open source software
If you encounter any problems, please file an issue along with a detailed description.
Footnotes
-
21/10/2024, there might be an incompatiblity with the
sympy(==1.13.1)
package version required bypytorch >= 2.5.0
. Either downgradesympy
to1.13.1
(but may create incompatibilities withpyxu
) or installpytorch=2.4.1
. ↩