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
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
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
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
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
M. Rivers, “Tutorial introduction to X-ray computed microtomography data processing,” http://www.mcs.anl.gov/research/projects/X-ray-cmt/rivers/tutorial.html.
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).
C. Raven, “Numerical removal of ring artifacts in microtomography,” Rev. Sci. Instrum. 69(8), 2978-2980 (1998).
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).