STIR  6.3.0
Public Member Functions | List of all members
stir::GammaArrayFilter2D< elemT > Class Template Reference

Gamma correction filter for 2D slices in a 3D volume. More...

#include "stir/GammaArrayFilter2D.h"

Inheritance diagram for stir::GammaArrayFilter2D< elemT >:
Inheritance graph
[legend]

Public Member Functions

bool is_trivial () const override
 Should return true when the operations won't modify the object at all. More...
 
- Public Member Functions inherited from stir::ArrayFunctionObject_2ArgumentImplementation< 3, elemT >
void operator() (Array< num_dimensions, elemT > &array) const override
 in-place modification of array, implemented inline
 
void operator() (Array< num_dimensions, elemT > &out_array, const Array< num_dimensions, elemT > &in_array) const override
 result stored in another array More...
 
- Public Member Functions inherited from stir::ArrayFunctionObject< num_dimensions, elemT >
virtual Succeeded get_influencing_indices (IndexRange< num_dimensions > &influencing_indices, const IndexRange< num_dimensions > &output_indices) const
 sets the range of indices that influences the result in a set of coordinates output_indices More...
 
virtual Succeeded get_influenced_indices (IndexRange< num_dimensions > &influenced_indices, const IndexRange< num_dimensions > &input_indices) const
 sets the range of indices that gets influenced by a set of coordinate input_indices More...
 

Additional Inherited Members

- Protected Member Functions inherited from stir::ArrayFunctionObject_2ArgumentImplementation< 3, elemT >
virtual void do_it (Array< num_dimensions, elemT > &out_array, const Array< num_dimensions, elemT > &in_array) const=0
 

Detailed Description

template<typename elemT>
class stir::GammaArrayFilter2D< elemT >

Gamma correction filter for 2D slices in a 3D volume.

This filter enhances image contrast by adjusting pixel intensities using gamma correction. The algorithm operates on each 2D slice (axial direction) independently and involves:

  1. Normalization: Each pixel value in the slice is normalized to [0, 1]:

    \[ \text{normalized}(i, j) = \frac{\text{input}(i, j) - \text{min\_val}}{\text{max\_val} - \text{min\_val}} \]

    where min_val and max_val are the minimum and maximum pixel values in the slice.
  2. Average Pixel Value Calculation: The filter computes the average pixel value across all pixels in the normalized slice that have absolute values greater than 0.1. This average value is used to determine the gamma exponent.
  3. Gamma Calculation: Determines the gamma exponent using:

    \[ \gamma = \frac{\log(0.25)}{\log(\text{averagePixelValue})} \]

    where 0.25 is the target average intensity level for contrast adjustment.
  4. Gamma Correction: Adjusts pixel values using:

    \[ \text{corrected}(i, j) = \text{normalized}(i, j)^{\gamma} \]

  5. Rescaling: Converts the corrected values back to their original range:

    \[ \text{output}(i, j) = \text{corrected}(i, j) \times (\text{max\_val} - \text{min\_val}) + \text{min\_val} \]

Edge Handling

Gamma Filter Configuration

This filter is fully automated and does not require any parameters. To enable it in the reconstruction process, include the following in the parameter file:

post-filter type := Gamma
Gamma Filter Parameters :=
End Gamma Filter Parameters :=
Note
This filter operates on each axial slice independently, and does not take into account neighboring slices. It is effectively a 2D filter applied slice-by-slice on a 3D volume.

Member Function Documentation

◆ is_trivial()

template<typename elemT >
bool stir::GammaArrayFilter2D< elemT >::is_trivial ( ) const
overridevirtual

Should return true when the operations won't modify the object at all.

For the 2 argument version, elements in out_array will be set to corresponding elements in in_array. Elements in out_array that do not occur in in_array will be set to 0.

Implements stir::ArrayFunctionObject< num_dimensions, elemT >.


The documentation for this class was generated from the following files: