template<typename TInputImage, typename TOutputImage, typename TMaskImage>
class itk::MRIBiasFieldCorrectionFilter< TInputImage, TOutputImage, TMaskImage >
Corrects 3D MRI bias field.
This class is templated over the type of the input image (TInputImage) and the type of the output image (TOutputImage).
In MRI images, intensity inhomogeneities which are caused by magnetic settings, patients' position, and other factors are not unusual. The main purpose of this filter is to reduce such bias field. To estimate the bias field, we use Legendre polynomials. The 1+1 evolutionary optimizer searches for the best parameters of a Legendre polynomial (bias field estimate) which minimizes the total energy value of each image after bias field is eliminated. The default Legendre polynomial degree is 3.
The correction performs by default a multiplicative bias field correction by first log-transforming the input image. This log transform only works on images with grayscale values bigger than 0. The log-transform can be disabled and the filter computes an additive bias field.
There are three major processes in the whole bias correction scheme: slab identification, inter-slice intensity correction, and actual bias correction process. Users can turn on and off each process within the whole bias correction scheme using SetUsingSlabIdentification(bool, false by default), SetUsingInterSliceIntensityCorrection(bool, true by default), and SetUsingBiasFieldCorrection(bool, true by default) member function.
Only the last process (the actual bias field correction) is implemented in a multiresolution framework (without smoothing). Default is a standard level 2 multiresolution schedule (2 2 2 1 1 1).
The bias field correction method was initially developed and implemented by Martin Styner, Univ. of North Carolina at Chapel Hill, and his colleagues.
The multiresolution pyramid implementation is based on itkMultiResolutionPyramidImageFilter (without Gaussian smoothing)
For more details. refer to the following articles. "Parametric estimate of intensity inhomogeneities applied to MRI" Martin Styner, Guido Gerig, Christian Brechbuehler, Gabor Szekely, IEEE TRANSACTIONS ON MEDICAL IMAGING; 19(3), pp. 153-165, 2000, (https://www.cs.unc.edu/~styner/docs/tmi00.pdf)
"Evaluation of 2D/3D bias correction with 1+1ES-optimization" Martin Styner, Prof. Dr. G. Gerig (IKT, BIWI, ETH Zuerich), TR-197 (https://www.cs.unc.edu/~styner/docs/StynerTR97.pdf)
Definition at line 235 of file itkMRIBiasFieldCorrectionFilter.h.
|
void | CorrectImage (BiasFieldType &bias, InputImageRegionType region) |
|
void | CorrectInterSliceIntensityInhomogeneity (InputImageRegionType region) |
|
BiasFieldType | EstimateBiasField (InputImageRegionType region, unsigned int degree, int maximumIteration) |
|
BiasFieldType::CoefficientArrayType | GetEstimatedBiasFieldCoefficients () |
|
const char * | GetNameOfClass () const override |
|
virtual unsigned int | GetNumberOfLevels () const |
|
virtual double | GetOptimizerShrinkFactor () const |
|
virtual const ScheduleType & | GetSchedule () const |
|
virtual const InputImagePixelType & | GetSlabBackgroundMinimumThreshold () const |
|
virtual const unsigned int & | GetSlabNumberOfSamples () const |
|
virtual const double & | GetSlabTolerance () const |
|
const unsigned int * | GetStartingShrinkFactors () const |
|
void | Initialize () |
|
bool | IsBiasFieldMultiplicative () |
|
void | IsBiasFieldMultiplicative (bool flag) |
|
void | SetNumberOfLevels (unsigned int num) |
|
virtual void | SetOptimizerShrinkFactor (double _arg) |
|
void | SetSchedule (const ScheduleType &schedule) |
|
virtual void | SetSlabBackgroundMinimumThreshold (InputImagePixelType _arg) |
|
virtual void | SetSlabNumberOfSamples (unsigned int _arg) |
|
virtual void | SetSlabTolerance (double _arg) |
|
void | SetStartingShrinkFactors (const unsigned int *factors) |
|
void | SetStartingShrinkFactors (unsigned int factor) |
|
void | SetTissueClassStatistics (const Array< double > &means, const Array< double > &sigmas) |
|
|
void | SetInputMask (ImageMaskType *inputMask) |
|
virtual ImageMaskType * | GetModifiableInputMask () |
|
|
void | SetOutputMask (ImageMaskType *outputMask) |
|
virtual ImageMaskType * | GetModifiableOutputMask () |
|
|
virtual void | SetBiasFieldMultiplicative (bool _arg) |
|
virtual bool | GetBiasFieldMultiplicative () const |
|
virtual void | BiasFieldMultiplicativeOn () |
|
|
virtual void | SetUsingInterSliceIntensityCorrection (bool _arg) |
|
virtual bool | GetUsingInterSliceIntensityCorrection () const |
|
virtual void | UsingInterSliceIntensityCorrectionOn () |
|
|
virtual void | SetUsingSlabIdentification (bool _arg) |
|
virtual bool | GetUsingSlabIdentification () const |
|
virtual void | UsingSlabIdentificationOn () |
|
|
virtual void | SetUsingBiasFieldCorrection (bool _arg) |
|
virtual bool | GetUsingBiasFieldCorrection () const |
|
virtual void | UsingBiasFieldCorrectionOn () |
|
|
virtual void | SetGeneratingOutput (bool _arg) |
|
virtual bool | GetGeneratingOutput () const |
|
virtual void | GeneratingOutputOn () |
|
|
virtual void | SetSlicingDirection (int _arg) |
|
virtual int | GetSlicingDirection () const |
|
|
virtual void | SetBiasFieldDegree (int _arg) |
|
virtual int | GetBiasFieldDegree () const |
|
|
void | SetInitialBiasFieldCoefficients (const BiasFieldType::CoefficientArrayType &coefficients) |
|
|
virtual void | SetVolumeCorrectionMaximumIteration (int _arg) |
|
virtual int | GetVolumeCorrectionMaximumIteration () const |
|
|
virtual void | SetInterSliceCorrectionMaximumIteration (int _arg) |
|
virtual int | GetInterSliceCorrectionMaximumIteration () const |
|
|
virtual void | SetOptimizerInitialRadius (double _arg) |
|
virtual double | GetOptimizerInitialRadius () const |
|
|
virtual void | SetOptimizerGrowthFactor (double _arg) |
|
virtual double | GetOptimizerGrowthFactor () const |
|
const InputImageType * | GetInput () const |
|
const InputImageType * | GetInput (unsigned int idx) const |
|
void | PopBackInput () override |
|
void | PopFrontInput () override |
|
virtual void | PushBackInput (const InputImageType *input) |
|
virtual void | PushFrontInput (const InputImageType *input) |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetInput (const InputImageType *input) |
|
virtual void | SetInput (unsigned int, const TInputImage *image) |
|
virtual void | SetCoordinateTolerance (double _arg) |
|
virtual double | GetCoordinateTolerance () const |
|
virtual void | SetDirectionTolerance (double _arg) |
|
virtual double | GetDirectionTolerance () const |
|
OutputImageType * | GetOutput (unsigned int idx) |
|
OutputImageType * | GetOutput () |
|
const OutputImageType * | GetOutput () const |
|
virtual void | GraftOutput (DataObject *graft) |
|
virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *graft) |
|
virtual void | GraftNthOutput (unsigned int idx, DataObject *graft) |
|
ProcessObject::DataObjectPointer | MakeOutput (ProcessObject::DataObjectPointerArraySizeType idx) override |
|
ProcessObject::DataObjectPointer | MakeOutput (const ProcessObject::DataObjectIdentifierType &) override |
|
virtual void | AbortGenerateDataOn () |
|
virtual void | EnlargeOutputRequestedRegion (DataObject *) |
|
virtual const bool & | GetAbortGenerateData () const |
|
DataObjectPointerArray | GetIndexedInputs () |
|
DataObjectPointerArray | GetIndexedOutputs () |
|
NameArray | GetInputNames () const |
|
DataObjectPointerArray | GetInputs () |
|
MultiThreaderType * | GetMultiThreader () const |
|
DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
|
DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
|
DataObjectPointerArraySizeType | GetNumberOfInputs () const |
|
DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
|
virtual DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
|
NameArray | GetOutputNames () const |
|
DataObjectPointerArray | GetOutputs () |
|
virtual float | GetProgress () const |
|
NameArray | GetRequiredInputNames () const |
|
bool | HasInput (const DataObjectIdentifierType &key) const |
|
bool | HasOutput (const DataObjectIdentifierType &key) const |
|
void | IncrementProgress (float increment) |
|
virtual void | PrepareOutputs () |
|
virtual void | PropagateRequestedRegion (DataObject *output) |
|
virtual void | ResetPipeline () |
|
virtual void | SetAbortGenerateData (bool _arg) |
|
void | SetMultiThreader (MultiThreaderType *threader) |
|
virtual void | Update () |
|
virtual void | UpdateLargestPossibleRegion () |
|
virtual void | UpdateOutputData (DataObject *output) |
|
virtual void | UpdateOutputInformation () |
|
void | UpdateProgress (float progress) |
|
virtual void | SetReleaseDataFlag (bool val) |
|
virtual bool | GetReleaseDataFlag () const |
|
void | ReleaseDataFlagOn () |
|
void | ReleaseDataFlagOff () |
|
virtual void | SetReleaseDataBeforeUpdateFlag (bool _arg) |
|
virtual const bool & | GetReleaseDataBeforeUpdateFlag () const |
|
virtual void | ReleaseDataBeforeUpdateFlagOn () |
|
virtual void | SetNumberOfWorkUnits (ThreadIdType _arg) |
|
virtual const ThreadIdType & | GetNumberOfWorkUnits () const |
|
unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
|
unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
|
LightObject::Pointer | CreateAnother () const override |
|
virtual void | DebugOff () const |
|
virtual void | DebugOn () const |
|
Command * | GetCommand (unsigned long tag) |
|
bool | GetDebug () const |
|
MetaDataDictionary & | GetMetaDataDictionary () |
|
const MetaDataDictionary & | GetMetaDataDictionary () const |
|
virtual ModifiedTimeType | GetMTime () const |
|
virtual const TimeStamp & | GetTimeStamp () const |
|
bool | HasObserver (const EventObject &event) const |
|
void | InvokeEvent (const EventObject &) |
|
void | InvokeEvent (const EventObject &) const |
|
virtual void | Modified () const |
|
void | Register () const override |
|
void | RemoveAllObservers () |
|
void | RemoveObserver (unsigned long tag) const |
|
void | SetDebug (bool debugFlag) const |
|
void | SetReferenceCount (int) override |
|
void | UnRegister () const noexcept override |
|
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
|
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
|
virtual void | SetObjectName (std::string _arg) |
|
virtual const std::string & | GetObjectName () const |
|
Pointer | Clone () const |
|
virtual void | Delete () |
|
virtual int | GetReferenceCount () const |
|
void | Print (std::ostream &os, Indent indent=0) const |
|
|
void | AdjustSlabRegions (SlabRegionVectorType &slabs, OutputImageRegionType requestedRegion) |
|
bool | CheckMaskImage (ImageMaskType *mask) |
|
template<typename TSource , typename TTarget > |
void | CopyAndConvertImage (const TSource *source, TTarget *target, typename TTarget::RegionType requestedRegion) |
|
void | ExpImage (InternalImageType *source, InternalImageType *target) |
|
void | GenerateData () override |
|
void | GetBiasFieldSize (InputImageRegionType region, BiasFieldType::DomainSizeType &biasSize) |
|
void | Log1PImage (InternalImageType *source, InternalImageType *target) |
|
| MRIBiasFieldCorrectionFilter () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~MRIBiasFieldCorrectionFilter () override=default |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
void | GenerateInputRequestedRegion () override |
|
| ImageToImageFilter () |
|
void | VerifyInputInformation () const override |
|
| ~ImageToImageFilter () override=default |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | AfterThreadedGenerateData () |
|
virtual void | AllocateOutputs () |
|
virtual void | BeforeThreadedGenerateData () |
|
void | ClassicMultiThread (ThreadFunctionType callbackFunction) |
|
virtual const ImageRegionSplitterBase * | GetImageRegionSplitter () const |
|
| ImageSource () |
|
virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int pieces, OutputImageRegionType &splitRegion) |
|
| ~ImageSource () override=default |
|
virtual void | ThreadedGenerateData (const OutputImageRegionType ®ion, ThreadIdType threadId) |
|
virtual void | DynamicThreadedGenerateData (const OutputImageRegionType &outputRegionForThread) |
|
virtual bool | GetDynamicMultiThreading () const |
|
virtual void | SetDynamicMultiThreading (bool _arg) |
|
virtual void | DynamicMultiThreadingOn () |
|
virtual void | AddInput (DataObject *input) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | AddOutput (DataObject *output) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateOutputInformation () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
DataObjectPointerArraySizeType | MakeIndexFromInputName (const DataObjectIdentifierType &name) const |
|
DataObjectPointerArraySizeType | MakeIndexFromOutputName (const DataObjectIdentifierType &name) const |
|
DataObjectIdentifierType | MakeNameFromInputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectIdentifierType | MakeNameFromOutputIndex (DataObjectPointerArraySizeType idx) const |
|
| ProcessObject () |
|
virtual void | PropagateResetPipeline () |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | ReleaseInputs () |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType idx, DataObject *input) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType idx, DataObject *output) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *object) |
|
virtual void | SetPrimaryOutput (DataObject *object) |
|
void | SetRequiredInputNames (const NameArray &) |
|
virtual void | VerifyPreconditions () const |
|
| ~ProcessObject () override |
|
DataObject * | GetInput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetInput (DataObjectPointerArraySizeType idx) const |
|
DataObject * | GetPrimaryInput () |
|
const DataObject * | GetPrimaryInput () const |
|
virtual void | SetPrimaryInputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryInputName () const |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName () const |
|
DataObject * | GetOutput (DataObjectPointerArraySizeType i) |
|
const DataObject * | GetOutput (DataObjectPointerArraySizeType i) const |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
virtual bool | GetThreaderUpdateProgress () const |
|
virtual void | ThreaderUpdateProgressOn () |
|
virtual void | SetThreaderUpdateProgress (bool arg) |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
| ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|