User manuals MuhRec DetailedDecriptions - neutronimaging/imagingsuite GitHub Wiki

Return to TOC

Detailed module descriptions

Processing modules

The processing module play a central roll in the reconstruction. They are used to manipulated the projection data prior to the back projection task. In the following sections each module is described. The order of the modules can be arbitrarily configured. In some cases it makes sense to maintain a certain order among the modules. This reordering can be done in the GUI by dragging the modules in the pre-processing module list. Unfortunately, there is a bug in the GUI package that may cause the application to crash. The reordering can also be made in the config file since the modules are executed in the order they are entered.

The modules can be configured by clicking on a module in the module list. Then, a list of parameters for the module is shown. Click on the parameter value you want to change and enter the new value. Don't forget to press enter to confirm the new entry. A module can also be temporarily disabled by unchecking the active check-box. Then it remains in the configuration but does not contribute to the processing chain. This option is useful if you want to speed up the processing a little. It can also be used to demonstrate effect before and after adding the module.

FullLogNorm

In most cases a complete projection data set also contains open beam and dark current images. The location and names of the images are entered separately under the 'Projections'-tab. Here, you can also set the number of available reference images. The full normalization operation is computed using

This equation includes correction for variations in the neutron dose.

This module computes the flat field correction of the projections. The correction is followed by the negative logarithm. The module uses the reference images entered in the projection information tab.

  • uselut - Selects if the computation should be supported by a LUT to gain some speed.
    Values:true/false.
    Default: false (it does not bring anything)
  • usenormregion - Selects if the norm region should be used for dose correction.
    Values:true/false.
    Default: true

Object file: libStdPreprocModules.so

Spot cleaning

Spots are the most frequent outlier artifacts encountered in neutron imaging. These appear as line artifacts in the reconstructed data. There is a large benefit in using the spot-cleaning algorithm since this increases the signal to noise ratio in the matrix significantly.


Original & Cleaned

SpotClean2

Line artifact cleaning is parameterized by two parameters; the threshold level and a fuzziness parameter around the threshold. Mostly, the fuzzy width parameter is set to about 10% of the threshold.

The spot cleaning is parameterized by two parameters; the threshold and the mixing fuzziness. The threshold defines the intensity of the pixels to correct. All pixels with values exceeding the threshold will be corrected. The second parameter is used for interpolation between the estimated correction values and the original image.

the weight function is a sigmoid centered about the threshold level. This means that some pixels below the threshold will also be involved in the correction.

The spot cleaning configuration wizard helps you to find the correct levels of the two parameters. A threshold function plot in the cumulative histogram shows in which interval the correction will work. When you execute the correction the detection map and the the corrected image will be shown. The amount of corrected pixels will also be displayed. This wizard will only show you the region of interest you marked in the projection geometry setting. Therefore, you may want to increase the number of slices a while for a better overview during the tuning process of the spot cleaning.

  • gamma - This is a threshold value setting an allowed variance maximum that discriminates local image variations from actual outliers.
    Typical value: 0.03
  • iterations - This is currently an unused parameter that would iterate the cleaning procedure N times.
    Typical value: 1
  • maxlevel - Data clamping parameter, values greater than this level are set to the defined level.
    Default value: 12
  • minlevel - Data clamping parameter, values less than this level are set to the defined level.
    Typical value: 0
  • sigma - A width parameter to allow smooth mixing of the values around the threshold.
    Default value: 0.005

The spot clean 2 configuration dialog.

Object file: libStdPreprocModules.so

MorphSpotClean

Morph spot clean uses a gray scale morphological algorithm to find spots. It has the characteristic that also low intensity and wide spots can be corrected. I mostly run this module after normalization but it can also be used on the raw data. This is a snap shot of an algorithm under development that already performs well. It is rather slow, so it not recommended to use it during geometry tuning.

  • cleanmethod - There are different ways to replace the outliers. The default morphcleanreplace replaces with the value from a smoothed projection.
  • connectivity - The morphological processing operates on pixel neighborhoods. The default value is conn4.
  • threshold - The threshold is used to discriminate the outliers from real image data. In the dialog a cumulative histogram helps you to find a suitable threshold 0.006
  • detectionmethod - You can select to clean positive, negative, or both types of outliers. Negative (holes) are mostly caused by outliers in the projections while positive (peaks) origniate in the reference data.
  • edgesmooth - An initialization parameter for the edge processing. It can be left at the default value 5
  • maxarea - Regions with more pixels than this value will be rejected from the spot list. Default value 30.
  • maxlevel - Data clamping for gray levels greater than this value. Default value is 12
  • minlevel - -0.1
  • sigma - Width of the mixing function, the value is mostly about 10% of the threshold. Default 0.01
  • threading This is a experimental switch to activate multithreaded processing. Currently , this a slower processing than single threaded. Default value: false

The configuration dialog for MorphSpotClean \end{figure}

ProjectionFilterSingle

This is a central module for the filtered back-projection algorithm. It applies a ramp filter combined with a apodization window line-wise on the projection data.

  • cutoff - The cut-off frequency can be used to improve the signal to noise ratio of the reconstruction. As it has a low-pass effect it will smooth the edges in the image. It can take values between 0 and 0.5.
    Default value: 0.5
  • filtertype - This parameter controls the shape of the apodization filter. There are several window shapes implemented: ramlak, shepplogan, hanning, hamming, and butterworth.
    Default value: hamming
  • order - This parameter is only relevant for the Butterworth filter where it defines the exponent of the filter and thus controls the filter shape.
    Default value: 0
  • usebias - The ramp filter cancels the DC term of the spectrum. The effect is a bias in the reconstruction. By activating this parameter a small value is added to the DC component.
    Default value: true The projection filter configuration dialog.

Object file: libStdPreprocModules.so

ISSfilter

This is an experimental module used to smooth the projection data. The module uses an inverse scale space filter Burger et al. (2006) to filter the individual projections. It seems to improve the SNR with maintained edge sharpness. The filter has some problems with the numerical stability, at least it is difficult to tune. There will be a tuning wizard in the future.

  • N - Number of solution iterations.
    Default value 10
  • alpha - 0.25
  • lambda - 1
  • tau - 0.02

\includegraphics[scale=0.5]{figures/ConfISS.png}

The projection filter configuration dialog.

Object file: libStdPreprocModules.so

AdaptiveFilter

Samples with high aspect ratio between width and thickness have an orientation dependent signal to noise ratio Kachelriess et al. (2001). This filter adaptively applies more smoothing to regions with low transmission.

The effect of the module for adaptive filtering. The unfiltered image (left), reconstruction with the adaptive filter activated (middle), and (right) is difference image between the original and processed images.

  • lambda - Threshold at with the smoothing takes place. The value of lambda makes sense in the interval [0.0, 1.0].
    Default value: 0.1
  • sigma - Defines the width of the mixing interval. This value should mostly be less than 0.1.
    Default value: 0.05
  • size - Width of the smoothing filter kernel.
    Default value: 5

Object file: libStdPreprocModules.so

DataScaler

The data scaler makes a linear scaling of the data $k,x+m$. This can be useful if have preprocessed images that are save in a 16-bit data format.

  • offset - The offset ($m$) of the straight line.
    Default value: 0.0
  • slope - The slope ($k$) of the straight line.
    Default value: 1.0

Object file: libStdPreprocModules.so

GeneralFilter

This module provides a convolution filter.

  • size - 3
  • type - box (the only supported)

Object file: libStdPreprocModules.so

PolynomialCorrection

This module applies a polynomial to each pixel value. This is used to correct for beam hardening effects in the reconstructed image.

Object file: libStdPreprocModules.so

  • Coefficents - The coefficients of the terms of the polynomial starting with a0 i.e. there must be PolynomialDegree+1 values.
    Default value: 0.0 1.0
  • PolynomialDegree - Sets the polynomial degree, the module can handle up to the 8th degree.
    Default value: 1

BasicRingClean

The basic ring clean subtracts a high-pass filtered average sinogram from all sinogram. This a rather crude way of ring correction but it will cancel some of the rings.

Object file: libStdPreprocModules.so

MedianMixRingClean

Ring artifacts are with line artifacts the most common artifact in a CT slice. This is a basic method for correcting ring artifacts. It identifies outliers in the average sinogram and corrects them by the local median.

  • threshold - Sets a threshold on the local variance that identifies an outlier that would cause a ring.
    Default value: 0.01
  • width - Sets a smooth weighting interval for the replacement. Typically this value is about 10% of the threshold.
    Default value: 0.001 figures/muhrecScreenShots/ConfMedMixRing.png The median mix ring clean configuration dialog.

Object file: libStdPreprocModules.so

WaveletRingClean

This ring cleaning module works in the sinogram domain. It does the cleaning using a combination of wavelet and fourier transforms\cite{muench2009_stripefilter}. My experience is that shorter wavelets produce better results and mostly three or less levels. Typical effects of over filtering are wide ripples (rings). If you have very wide rings it cn be beneficial to increase the number of levels.

Object file: libStdPreprocModules.so

  • decnum] Number of decomposition levels. \Default value: 5
  • sigma] Width of the Gaussian that forms the stop band. \ Default value 0.1
  • wname]The name of the wavelet base. \Default value: daub25 Dialog to tune the ring correction using wavelet ringclean. Left panel is original, mid shows the processed sinogram, and the panel to the right shows the difference.

SpotRingClean

There are better choices... Ring cleaning by spot cleaning is an experimental module that is not finished. It cleans some of the rings but the performance is still not satisfying.

  • gamma - Threshold level in the detection image.
    Default value: 0.01
  • iterations - Number of times the filter should be repeated.
    Default value: 1
  • sigma - Width of the mixing interval.
    Default value: 0.001

Object file: libStdPreprocModules.so

TranslatedProjectionWeighting

This module weights the projections near the center of rotation to provide a smooth stitching of the projection data when you reconstruct data that is acquired with the center near the edge. This is a method to increase the FOV at maintained resolution. We usually don't use this method since it requires twice as many projection for a good result.

  • weightfunction - sigmoid
  • width - 5

Object file: libStdPreprocModules.so

CountNANs

This module is mainly for debugging use. It counts the number of pixels set to NaN. This can be helpful to identify which module causes the numeric errors in your processing chain.

Object file: libInspectorModules.so

ProjectionInspector

This module is not fully implemented but is intended to open a display window that shows the projections in their current condition. It generally not recommended to use this module since it is very time consuming to show the data.

Object file: libInspectorModules.so

SaveProjections

This module save the projection data in the current state of processing as a set of 32-bit tif images.

Object file: libInspectorModules.so

  • path - Path to the destination folder
  • filemask - File mask of the written files. It shall always contain a block of #'s as placeholder for the file index. Default value: projections_####.tif
  • imagetype - Selects the file type of the projection data. It can be either projections or sinograms.
    Default value: projections.
  • filetype - Selects the precision of the data in the written files. It can be 8- or 16- bit unsigned or 32 bit floating point.
    Default value: 32bit floating point.

figures/muhrecScreenShots/SaveProjectionsDlg.png Dialog to set the values of the SaveProjections module.

Return to TOC

⚠️ **GitHub.com Fallback** ⚠️