Skip to content

nabu.reconstruction.rings

source module nabu.reconstruction.rings

Classes

  • MunchDeringer Initialize a "Munch Et Al" sinogram deringer. See References for more information.

  • VoDeringer An interface to Nghia Vo's "remove_all_stripe". Needs algotom to run.

  • SinoMeanDeringer Rings correction with mean subtraction/division. The principle of this method is to subtract (or divide) the sinogram by its mean along a certain axis. In short: sinogram -= filt(sinogram.mean(axis=0)) where filt is some bandpass filter.

source class MunchDeringer(sigma, sinos_shape, levels=None, wname='db15', padding=None, padding_mode='edge')

Initialize a "Munch Et Al" sinogram deringer. See References for more information.

Parameters

  • sigma : float Standard deviation of the damping parameter. The higher value of sigma, the more important the filtering effect on the rings.

  • levels : int, optional Number of wavelets decomposition levels. By default (None), the maximum number of decomposition levels is used.

  • wname : str, optional Default is "db15" (Daubechies, 15 vanishing moments)

  • sinos_shape : tuple, optional Shape of the sinogram (or sinograms stack).

  • padding : tuple of two int, optional Horizontal padding to use for reducing the aliasing artefacts

References

B. Munch, P. Trtik, F. Marone, M. Stampanoni, Stripe and ring artifact removal with combined wavelet-Fourier filtering, Optics Express 17(10):8567-8591, 2009.

Methods

  • remove_rings Main function to performs rings artefacts removal on sinogram(s). CAUTION: this function defaults to in-place processing, meaning that the sinogram(s) you pass will be overwritten.

source method MunchDeringer.remove_rings(sinos, output=None)

Main function to performs rings artefacts removal on sinogram(s). CAUTION: this function defaults to in-place processing, meaning that the sinogram(s) you pass will be overwritten.

Parameters

  • sinos : numpy.ndarray Sinogram or stack of sinograms.

  • output : numpy.ndarray, optional Output array. If set to None (default), the output overwrites the input.

source class VoDeringer(sinos_shape, **remove_all_stripe_options)

An interface to Nghia Vo's "remove_all_stripe". Needs algotom to run.

Methods

source method VoDeringer.remove_rings_sinogram(sino, output=None)

source method VoDeringer.remove_rings_sinograms(sinos, output=None)

source method VoDeringer.remove_rings_radios(radios)

source class SinoMeanDeringer(sinos_shape, mode='subtract', filter_cutoff=None, padding_mode='edge', fft_num_threads=None)

Rings correction with mean subtraction/division. The principle of this method is to subtract (or divide) the sinogram by its mean along a certain axis. In short: sinogram -= filt(sinogram.mean(axis=0)) where filt is some bandpass filter.

Parameters

  • sinos_shape : tuple of int Sinograms shape, in the form (n_angles, n_x) or (n_sinos, n_angles, n_x)

  • mode : str, optional Operation to do on the sinogram, either "subtract" or "divide"

  • filter_cutoff : tuple, optional Cut-off of the bandpass filter applied on the sinogram profiles. Empty (default) means no filtering. Possible values forms are: - (sigma_low, sigma_high): two float values defining the standard deviation of gaussian(sigma_low) * (1 - gaussian(sigma_high)). High values of sigma mean stronger effect of associated filters. - ((cutoff_low, transition_low), (cutoff_high, transition_high)) where "cutoff" is in normalized Nyquist frequency (0.5 is the maximum frequency), and "transition" is the width of filter decay in fraction of the cutoff frequency

  • padding_mode : str, optional Padding mode when filtering the sinogram profile. Should be "constant" (i.e "zeros") for mathematical correctness, but in practice this yields a Gibbs effect when replicating the sinogram, so "edges" is recommended.

  • fft_num_threads : int, optional How many threads to use for computing the fast Fourier transform when filtering the sinogram profile. Defaut is all the available threads.

Methods

source method SinoMeanDeringer.remove_rings_sinogram(sino, output=None)

Raises

  • NotImplementedError

source method SinoMeanDeringer.remove_rings_sinograms(sinos, output=None)

Raises

  • NotImplementedError