## 2 Materials and Methods  
In this paper, ring artifact reduction was performed on a Shepp-Logan (Yu-Ye-Wang type) tomographic phantom [16]. The phantom was generated at a 512 \(\times\) 512 \(\times\) 512 px resolution. All operations, reconstruction and calculations were performed in the Python 3.8 environment with the Tomographic Iterative GPU-based Reconstruction Toolbox (TI-GRE toolbox v.2.6) [17]. The python environment uses the libraries NumPy v. 1.21.5 ([[https://numpy.org](https://numpy.org)]([https://numpy.org](https://numpy.org)), accessed on 20 April 2024), OpenCV v. 4.6.0 ([[https://opencv.org](https://opencv.org)]([https://opencv.org](https://opencv.org)), accessed on 20 April 2024), Matplotlib v. 3.6.2 [18], PyWavelets v. 1.4.1 [19] and EMD v. 0.5.5 [20]. The development environment was run on a Windows 11 Pro computer equipped with an i7-12700 KF 3.60 GHz processor, an NVIDIA GeForce RTX 3070 Ti OC 8 GB (New Taipei, Taiwan) graphics card with a 6144 CUDA core, and 64 GB of DDR4 RAM. After performing ring artifact reduction, the phantom was reconstructed using the FDK algorithm with Shepp-Logan filtering. The process of performing the reconstruction and comparing the results of different reconstruction algorithms with their description was presented in the authors' earlier work [21]. Before performing ring artifact reduction, artifacts were introduced into the generated phantom. Translation of the phantom to sinograms was performed, and 18 stripes with a width of one pixel were introduced at an equal distance from the center of the sinogram (Figure 2). Tests were performed using stripes with values ranging from 2 to 20% larger than the initial grayscale pixel value. Subsequently, all sinograms \(S_{k}(n,j)\) were subjected to discrete two-dimensional first-level wavelet decomposition using wavelets from the \"Haar\", \"Daubechies\", \"Symlets\", \"Coiflets\", \"Biorthogonal\" and \"Discrete FIR approximation of Mayer wavelet\" families. Further analysis was performed on the image after high-pass filtering horizontally scaled and low-pass filtering vertically scaled to the dimensions of the original sinogram [22; 23] (Figure 3a). For each sinogram after decomposition \(T_{k}(n,j)\), the lower \(b_{L}\) and upper \(b_{H}\) levels of the correct pixel values were determined. They were calculated based on the average value of the normalized image of the sinogram before decomposition \(w_{s}=Mean\big{(}S_{k}^{n}(n,j)\big{)}\), the average standard deviation of the sinogram after decomposition \(m_{1}=SD(T_{k}(x,y))\), the average value of the pixels in the image after decomposition \(m_{2}=Mean(T_{k}(x,y))\), and a window width factor \(k\) selected experimentally. The calculation of the levels of pixel values and binarization follows the following formulas:  
\[w_{1}=kw_{s}\sqrt[4]{w_{s}} \tag{4}\]  
\[w_{2}=k(0.2-w_{s})\sqrt[4]{w_{s}} \tag{5}\]  
\[b_{L}=m_{1}-w_{2}m_{2} \tag{6}\]  
\[b_{H}=m_{1}+w_{1}m_{2} \tag{7}\]  
\[if\ T_{k}(n,j)\leq b_{H}\ and\ T_{k}(n,j)\geq b_{L},\ T_{k}(n,j)=0; \tag{8}\]  
\[if\ T_{k}(n,j)\leq b_{L}\ and\ T_{k}(n,j)\geq b_{H},\ T_{k}(n,j)=1. \tag{9}\]  
As a result of these operations, we obtained a matrix of size for image decomposition \(T_{k}(n,j)\) of zeros and ones \(B_{k}(n,j)\) (Figure 3b). The matrix \(B_{k}(n,j)\) was summed with respect to the columns, and the values were divided by the number of rows in the matrix. We obtained a single row matrix \(N_{k}(j)=\frac{\sum_{n}B_{k}(n,j)}{n}\). The column positions in the image \(j\) of stripe occurrences were identified when \(N_{k}(j)\geq T\), where \(T\) is the thresholding level determined experimentally for a particular data set (Figure 4). The positions of artifact occurrences were subjected to local filtering using line interpolation in a window of 0.5% of the image width rounded to the nearest whole odd number, but not less than 3 pixels (pascal). The operation result was a corrected image \(S_{k}^{\prime\prime}(n,j)\). \(\sum_{t}S_{k}^{\prime}(n,j)\).