Implemented algorithm of Feldkamp filtration phase.
Performed steps and means to control them

Step 1. Detector imperfection compensation

Projection down-sampling (binning). Combining NxM pixel neighborhood to get an average signal value. Useful to reduce a noise.

Projection cropping (excluding projection margins from further calculations) and dead pixel auto-detection.

Dark and bright field non-uniformity calibration. The result of this operation is logged attenuation values. Typically detector manufacturers provide non-uniformity calibration components integrated into acquisition software. However since a conversion from intensity to logged attenuation values is obligatory for the reconstruction algorithm, dark and bright field non-uniformity calibration is typically applied in a trivial form (when dark and bright field are constant). 

Step 4. Filtering in a Fourier domain

Classic step of filtered back-projecting algorithm.
Cobra provides a set of different filters presented by files on the disk. There is also a description available how to create user-defined filters.



Step 6. Additional vertical and non-linear smoothing

Cobra incorporates multiple linear and non-linear filters providing signal smoothing and noise reduction in a space domain



Step 2. Protrusion compensation

When a scanned object is partially outside a field of view then a reconstruction task becomes mathematically ill conditioned. It is causing severe artifacts unless it is compensated.

Step 3. Beam-hardening compensation

Non-monochromatic x-ray beam is causing a corrupting artifact known as a beam hardening. In simple words, when a beam is non-monochromatic then areas with large attenuation factors are less attenuating than they should. A simple heuristic approach for compensating it (partially) is applying  non-linear polynomial signal pre-distortion.

Step 5. Converting to a predefined dynamic range (scaling)

Cobra internal back-projecting loops require an intermediate signal mapped into a specific dynamic range. In Cobra it is called scaling. Scaling factor can be defined automatically or set explicitly by user. Rules, how to choose an appropriate scale factor, are pretty simple. A particular applied scaling factor influences an image quality but does not affect a dynamic range of output image (unless a choice is severely wrong)

Step 7. Additional vertical and non-linear smoothing

Cobra incorporates multiple linear and non-linear filters providing signal smoothing and noise reduction in a space domain

 
top_bord

Describing a reconstruction task

Within the COBRA reconstruction package, all input, output and intermediate data are kept on the hard disk. The user defines and controls the reconstruction task through a parameter file, a text file with extension .xxm. This file contains tags and assigned values, and describes the scanner hardware setup, input and output data characteristics and representation, and the chosen reconstruction method. Some of the reconstruction options are only accessible through SDK API’s. These are related to synchronization and control of in-line reconstruction (recon concurrent with acquisition), and the setup of COBRA’s working folders.
block_bord_bot
bord_bot top_bord

Tags defining Feldkamp filtration phase

PARTAG_OFFSET

PARTAG_OFFSET

Defines: a constant value as ADC offset (constant uniform dark field)
Value type: integer
Default value: 0
PARTAG_AIRLEVEL

PARTAG_AIRLEVEL

Defines: a constant value as the air intensity
Value type: integer
Default value: 32000
PARTAG_SCALEFACTOR

PARTAG_SCALEFACTOR

Factor for fitting the dynamic range of the filtered projections into signed word scale
Value type: float
Default value: 700
OPTTAG_AIRCAL

OPTTAG_AIRCAL

Defines: If set to 1 then air raw (bright field) calibration in Feldkamp filtering phase is being applied
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_LOG

OPTTAG_LOG

Defines: If set to 1 then logarithm operation in Feldkamp filtering phase is being applied
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_OFFSET

OPTTAG_OFFSET

Defines: If set to 1 then ADC offset (dark field) calibration in Feldkamp filtering phase is being applied
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_FFT

OPTTAG_FFT

Defines: If set to 1 then filtering operation in Feldkamp filtering phase is being applied
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_PARKER

OPTTAG_PARKER

Defines: If set to 1 then filtering operation in Feldkamp filtering phase is being applied
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_SLVERTFILT

OPTTAG_SLVERTFILT

Defines: If set to 1 then a vertical smoothing (along axis of rotation) in Feldkamp filtering phase is being applied. Smoothing aperture = 3.
Value type: integer (can be 0 or 1)
Default value: 1
OPTTAG_VRTSMOOTH

OPTTAG_VRTSMOOTH

Defines: If set to 1 then a vertical smoothing (along axis of rotation) in Feldkamp filtering phase is being applied. Smoothing aperture = 5.
Value type: integer (can be 0 or 1)
Default value: 0
PARTAG_PREPROSMOOTHFACTOR

PARTAG_PREPROSMOOTHFACTOR

Defines: When PARTAG_PREPROSMOOTHFACTOR is set to a number different than 0 then a 2-dimensional non-linear filter is being applied. This filter has the following parameters: hori-zontal and vertical aperture and a signal standard deviation to control a boundary-preserving behavior (to set the level of noise). This filter is being applied in the spatial domain on pre-FFT stage (on the logged attenuation signal representation) to normalized preprocessed signal. The filter is defined by three parameters: Ax (horizontal aperture), Ay (vertical aperture), V (signal variation).
Use PARTAG_PREPROSMOOTHFACTOR to set up the value of V. Since the procedure is being applied on the normalized integer signal please make multiple experiments with various V to find out an optimal value. It should provide the best compromise between keeping all boundaries preserved and the signal value. A particular setup depends on the application and the scale factor.
Value type: integer (0-255)
Default value: 3
PARTAG_PREPROSMOOTHAPRTHRZ

PARTAG_PREPROSMOOTHAPRTHRZ

Defines: When PARTAG_PREPROSMOOTHFACTOR is set to a number different than 0 then 2-dimensional non-linear filter is being applied. This filter has the following parameters: horizon-tal and vertical aperture and a signal standard deviation to control boundary-preserving behavior (to set the noise level). This filter is being applied in the spatial domain, pre-FFT stage (on the logged attenuation signal representation) to normalized preprocessed signal. The filter is defined by three parameters:
Ax (horizontal aperture), Ay (vertical aperture), V (signal variation). Use PARTAG_ PREPROSMOOTHAPRTHRZ to control Ax.
Value type: integer (0-11)
Default value: 0
PARTAG_PREPROSMOOTHAPRTVRT

PARTAG_PREPROSMOOTHAPRTVRT

Defines: When PARTAG_PREPROSMOOTHFACTOR is set to a number different than 0 then 2-dimensional non-linear filter is being applied. This filter has the following parameters: horizon-tal and vertical aperture and a signal standard deviation to control boundary-preserving behavior (to set the noise level). This filter is being applied in the spatial domain, pre-FFT stage (on the logged attenuation signal representation) to normalized preprocessed signal. The filter is defined by three parameters: Ax (horizontal aperture), Ay (vertical aperture), V (signal variation). Use PARTAG_PREPROSMOOTHAPRTVRT to control Ay
Value type: integer (0-11)
Default value: 3
OPTTAG_ZFILTER<NN>

OPTTAG_ZFILTER<NN>

Defines: Coefficients 0-15 for V (vertical) axis filter (<NN> stands for any number 0-15).
Value type: integer (0-255)
Default value: 0
OPTTAG_FILTERNUM

OPTTAG_FILTERNUM

Defines: a particular filter kernel (frequency amplification profile) applied in the frequency domain of the Feldkamp filtering phase.
Value type: integer
Default value: 1 (Shepp-Logan)
PARTAG_BHFACTOR<N>

PARTAG_BHFACTOR<N>

Defines: a simple beam-hardening correction. <N> stands for indexes 0-3 of coefficients determining a polynomial pre-distortion of logged attenuation signal
Value type: float
Default value: 0
OPTTAG_PROTRUSIONCMODE

OPTTAG_PROTRUSIONCMODE

Defines: COBRA’s protrusion correction algorithm. Tag can have 3 different values, 0, 1 and 2. When it is set to 0, there will be no protrusion correction. Mode 1 assumes that image is linearly decaying outside the detector field of view. Mode 2 assumes that the object has nearly cylindrical shape and a non-linear arch-shape function is used for the extrapolation.
Value type: integer (0-2)
Default value: 1
block_bord_bot
bord_bot
cobra_link