DeconvOptim

A multi-dimensional, high performance deconvolution framework written in Julia Lang for CPUs and GPUs.

https://github.com/roflmaostc/deconvoptim.jl

Science Score: 57.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 8 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (16.8%) to scientific vocabulary

Keywords

deconvolution gpu image-processing julia microscopy

Keywords from Contributors

arrays interpolation matrix-exponential fft fourier imageprocessing automatic-differentiation julia-package julialang graphics
Last synced: 6 months ago · JSON representation ·

Repository

A multi-dimensional, high performance deconvolution framework written in Julia Lang for CPUs and GPUs.

Basic Info
Statistics
  • Stars: 65
  • Watchers: 4
  • Forks: 6
  • Open Issues: 10
  • Releases: 16
Topics
deconvolution gpu image-processing julia microscopy
Created almost 6 years ago · Last pushed 10 months ago
Metadata Files
Readme License Citation

README.md

DeconvOptim.jl


DeconvOptim Logo

A package for microscopy image based deconvolution via Optim.jl. This package works with N dimensional Point Spread Functions and images. The package was created with microscopy in mind but since the code base is quite general it is possible to deconvolve different kernels as well.

Deconvolution of a dataset with size 512x256x128 took 2.2 seconds on a RTX 3060 GPU!

| Documentation | Build Status | Code Coverage | Publication | |:---------------------------------------:|:-----------------------------------------:|:-------------------------------:|:-----------------------:| | | | |DOI|

Installation

Type ]in the REPL to get to the package manager: julia julia> ] add DeconvOptim

Documentation

The documentation of the latest release is here. The documentation of current master is here. For a quick introduction you can also watch the presentation at the JuliaCon 2021.

Usage

A quick example is shown below. ```julia using DeconvOptim, TestImages, Colors, ImageIO, Noise, ImageShow

load test image

img = Float32.(testimage("resolutiontest512"))

generate simple Point Spread Function of aperture radius 30

psf = Float32.(generate_psf(size(img), 30))

create a blurred, noisy version of that image

imgb = conv(img, psf) imgn = poisson(img_b, 300)

deconvolve 2D with default options

@time res, o = deconvolution(img_n, psf)

deconvolve 2D with no regularizer

@time resnoreg, o = deconvolution(img_n, psf, regularizer=nothing)

show final results next to original and blurred version

Gray.([img img_n res]) ``` Results Quick Example

Examples

Have a quick look into the examples folder. We demonstrate the effect of different regularizers. There is also a CUDA example. Using regularizers together with a CUDA GPU is faster but unfortunately only a factor of ~5-10. For 3D the speed-up is larger.

CUDA

For CUDA we only provide a Total variation regularizer via TV_cuda. The reason is that Tullio.jl is currently not very fast with CuArrays and especially the derivative of such functions.

Performance Tips

Regularizers

The regularizers are generated with metaprogramming when TV() (or any other regularizer) is called. To prevent that the code compile every time again, define the regularizer once and use it multiple times without newly defining it: julia reg = TV() And in the new cell then use: julia res, o = deconvolution(img_n, psf, regularizer=reg)

Development

Feel free to file an issue regarding problems, suggestions or improvement ideas for this package! We would be happy to deconvolve real data! File an issue if we can help deconvolving an image/stack. We would be also excited to adapt DeconvOptim.jl to your special needs!

Citation

If you use this paper, please cite it. Thes PDF is linked here. bibtex @article{Wechsler2023, doi = {10.21105/jcon.00099}, url = {https://doi.org/10.21105/jcon.00099}, year = {2023}, publisher = {The Open Journal}, volume = {1}, number = {1}, pages = {99}, author = {Felix Wechsler and Rainer Heintzmann}, title = {DeconvOptim.jl - Signal Deconvolution with Julia}, journal = {Proceedings of the JuliaCon Conferences} }

Contributions

I would like to thank Rainer Heintzmann for the great support and discussions during development. Furthermore without Tullio.jl and @mcabbott this package wouldn't be as fast as it is. His package and ideas are the basis for the implementations of the regularizers.

Related Packages

  • ThreeDeconv: works great, CPU performance is much slower, GPU performance is slower
  • Deconvolution.jl: rather simple package with Wiener and Lucy Richardson deconvolution.
  • PointSpreadFunctions.jl: generates point spread functions for microscopy applications

Owner

  • Name: Felix Wechsler
  • Login: roflmaostc
  • Kind: user
  • Location: EPFL, Lausanne, Switzerland

My passion is combining optics with computer science. Currently PhD @ LAPD @ EPFL

Citation (CITATION.bib)

@article{Wechsler2023,
  doi = {10.21105/jcon.00099},
  url = {https://doi.org/10.21105/jcon.00099},
  year = {2023},
  publisher = {The Open Journal},
  volume = {1},
  number = {1},
  pages = {99},
  author = {Felix Wechsler and Rainer Heintzmann},
  title = {DeconvOptim.jl - Signal Deconvolution with Julia},
  journal = {Proceedings of the JuliaCon Conferences}
}

GitHub Events

Total
  • Create event: 2
  • Commit comment event: 6
  • Issues event: 2
  • Release event: 1
  • Watch event: 4
  • Issue comment event: 2
  • Push event: 10
  • Pull request event: 3
Last Year
  • Create event: 2
  • Commit comment event: 6
  • Issues event: 2
  • Release event: 1
  • Watch event: 4
  • Issue comment event: 2
  • Push event: 10
  • Pull request event: 3

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 448
  • Total Committers: 6
  • Avg Commits per committer: 74.667
  • Development Distribution Score (DDS): 0.065
Past Year
  • Commits: 5
  • Committers: 2
  • Avg Commits per committer: 2.5
  • Development Distribution Score (DDS): 0.2
Top Committers
Name Email Commits
roflmaostc f****t@m****g 419
RainerHeintzmann h****n@g****m 15
CompatHelper Julia c****y@j****g 6
github-actions[bot] 4****] 4
Martin Kunz m****z@e****z 3
Tim Holy t****y@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 25
  • Total pull requests: 31
  • Average time to close issues: 24 days
  • Average time to close pull requests: about 1 month
  • Total issue authors: 7
  • Total pull request authors: 6
  • Average comments per issue: 1.44
  • Average comments per pull request: 1.23
  • Merged pull requests: 19
  • Bot issues: 0
  • Bot pull requests: 14
Past Year
  • Issues: 3
  • Pull requests: 2
  • Average time to close issues: N/A
  • Average time to close pull requests: 2 days
  • Issue authors: 1
  • Pull request authors: 2
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.5
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 1
Top Authors
Issue Authors
  • roflmaostc (17)
  • RainerHeintzmann (3)
  • stevengj (1)
  • renerichter (1)
  • kunzaatko (1)
  • JuliaTagBot (1)
Pull Request Authors
  • github-actions[bot] (15)
  • RainerHeintzmann (11)
  • kunzaatko (4)
  • jrkager (2)
  • timholy (1)
  • roflmaostc (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 4 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 17
juliahub.com: DeconvOptim

A multi-dimensional, high performance deconvolution framework written in Julia Lang for CPUs and GPUs.

  • Versions: 17
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 4 Total
Rankings
Dependent repos count: 9.9%
Stargazers count: 16.0%
Average: 23.2%
Forks count: 28.1%
Dependent packages count: 38.9%
Last synced: 6 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-docdeploy releases/v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/CompatHelper.yml actions