3.1.2. Prior methods for removing stripe artifacts

3.1.2.1. Normalization-based methods

Normalization-based methods rely on the assumption that stripe artifacts are mainly the full stripe type, i.e the intensity offsets of these stripes are constant across the angular direction. Different methods use different ways of calculating these offsets. Sinogram correction is done by adding or multiplying these offsets to the original sinogram.

3.1.2.1.1. Using a smoothing filter

Code

sarepy.prep.stripe_removal_former.remove_stripe_based_normalization(sinogram, sigma, num_chunk)[source]

Remove stripes using the method in Ref. [1]. Angular direction is along the axis 0.

Parameters
  • sinogram (array_like) – 2D array.

  • sigma (int) – Sigma of the Gaussian window.

  • num_chunk (int) – Number of chunks of rows.

Returns

ndarray – 2D array. Stripe-removed sinogram.

References

1

https://www.mcs.anl.gov/research/projects/X-ray-cmt/rivers/tutorial.html

How it works

Offsets are calculated by: averaging intensities along the angular direction; applying a smoothing filter to the result; subtracting these two.

How to use

– The sigma parameter controls the strength of the cleaning capability. Larger is stronger.
– The num_chunk parameter is used to divide a sinogram into multipe chunks of rows. This improvement helps to tackle partial stripes, however, it gives rise to void-center artifacts.

How to improve

– Can combine with the sorting-based method to avoid void-center artifacts.

3.1.2.1.2. Using a regularizer

Code

sarepy.prep.stripe_removal_former.remove_stripe_based_regularization(sinogram, alpha, num_chunk)[source]

Remove stripes using the method in Ref. [1]. Angular direction is along the axis 0.

Parameters
  • sinogram (array_like) – 2D array.

  • alpha (float) – Regularization parameter.

  • num_chunk (int) – Number of chunks of rows.

Returns

ndarray – 2D array. Stripe-removed sinogram.

References

1

https://doi.org/10.1016/j.aml.2010.08.022

How it works

Firstly, intensities along the angular direction are averaged. Then, the 1st discrete difference of the result is calculated. The offsets are determined by minimizing the differentiated result using a regularizer [2].

How to use

– The alpha parameter controls the strength of the cleaning capability. Smaller is stronger. Recommended values: 0.01 -> 0.0001
– The num_chunk parameter is used to divide the sinogram into multipe chunks of rows. This improvement helps to tackle partial stripes, however, it gives rise to void-center artifacts.

How to improve

– Can combine with the sorting-based method to avoid the void-center artifacts.

3.1.2.2. Fft-based methods

Fft-based methods rely on the assumption that stripe artifacts are corresponding to high-frequency components in the Fourier domain. As a result, they can be removed by damping these components.

3.1.2.2.1. Using the Fourier transform

Code

sarepy.prep.stripe_removal_former.remove_stripe_based_fft(sinogram, u, n, v, pad=150)[source]

Remove stripes using the method in Ref. [1]. Angular direction is along the axis 0.

Parameters
  • sinogram (array_like) – 2D array.

  • u,n (int) – To define the shape of 1D Butterworth low-pass filter.

  • v (int) – Number of rows (* 2) to be applied the filter.

  • pad (int) – Padding for FFT

Returns

ndarray – 2D array. Stripe-removed sinogram.

References

1

https://doi.org/10.1063/1.1149043

How it works

The Fourier transform is applied to a sinogram. A 1D low-pass window is multiplied with the row corresponding to the zero frequency in the vertical direction and its neighbors to remove stripes.

How to use

– The u parameter controls the strength of the cleaning capability. Smaller is stronger. Recommended starting value: 30.
– The n parameter defines the shape of the low-pass filter. It’s an insensitive parameter. Recommended value : 8.
– The v parameter allows to select how many rows around the zero-frequency row to be multiplied with the low-pass window. Larger v increases void-center artifacts. Recommended value: 1.
– The pad parameter is needed to reduce side effects of the Fourier transform.

How to improve

– Can combine with the sorting-based method to avoid void-center artifacts.

3.1.2.2.2. Using the Fourier transform and wavelet decomposition

Code

sarepy.prep.stripe_removal_former.remove_stripe_based_wavelet_fft(sinogram, level, sigma, order, pad=150)[source]

Remove stripes using the method in Ref. [1]. Angular direction is along the axis 0.

Parameters
  • sinogram (array_like) – 2D array.

  • level (int) – Wavelet decomposition level.

  • sigma (int) – Damping parameter. Larger is stronger.

  • order (int) – Order of the the Daubechies wavelets.

  • pad (int) – Padding for FFT

Returns

ndarray – 2D array. Stripe-removed sinogram.

Notes

Code adapted from tomopy source code https://github.com/tomopy/tomopy with a small improvement of using different ways of padding to reduce the side effect of the Fourier transform.

References

1

https://doi.org/10.1364/OE.17.008567

How it works

It’s very similar to the fft-based method. The improvement is that a sinogram is decomposed using the wavelet transform then a low-pass filter is applied to each of the decomposed image.

How to use

– The level parameter controls the decomposition level. Higher “level” means stronger cleaning capability. It is because applying the low-pass filter at a deeper level (corresponding to a smaller-size image) resulting in stronger impact to the recombined image.
– The sigma parameter also controls the strength of the cleaning capability. Larger is stronger, but also increases void-center artifacts.
– The order parameter is insensitive. Recommended value: 8.
– The pad parameter is needed to reduce side effects of the Fourier transform.

How to improve

– Can combine with the sorting-based method to avoid void-center artifacts.

REFERENCES

  1. M. Rivers, “Tutorial introduction to X-ray computed microtomography data processing,” http://www.mcs.anl.gov/research/projects/X-ray-cmt/rivers/tutorial.html.

  2. S. Titarenko, P. J. Withers, and A. Yagola, “An analytical formula for ring artefact suppression in X-ray tomography,” Appl. Math. Lett. 23(12), 1489-1495 (2010).

  3. C. Raven, “Numerical removal of ring artifacts in microtomography,” Rev. Sci. Instrum. 69(8), 2978-2980 (1998).

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