Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitk::SUVImageFilter Class Reference

Image-to-image filter that converts a PET image into a SUV image. More...

#include <mitkSUVImageFilter.h>

Inheritance diagram for mitk::SUVImageFilter:
Collaboration diagram for mitk::SUVImageFilter:

Public Member Functions

 mitkClassMacro (SUVImageFilter, ImageToImageFilter)
 
 itkSetEnumMacro (TargetVariant, SUVVariant)
 Set the target SUV variant. More...
 
virtual SUVVariant GetTargetVariant () const
 
 itkSetEnumMacro (DICOMReadPolicy, DICOMReadPolicy)
 Policy for IBSI-SUV-recommended adaptations of borderline / ambiguous DICOM input. More...
 
virtual DICOMReadPolicy GetDICOMReadPolicy () const
 
virtual void SetPatientWeightInGram (double _arg)
 Override DICOM (0010,1030) Patient Weight, in [g]. More...
 
virtual std::optional< double > GetPatientWeightInGram () const
 
void ClearPatientWeightInGram ()
 
double GetEffectivePatientWeightInGram () const
 
virtual void SetPatientHeightInCm (double _arg)
 Override DICOM (0010,1020) Patient Size, in [cm]. More...
 
virtual std::optional< double > GetPatientHeightInCm () const
 
void ClearPatientHeightInCm ()
 
double GetEffectivePatientHeightInCm () const
 
 itkSetEnumMacro (PatientSex, Sex)
 Override DICOM (0010,0040) Patient Sex. More...
 
virtual std::optional< Sex > GetPatientSex () const
 
void ClearPatientSex ()
 
Sex GetEffectivePatientSex () const
 
virtual void SetInjectedActivityInBq (double _arg)
 Override DICOM (0018,1074) Radionuclide Total Dose, in [Bq]. More...
 
virtual std::optional< double > GetInjectedActivityInBq () const
 
void ClearInjectedActivityInBq ()
 
double GetEffectiveInjectedActivityInBq () const
 
virtual void SetHalfLifeInSec (double _arg)
 Override DICOM (0018,1075) Radionuclide Half-Life, in [s]. More...
 
virtual std::optional< double > GetHalfLifeInSec () const
 
void ClearHalfLifeInSec ()
 
double GetEffectiveHalfLifeInSec () const
 
void SetDecayTimeOverrideInSec (double value)
 Override the decay duration uniformly across every voxel, in [s]. More...
 
virtual std::optional< double > GetDecayTimeOverrideInSec () const
 
void ClearDecayTimeOverrideInSec ()
 
void SetDecayTimeOverrideMap (DecayTimeMapType map)
 Override the decay duration on a per-(timestep, slice) basis, in [s]. More...
 
void ClearDecayTimeOverrideMap ()
 
const std::optional< DecayTimeMapType > & GetDecayTimeOverrideMap () const
 
const DecayCorrectionInfo & GetEffectiveDecayCorrection () const
 
virtual void SetTracerIndex (int _arg)
 Optional explicit selection for multi-item Radiopharmaceutical Information Sequence (0054,0016). More...
 
virtual std::optional< int > GetTracerIndex () const
 
void ClearTracerIndex ()
 
void SetInputModelOverride (SUVInputModel v)
 Override the pixel-semantics classification. More...
 
void ClearInputModelOverride ()
 
std::optional< SUVInputModel > GetInputModelOverride () const
 
SUVInputModel GetEffectiveInputModel () const
 
std::optional< SUVInputModel > GetDetectedInputModel () const noexcept
 Input model classified (or override-derived) by the most recent ConfigureFromProperties call, regardless of whether that call completed. More...
 
void ConfigureFromProperties (const IPropertyProvider *props)
 Resolve all unset fields from a property provider. More...
 
- Public Member Functions inherited from mitk::ImageToImageFilter
 mitkClassMacro (ImageToImageFilter, ImageSource)
 
Pointer Clone () const
 
virtual void SetInput (const InputImageType *image)
 Set the image input of this process object. More...
 
virtual void SetInput (unsigned int idx, const InputImageType *image)
 Set the image input at the specified index. More...
 
InputImageType * GetInput (void)
 Get the input image (non-const). More...
 
InputImageType * GetInput (unsigned int idx)
 Get the input image at the specified index (non-const). More...
 
const InputImageType * GetInput (void) const
 Get the input image (const). More...
 
const InputImageType * GetInput (unsigned int idx) const
 Get the input image at the specified index (const). More...
 
- Public Member Functions inherited from mitk::ImageSource
 mitkClassMacro (ImageSource, BaseDataSource)
 
Pointer Clone () const
 
mitkBaseDataSourceGetOutputDeclarations itk::DataObject::Pointer MakeOutput (DataObjectPointerArraySizeType idx) override
 Get the output data of this image source object. More...
 
itk::DataObject::Pointer MakeOutput (const DataObjectIdentifierType &name) override
 
virtual vtkImageData * GetVtkImageData ()
 Get the output as VTK image data (non-const version). More...
 
virtual const vtkImageData * GetVtkImageData () const
 Get the output as VTK image data (const version). More...
 
- Public Member Functions inherited from mitk::BaseDataSource
 mitkClassMacroItkParent (BaseDataSource, itk::ProcessObject)
 
OutputType * GetOutput ()
 
const OutputType * GetOutput () const
 
OutputType * GetOutput (DataObjectPointerArraySizeType idx)
 
const OutputType * GetOutput (DataObjectPointerArraySizeType idx) const
 
virtual void GraftOutput (OutputType *output)
 Graft the specified BaseData onto this BaseDataSource's output. More...
 
virtual void GraftOutput (const DataObjectIdentifierType &key, OutputType *output)
 Graft the specified base data object onto a named output. More...
 
virtual void GraftNthOutput (unsigned int idx, OutputType *output)
 Graft the specified base data object onto this BaseDataSource's idx'th output. More...
 
bool Updating () const
 Check whether the pipeline is currently executing. More...
 

Static Public Member Functions

static Pointer New ()
 
- Static Public Member Functions inherited from mitk::ImageToImageFilter
static Pointer New ()
 Method for creation through the object factory. More...
 
- Static Public Member Functions inherited from mitk::ImageSource
static Pointer New ()
 Method for creation through the object factory. More...
 

Protected Member Functions

 SUVImageFilter ()
 
 ~SUVImageFilter () override
 
void GenerateData () override
 
void GenerateOutputInformation () override
 
- Protected Member Functions inherited from mitk::ImageToImageFilter
 ImageToImageFilter ()
 
 ~ImageToImageFilter () override
 
void PrintSelf (std::ostream &os, itk::Indent indent) const override
 Print self information to the given stream. More...
 
void GenerateInputRequestedRegion () override
 Determine the input requested region to produce the output requested region. More...
 
- Protected Member Functions inherited from mitk::ImageSource
 ImageSource ()
 
 ~ImageSource () override
 
void GenerateData () override
 A version of GenerateData() specific for image processing filters. More...
 
virtual void ThreadedGenerateData (const OutputImageRegionType &outputRegionForThread, itk::ThreadIdType threadId)
 If an imaging filter can be implemented as a multithreaded algorithm, the filter will provide an implementation of ThreadedGenerateData(). More...
 
void PrepareOutputs () override
 This method is intentionally left blank. More...
 
virtual void AllocateOutputs ()
 The GenerateData method normally allocates the buffers for all of the outputs of a filter. More...
 
virtual void BeforeThreadedGenerateData ()
 If an imaging filter needs to perform processing after the buffer has been allocated but before threads are spawned, the filter can provide an implementation for BeforeThreadedGenerateData(). More...
 
virtual void AfterThreadedGenerateData ()
 If an imaging filter needs to perform processing after all processing threads have completed, the filter can provide an implementation for AfterThreadedGenerateData(). More...
 
virtual unsigned int SplitRequestedRegion (unsigned int i, unsigned int num, OutputImageRegionType &splitRegion)
 Split the output's RequestedRegion into "num" pieces, returning region "i" as "splitRegion". More...
 
- Protected Member Functions inherited from mitk::BaseDataSource
 BaseDataSource ()
 Constructor. More...
 
 ~BaseDataSource () override
 Destructor. More...
 

Additional Inherited Members

- Public Types inherited from mitk::ImageToImageFilter
typedef Superclass::OutputImageRegionType OutputImageRegionType
 Superclass typedefs. More...
 
typedef mitk::Image InputImageType
 Some convenient typedefs. More...
 
typedef InputImageType::Pointer InputImagePointer
 
typedef InputImageType::ConstPointer InputImageConstPointer
 
typedef SlicedData::RegionType InputImageRegionType
 
- Public Types inherited from mitk::ImageSource
typedef mitk::Image OutputImageType
 Some convenient typedefs. More...
 
typedef OutputImageType OutputType
 
typedef OutputImageType::Pointer OutputImagePointer
 
typedef SlicedData::RegionType OutputImageRegionType
 
- Public Types inherited from mitk::BaseDataSource
typedef BaseData OutputType
 Output data type. More...
 
typedef itk::DataObject::DataObjectIdentifierType DataObjectIdentifierType
 Identifier type for named data objects. More...
 
- Static Protected Member Functions inherited from mitk::ImageSource
static itk::ITK_THREAD_RETURN_TYPE ThreaderCallback (void *arg)
 Static function used as a "callback" by the MultiThreader. More...
 
- Static Protected Member Functions inherited from mitk::BaseDataSource
static Pointer New ()
 

Detailed Description

Image-to-image filter that converts a PET image into a SUV image.

Single entry point for SUV computation. Encapsulates parameter resolution (CLI args / UI controls vs DICOM-derived defaults), the decay-correction pipeline, the per-voxel SUV math, and the variant-specific output normalization.

Usage pattern
auto filter = mitk::SUVImageFilter::New();
filter->SetInput(petImage);
filter->SetTargetVariant(SUVVariant::BW);
if (overrideWeightKg) filter->SetPatientWeightInGram(*overrideWeightKg * 1000.0);
// ... other explicit overrides ...
filter->ConfigureFromProperties(petImage); // mitk::Image is an IPropertyProvider
filter->Update();
auto suv = filter->GetOutput();
static Pointer New()
Override pattern

Each user-overridable field is held internally as std::optional<T>. An empty optional means "not set, derive from properties"; a populated optional means "user supplied this value; do not overwrite." itkSetMacro / itkGetConstMacro work directly: the macro setter takes T, and std::optional<T> assigns and compares heterogeneously against T (empty optional is unequal to any value, populated optional compares by value, assigning a T engages the optional).

Two accessor flavors per field:

  • GetXxx() returns the user-supplied override slot (std::optional<T>). Useful for UI round-tripping and "what did the caller pass?" diagnostics.
  • GetEffectiveXxx() returns the resolved value (T) (either provided by user or deduced from dicum) that the filter will use.
    Precondition
    ConfigureFromProperties() (or Update()) has been called successfully; otherwise the accessor throws mitk::Exception.
    ClearXxx() resets a field to derive-from-properties.
See also
SUVNormalizationStrategy, SUVFunctorPolicy, DICOMReadPolicy, DeduceDecayCorrection

Definition at line 73 of file mitkSUVImageFilter.h.

Constructor & Destructor Documentation

◆ SUVImageFilter()

mitk::SUVImageFilter::SUVImageFilter ( )
protected

◆ ~SUVImageFilter()

mitk::SUVImageFilter::~SUVImageFilter ( )
overrideprotected

Member Function Documentation

◆ ClearDecayTimeOverrideInSec()

void mitk::SUVImageFilter::ClearDecayTimeOverrideInSec ( )

◆ ClearDecayTimeOverrideMap()

void mitk::SUVImageFilter::ClearDecayTimeOverrideMap ( )

◆ ClearHalfLifeInSec()

void mitk::SUVImageFilter::ClearHalfLifeInSec ( )

◆ ClearInjectedActivityInBq()

void mitk::SUVImageFilter::ClearInjectedActivityInBq ( )

◆ ClearInputModelOverride()

void mitk::SUVImageFilter::ClearInputModelOverride ( )

◆ ClearPatientHeightInCm()

void mitk::SUVImageFilter::ClearPatientHeightInCm ( )

◆ ClearPatientSex()

void mitk::SUVImageFilter::ClearPatientSex ( )

◆ ClearPatientWeightInGram()

void mitk::SUVImageFilter::ClearPatientWeightInGram ( )

◆ ClearTracerIndex()

void mitk::SUVImageFilter::ClearTracerIndex ( )

◆ ConfigureFromProperties()

void mitk::SUVImageFilter::ConfigureFromProperties ( const IPropertyProvider *  props)

Resolve all unset fields from a property provider.

Reads the standard PET DICOM tags (patient weight / height / sex, radiopharmaceutical info, decay-correction strategy). Explicit overrides set via the dedicated setters always take precedence over property-derived values.

Calling this is optional: Update() resolves the same way the first time it runs. Call it explicitly when you need to read GetEffective* or GetDetectedInputModel before Update (e.g. to drive a UI). The resolved configuration is a function of the input properties and the overrides, so a later change to the input or any setter re-resolves the parameters on the next Update.

Parameters
[in]propsThe source of DICOM properties; typically the filter's input image.
Precondition
props is not null.
Postcondition
Every GetEffective*() accessor required by the chosen target variant is safe to call. On exception, the filter returns to its pre-call state and effective accessors stay unsafe.
Exceptions
MissingDICOMPropertyExceptionif a required property is absent and no override compensates for it.
InvalidDICOMPropertyValueExceptionif a property is present but holds an unparseable / unsupported value.
AmbiguousDecayTimingExceptionfor unresolvable decay timing.
BenchmarkAdaptationRequiredException(or a subclass) if DICOMReadPolicy is Strict and the input would have required an IBSI-SUV-recommended adaptation.
InvalidDecayTimeMapExceptionif a per-(timestep, slice) decay-time override map is set and its shape does not match the input image geometry (sparse cells or out-of-range timestep / slice coordinates).

◆ GenerateData()

void mitk::SUVImageFilter::GenerateData ( )
overrideprotected

◆ GenerateOutputInformation()

void mitk::SUVImageFilter::GenerateOutputInformation ( )
overrideprotected

References mitk::BW.

◆ GetDecayTimeOverrideInSec()

virtual std::optional<double> mitk::SUVImageFilter::GetDecayTimeOverrideInSec ( ) const
virtual

◆ GetDecayTimeOverrideMap()

const std::optional<DecayTimeMapType>& mitk::SUVImageFilter::GetDecayTimeOverrideMap ( ) const

◆ GetDetectedInputModel()

std::optional<SUVInputModel> mitk::SUVImageFilter::GetDetectedInputModel ( ) const
noexcept

Input model classified (or override-derived) by the most recent ConfigureFromProperties call, regardless of whether that call completed.

Unlike GetEffectiveInputModel, this accessor never throws and survives rollbacks: ConfigureFromProperties resets it on entry and runs input-model classification first, so once that step produces a value it stays available even if a later validation step in the same call throws.

The intended consumer is a UI that needs to know whether the input is pre-normalized (and what its source variant is) in order to drive UI affordances such as showing variant-specific patient inputs even after a configuration failure further downstream.

Returns std::nullopt if the most recent call did not reach a successful classification (it threw at or before that step), or if ConfigureFromProperties has never run.

◆ GetDICOMReadPolicy()

virtual DICOMReadPolicy mitk::SUVImageFilter::GetDICOMReadPolicy ( ) const
virtual

◆ GetEffectiveDecayCorrection()

const DecayCorrectionInfo& mitk::SUVImageFilter::GetEffectiveDecayCorrection ( ) const

◆ GetEffectiveHalfLifeInSec()

double mitk::SUVImageFilter::GetEffectiveHalfLifeInSec ( ) const

◆ GetEffectiveInjectedActivityInBq()

double mitk::SUVImageFilter::GetEffectiveInjectedActivityInBq ( ) const

◆ GetEffectiveInputModel()

SUVInputModel mitk::SUVImageFilter::GetEffectiveInputModel ( ) const

◆ GetEffectivePatientHeightInCm()

double mitk::SUVImageFilter::GetEffectivePatientHeightInCm ( ) const

◆ GetEffectivePatientSex()

Sex mitk::SUVImageFilter::GetEffectivePatientSex ( ) const

◆ GetEffectivePatientWeightInGram()

double mitk::SUVImageFilter::GetEffectivePatientWeightInGram ( ) const

◆ GetHalfLifeInSec()

virtual std::optional<double> mitk::SUVImageFilter::GetHalfLifeInSec ( ) const
virtual

◆ GetInjectedActivityInBq()

virtual std::optional<double> mitk::SUVImageFilter::GetInjectedActivityInBq ( ) const
virtual

◆ GetInputModelOverride()

std::optional<SUVInputModel> mitk::SUVImageFilter::GetInputModelOverride ( ) const

◆ GetPatientHeightInCm()

virtual std::optional<double> mitk::SUVImageFilter::GetPatientHeightInCm ( ) const
virtual

◆ GetPatientSex()

virtual std::optional<Sex> mitk::SUVImageFilter::GetPatientSex ( ) const
virtual

◆ GetPatientWeightInGram()

virtual std::optional<double> mitk::SUVImageFilter::GetPatientWeightInGram ( ) const
virtual

◆ GetTargetVariant()

virtual SUVVariant mitk::SUVImageFilter::GetTargetVariant ( ) const
virtual

◆ GetTracerIndex()

virtual std::optional<int> mitk::SUVImageFilter::GetTracerIndex ( ) const
virtual

◆ itkSetEnumMacro() [1/3]

mitk::SUVImageFilter::itkSetEnumMacro ( DICOMReadPolicy  ,
DICOMReadPolicy   
)

Policy for IBSI-SUV-recommended adaptations of borderline / ambiguous DICOM input.

Default DICOMReadPolicy::Lenient, mirroring SUVCalculationHelper. Governs parameter resolution. Like the other setters, changing it after the filter has been configured re-resolves the parameters on the next Update.

◆ itkSetEnumMacro() [2/3]

mitk::SUVImageFilter::itkSetEnumMacro ( PatientSex  ,
Sex   
)

Override DICOM (0010,0040) Patient Sex.

◆ itkSetEnumMacro() [3/3]

mitk::SUVImageFilter::itkSetEnumMacro ( TargetVariant  ,
SUVVariant   
)

Set the target SUV variant.

Always required, no override semantics. Default at construction is SUVVariant::BW, matching the most common use case.

◆ mitkClassMacro()

mitk::SUVImageFilter::mitkClassMacro ( SUVImageFilter  ,
ImageToImageFilter   
)

◆ New()

static Pointer mitk::SUVImageFilter::New ( )
static

◆ SetDecayTimeOverrideInSec()

void mitk::SUVImageFilter::SetDecayTimeOverrideInSec ( double  value)

Override the decay duration uniformly across every voxel, in [s].

Mirrors the existing CLI –decay-time semantic: if set, the value is applied uniformly to every voxel and the DICOM-decay-correction pipeline is bypassed entirely.

value must be finite and non-negative. Zero is accepted and reproduces ADMIN-style behaviour (residual decay factor 2^0 = 1).

Precondition
GetDecayTimeOverrideMap() is empty. The uniform and the per-(timestep, slice) decay-time overrides are mutually exclusive; the caller must ClearDecayTimeOverrideMap() before engaging the uniform override.
Exceptions
ConflictingDecayTimeOverrideExceptionif the precondition is violated.
InvalidDecayTimeOverrideExceptionif value is non-finite or negative.

◆ SetDecayTimeOverrideMap()

void mitk::SUVImageFilter::SetDecayTimeOverrideMap ( DecayTimeMapType  map)

Override the decay duration on a per-(timestep, slice) basis, in [s].

The map must be a complete and well-formed match for the input image: exactly one entry per (timestep, slice) the input owns, no out-of-range coordinates. Sparse or out-of-range maps are rejected at ConfigureFromProperties time with InvalidDecayTimeMapException; the filter does not silently fall back to DICOM-derived values for missing cells. Callers that want a DICOM baseline plus a few overrides must seed the map from GetEffectiveDecayCorrection() after a Configure pass without the override.

Precondition
GetDecayTimeOverrideInSec() is empty. The two overrides are mutually exclusive (see SetDecayTimeOverrideInSec).
Exceptions
ConflictingDecayTimeOverrideExceptionif the precondition is violated.

◆ SetHalfLifeInSec()

virtual void mitk::SUVImageFilter::SetHalfLifeInSec ( double  _arg)
virtual

Override DICOM (0018,1075) Radionuclide Half-Life, in [s].

◆ SetInjectedActivityInBq()

virtual void mitk::SUVImageFilter::SetInjectedActivityInBq ( double  _arg)
virtual

Override DICOM (0018,1074) Radionuclide Total Dose, in [Bq].

◆ SetInputModelOverride()

void mitk::SUVImageFilter::SetInputModelOverride ( SUVInputModel  v)

Override the pixel-semantics classification.

If set, ConfigureFromProperties does not call ClassifyPETInput on the property provider; the override is used directly. Replaces the legacy CLI –ignore-units-check escape: callers that want to force activity-concentration semantics regardless of (0054,1001) supply SetInputModelOverride({SUVPixelSemantics::ActivityConcentration, 1.0, ...}).

◆ SetPatientHeightInCm()

virtual void mitk::SUVImageFilter::SetPatientHeightInCm ( double  _arg)
virtual

Override DICOM (0010,1020) Patient Size, in [cm].

◆ SetPatientWeightInGram()

virtual void mitk::SUVImageFilter::SetPatientWeightInGram ( double  _arg)
virtual

Override DICOM (0010,1030) Patient Weight, in [g].

◆ SetTracerIndex()

virtual void mitk::SUVImageFilter::SetTracerIndex ( int  _arg)
virtual

Optional explicit selection for multi-item Radiopharmaceutical Information Sequence (0054,0016).

If unset, sequences with exactly one item are accepted automatically and multi-item sequences cause ConfigureFromProperties to throw.


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