template<class TInputImage, class TOutputImage, class 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 inhomogenieties 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 itkMultiTesolutionPyramidImageFilter (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, (http://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 (http://www.cs.unc.edu/~styner/docs/StynerTR97.pdf)
Definition at line 225 of file itkMRIBiasFieldCorrectionFilter.h.
|
void | CorrectImage (BiasFieldType &bias, InputImageRegionType region) |
|
void | CorrectInterSliceIntensityInhomogeneity (InputImageRegionType region) |
|
virtual ::itk::LightObject::Pointer | CreateAnother (void) const |
|
BiasFieldType | EstimateBiasField (InputImageRegionType region, unsigned int degree, int maximumIteration) |
|
BiasFieldType::CoefficientArrayType | GetEstimatedBiasFieldCoefficients () |
|
virtual const char * | GetNameOfClass () const |
|
virtual unsigned int | GetNumberOfLevels () const |
|
virtual double | GetOptimizerShrinkFactor () const |
|
virtual const ScheduleType & | GetSchedule () |
|
virtual const InputImagePixelType & | GetSlabBackgroundMinimumThreshold () |
|
virtual const unsigned int & | GetSlabNumberOfSamples () |
|
virtual const double & | GetSlabTolerance () |
|
const unsigned int * | GetStartingShrinkFactors () const |
|
void | Initialize () throw ( ExceptionObject ) |
|
void | IsBiasFieldMultiplicative (bool flag) |
|
bool | IsBiasFieldMultiplicative () |
|
void | SetInitialBiasFieldCoefficients (const BiasFieldType::CoefficientArrayType &coefficients) |
|
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) |
|
virtual void | SetSlicingDirection (int _arg) |
|
void | SetStartingShrinkFactors (unsigned int factor) |
|
void | SetStartingShrinkFactors (unsigned int *factors) |
|
void | SetTissueClassStatistics (const Array< double > &means, const Array< double > &sigmas) throw ( ExceptionObject ) |
|
|
void | SetInputMask (ImageMaskType *inputMask) |
|
virtual ImageMaskType * | GetModifiableInputMask () |
|
virtual const ImageMaskType * | GetInputMask () const |
|
|
void | SetOutputMask (ImageMaskType *outputMask) |
|
virtual ImageMaskType * | GetModifiableOutputMask () |
|
virtual const ImageMaskType * | GetOutputMask () const |
|
|
virtual void | SetUsingInterSliceIntensityCorrection (bool _arg) |
|
virtual const bool & | GetUsingInterSliceIntensityCorrection () |
|
|
virtual void | SetUsingSlabIdentification (bool _arg) |
|
virtual const bool & | GetUsingSlabIdentification () |
|
|
virtual void | SetUsingBiasFieldCorrection (bool _arg) |
|
virtual const bool & | GetUsingBiasFieldCorrection () |
|
|
virtual void | SetGeneratingOutput (bool _arg) |
|
virtual const bool & | GetGeneratingOutput () |
|
|
virtual void | SetBiasFieldDegree (int _arg) |
|
virtual int | GetBiasFieldDegree () const |
|
|
virtual void | SetVolumeCorrectionMaximumIteration (int _arg) |
|
virtual int | GetVolumeCorrectionMaximumIteration () const |
|
virtual void | SetInterSliceCorrectionMaximumIteration (int _arg) |
|
virtual int | GetInterSliceCorrectionMaximumIteration () const |
|
|
void | SetOptimizerInitialRadius (double initRadius) |
|
double | GetOptimizerInitialRadius () |
|
|
virtual void | SetOptimizerGrowthFactor (double _arg) |
|
virtual double | GetOptimizerGrowthFactor () const |
|
const InputImageType * | GetInput (void) const |
|
const InputImageType * | GetInput (unsigned int idx) const |
|
virtual void | PopBackInput () |
|
virtual void | PopFrontInput () |
|
virtual void | PushBackInput (const InputImageType *image) |
|
virtual void | PushFrontInput (const InputImageType *image) |
|
virtual void | SetInput (const InputImageType *image) |
|
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) |
|
virtual void | GraftNthOutput (unsigned int idx, DataObject *output) |
|
virtual void | GraftOutput (DataObject *output) |
|
virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *output) |
|
OutputImageType * | GetOutput (void) |
|
const OutputImageType * | GetOutput (void) const |
|
virtual
ProcessObject::DataObjectPointer | MakeOutput (ProcessObject::DataObjectPointerArraySizeType idx) |
|
virtual void | AbortGenerateDataOff () |
|
virtual void | AbortGenerateDataOn () |
|
virtual void | EnlargeOutputRequestedRegion (DataObject *) |
|
virtual const bool & | GetAbortGenerateData () |
|
NameArray | GetInputNames () const |
|
MultiThreader * | GetMultiThreader () const |
|
DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
|
DataObjectPointerArraySizeType | GetNumberOfInputs () const |
|
DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
|
virtual
DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
|
NameArray | GetOutputNames () const |
|
virtual const float & | GetProgress () |
|
NameArray | GetRequiredInputNames () const |
|
bool | HasInput (const DataObjectIdentifierType &key) const |
|
bool | HasOutput (const DataObjectIdentifierType &key) const |
|
virtual DataObjectPointer | MakeOutput (const DataObjectIdentifierType &) |
|
virtual void | PrepareOutputs () |
|
virtual void | PropagateRequestedRegion (DataObject *output) |
|
virtual void | ResetPipeline () |
|
virtual void | SetAbortGenerateData (bool _arg) |
|
virtual void | SetProgress (float _arg) |
|
virtual void | Update () |
|
virtual void | UpdateLargestPossibleRegion () |
|
virtual void | UpdateOutputData (DataObject *output) |
|
virtual void | UpdateOutputInformation () |
|
void | UpdateProgress (float amount) |
|
DataObjectPointerArray | GetInputs () |
|
DataObjectPointerArray | GetOutputs () |
|
DataObjectPointerArray | GetIndexedInputs () |
|
DataObjectPointerArray | GetIndexedOutputs () |
|
DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
|
virtual void | SetReleaseDataFlag (bool flag) |
|
virtual bool | GetReleaseDataFlag () const |
|
void | ReleaseDataFlagOn () |
|
void | ReleaseDataFlagOff () |
|
virtual void | SetReleaseDataBeforeUpdateFlag (bool _arg) |
|
virtual const bool & | GetReleaseDataBeforeUpdateFlag () |
|
virtual void | ReleaseDataBeforeUpdateFlagOn () |
|
virtual void | ReleaseDataBeforeUpdateFlagOff () |
|
virtual void | SetNumberOfThreads (ThreadIdType _arg) |
|
virtual const ThreadIdType & | GetNumberOfThreads () |
|
unsigned long | AddObserver (const EventObject &event, Command *) |
|
unsigned long | AddObserver (const EventObject &event, Command *) const |
|
virtual void | DebugOff () const |
|
virtual void | DebugOn () const |
|
Command * | GetCommand (unsigned long tag) |
|
bool | GetDebug () const |
|
MetaDataDictionary & | GetMetaDataDictionary (void) |
|
const MetaDataDictionary & | GetMetaDataDictionary (void) 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 |
|
virtual void | Register () const |
|
void | RemoveAllObservers () |
|
void | RemoveObserver (unsigned long tag) |
|
void | SetDebug (bool debugFlag) const |
|
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
|
virtual void | SetReferenceCount (int) |
|
virtual void | UnRegister () const |
|
virtual void | Delete () |
|
virtual int | GetReferenceCount () const |
|
| itkCloneMacro (Self) |
|
void | Print (std::ostream &os, Indent indent=0) const |
|
|
void | AdjustSlabRegions (SlabRegionVectorType &slabs, OutputImageRegionType requestedRegion) |
|
bool | CheckMaskImage (ImageMaskType *mask) |
|
template<class TSource , class TTarget > |
void | CopyAndConvertImage (const TSource *source, TTarget *target, typename TTarget::RegionType requestedRegion) |
|
void | ExpImage (InternalImageType *source, InternalImageType *target) |
|
void | GenerateData () |
|
void | GetBiasFieldSize (InputImageRegionType region, BiasFieldType::DomainSizeType &domainSize) |
|
void | Log1PImage (InternalImageType *source, InternalImageType *target) |
|
| MRIBiasFieldCorrectionFilter () |
|
void | PrintSelf (std::ostream &os, Indent indent) const |
|
virtual | ~MRIBiasFieldCorrectionFilter () |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
virtual void | GenerateInputRequestedRegion () |
|
| ImageToImageFilter () |
|
virtual void | VerifyInputInformation () |
|
| ~ImageToImageFilter () |
|
void | PushBackInput (const DataObject *input) |
|
void | PushFrontInput (const DataObject *input) |
|
virtual void | AfterThreadedGenerateData () |
|
virtual void | AllocateOutputs () |
|
virtual void | BeforeThreadedGenerateData () |
|
virtual const
ImageRegionSplitterBase * | GetImageRegionSplitter (void) const |
|
| ImageSource () |
|
virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int num, OutputImageRegionType &splitRegion) |
|
virtual void | ThreadedGenerateData (const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId) |
|
virtual | ~ImageSource () |
|
virtual void | AddInput (DataObject *input) |
|
virtual void | AddOutput (DataObject *output) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateOutputInformation () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
virtual const
DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
| itkLegacyMacro (virtual void RemoveOutput(DataObject *output)) |
|
| itkLegacyMacro (void SetNumberOfOutputs(DataObjectPointerArraySizeType num)) |
|
| itkLegacyMacro (virtual void RemoveInput(DataObject *input)) |
|
| itkLegacyMacro (void SetNumberOfInputs(DataObjectPointerArraySizeType num)) |
|
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 | ReleaseInputs () |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType num, DataObject *input) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType num, DataObject *output) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &key, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *input) |
|
virtual void | SetPrimaryOutput (DataObject *output) |
|
virtual void | VerifyPreconditions () |
|
| ~ProcessObject () |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
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 (void) const |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual const
DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
void | SetRequiredInputNames (const NameArray &) |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName (void) const |
|
DataObject * | GetOutput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetOutput (DataObjectPointerArraySizeType idx) const |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &time) |
|
virtual | ~Object () |
|
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 () |
|