$% Math \newcommand{\diff}{\operatorname{d}\!} \newcommand{\setR}{\mathbb{R}} \newcommand{\setN}{\mathbb{N}} \newcommand{\esp}[1]{\mathbb{E}\left[#1\right]} \newcommand{\Space}{\phantom{grrr}} \newcommand{\argmin}[1]{\underset{#1}{\operatorname{argmin}} \; } \newcommand{\Argmin}[1]{\underset{#1}{\operatorname{Argmin}} \; } \newcommand{\argmax}[1]{\underset{#1}{\operatorname{argmax}} \; } \let\oldvec\vec \renewcommand{\vec}{\boldsymbol} %boldsymbol or mathbf ? \newcommand{\tv}[1]{\operatorname{TV}\left( #1 \right)} \newcommand{\prox}[2]{\operatorname{prox}_{#1}{\left(#2\right)}} \newcommand{\proj}[2]{\operatorname{Proj}_{#1}{\left(#2\right)}} \newcommand{\sign}[1]{\operatorname{sign}\left( #1 \right)} \newcommand{\braket}[2]{\left\langle #1 \, , \, #2 \right\rangle} \renewcommand{\div}{\operatorname{div}} \newcommand{\id}{\operatorname{Id}} \newcommand{\norm}[1]{\left\| #1 \right\|} \newcommand{\lag}[1]{\mathcal{L}\left( #1 \right)} \newcommand{\mmax}[2]{\max_{#1}\left\{ #2 \right\}} \newcommand{\mmin}[2]{\min_{#1}\left\{ #2 \right\}} \newcommand{\conv}{\ast} \newcommand{\ft}[1]{\mathcal{F}\left( #1 \right)} \newcommand{\ift}[1]{\mathcal{F}^{-1}\left( #1 \right)} \newcommand{\pmat}[1]{\begin{pmatrix} #1 \end{pmatrix}} \newcommand{\E}[1]{\cdot 10^{#1}} %notation scientifique. Utiliser "e", "E", ou "10^" ? \newcommand{\amin}[2]{\underset{#1}{\operatorname{argmin}} \; \left\{ #2 \right\} }$

# Iterative rings artifacts correction¶

PyHST2 implements a new rings correction algorithm described here. This method performs an iterative rings removal, thus, it is especially interesting if you are using an iterative reconstruction. If you are not using an iterative reconstruction, you should first consider standard correction methods (sinogram pre-processing and slice post-processing) !

## Basic usage¶

The parameters enabling the rings correction are the following :

ITER_RING_HEIGHT = 50000 # Put a huge value
ITER_RING_SIZE = 1  # Only relevant for DL
ITER_RING_BETA = 0.5 # Weight of the "sparsity" of the rings


The parameter ITER_RING_HEIGHT, when different from zero, enables the iterative rings correction. The parameter ITER_RING_BETA weights the sparsity of the rings which are substracted to the sinogram. For high values, the rings are expected to be narrow. For low values, the rings are expected to be large.

The parameter ITER_RING_SIZE is only relevant for Dictionary-based reconstruction. It is the expected size of the rings. Typical values are 1 or 2.

## Partial rings¶

For Dictionary-based reconstruction, this method has been extended for partial rings, i.e artifacts which do not have the same “intensity” over 360 degrees.

NUMBER_OF_RINGS = 1 # When using partial rings correction (only for DL)


This parameter indicates that the 360° circle will be split in NUMBER_OF_RINGS parts.

Warning : this feature is still experimental !