.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/filters/plot_deconvolution.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_filters_plot_deconvolution.py: ===================== Image Deconvolution ===================== In this example, we deconvolve an image using Richardson-Lucy deconvolution algorithm ([1]_, [2]_). The algorithm is based on a PSF (Point Spread Function), where PSF is described as the impulse response of the optical system. The blurred image is sharpened through a number of iterations, which needs to be hand-tuned. .. [1] William Hadley Richardson, "Bayesian-Based Iterative Method of Image Restoration", J. Opt. Soc. Am. A 27, 1593-1607 (1972), :DOI:`10.1364/JOSA.62.000055` .. [2] https://en.wikipedia.org/wiki/Richardson%E2%80%93Lucy_deconvolution .. GENERATED FROM PYTHON SOURCE LINES 19-58 .. image-sg:: /auto_examples/filters/images/sphx_glr_plot_deconvolution_001.png :alt: Original Data, Noisy data, Restoration using Richardson-Lucy :srcset: /auto_examples/filters/images/sphx_glr_plot_deconvolution_001.png :class: sphx-glr-single-img .. code-block:: default import numpy as np import matplotlib.pyplot as plt from scipy.signal import convolve2d as conv2 from skimage import color, data, restoration rng = np.random.default_rng() astro = color.rgb2gray(data.astronaut()) psf = np.ones((5, 5)) / 25 astro = conv2(astro, psf, 'same') # Add Noise to Image astro_noisy = astro.copy() astro_noisy += (rng.poisson(lam=25, size=astro.shape) - 10) / 255. # Restore Image using Richardson-Lucy algorithm deconvolved_RL = restoration.richardson_lucy(astro_noisy, psf, num_iter=30) fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(8, 5)) plt.gray() for a in (ax[0], ax[1], ax[2]): a.axis('off') ax[0].imshow(astro) ax[0].set_title('Original Data') ax[1].imshow(astro_noisy) ax[1].set_title('Noisy data') ax[2].imshow(deconvolved_RL, vmin=astro_noisy.min(), vmax=astro_noisy.max()) ax[2].set_title('Restoration using\nRichardson-Lucy') fig.subplots_adjust(wspace=0.02, hspace=0.2, top=0.9, bottom=0.05, left=0, right=1) plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.895 seconds) .. _sphx_glr_download_auto_examples_filters_plot_deconvolution.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-image/scikit-image/v0.21.x?filepath=notebooks/auto_examples/filters/plot_deconvolution.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_deconvolution.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_deconvolution.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_