|
static constexpr unsigned int | ImageDimension = TOutputImage::ImageDimension |
|
static constexpr unsigned int | InputImageDimension = TInputImage::ImageDimension |
|
static constexpr unsigned int | OutputImageDimension = TOutputImage::ImageDimension |
|
static constexpr unsigned int | OutputImageDimension = TOutputImage::ImageDimension |
|
EnergyFunctionPointer | m_EnergyFunction |
|
NormalVariateGeneratorType::Pointer | m_NormalVariateGenerator |
|
ImageMaskPointer | m_InputMask |
|
ImageMaskPointer | m_OutputMask |
|
InternalImagePointer | m_InternalInput |
|
SlabRegionVectorType | m_Slabs |
|
int | m_SlicingDirection |
|
bool | m_BiasFieldMultiplicative { true } |
|
bool | m_UsingInterSliceIntensityCorrection |
|
bool | m_UsingSlabIdentification { false } |
|
bool | m_UsingBiasFieldCorrection { true } |
|
bool | m_GeneratingOutput { true } |
|
unsigned int | m_SlabNumberOfSamples { 200 } |
|
InputImagePixelType | m_SlabBackgroundMinimumThreshold |
|
double | m_SlabTolerance { 0.0 } |
|
int | m_BiasFieldDegree { 3 } |
|
unsigned int | m_NumberOfLevels { 0 } |
|
ScheduleType | m_Schedule |
|
BiasFieldType::CoefficientArrayType | m_BiasFieldCoefficients |
|
BiasFieldType::CoefficientArrayType | m_EstimatedBiasFieldCoefficients |
|
int | m_VolumeCorrectionMaximumIteration { 2000 } |
|
int | m_InterSliceCorrectionMaximumIteration { 4000 } |
|
double | m_OptimizerInitialRadius { 1.01 } |
|
double | m_OptimizerGrowthFactor { 1.05 } |
|
double | m_OptimizerShrinkFactor |
|
Array< double > | m_TissueClassMeans |
|
Array< double > | m_TissueClassSigmas |
|
static bool | IsScheduleDownwardDivisible (const ScheduleType &schedule) |
|
void | SetInputMask (ImageMaskType *inputMask) |
|
virtual ImageMaskType * | GetModifiableInputMask () |
|
virtual const ImageMaskType * | GetInputMask () const |
|
void | SetOutputMask (ImageMaskType *outputMask) |
|
virtual ImageMaskType * | GetModifiableOutputMask () |
|
virtual const ImageMaskType * | GetOutputMask () const |
|
void | IsBiasFieldMultiplicative (bool flag) |
|
virtual void | SetBiasFieldMultiplicative (bool _arg) |
|
virtual bool | GetBiasFieldMultiplicative () const |
|
virtual void | BiasFieldMultiplicativeOn () |
|
virtual void | BiasFieldMultiplicativeOff () |
|
bool | IsBiasFieldMultiplicative () |
|
virtual void | SetUsingInterSliceIntensityCorrection (bool _arg) |
|
virtual bool | GetUsingInterSliceIntensityCorrection () const |
|
virtual void | UsingInterSliceIntensityCorrectionOn () |
|
virtual void | UsingInterSliceIntensityCorrectionOff () |
|
virtual void | SetUsingSlabIdentification (bool _arg) |
|
virtual bool | GetUsingSlabIdentification () const |
|
virtual void | UsingSlabIdentificationOn () |
|
virtual void | UsingSlabIdentificationOff () |
|
virtual void | SetSlabBackgroundMinimumThreshold (InputImagePixelType _arg) |
|
virtual const InputImagePixelType & | GetSlabBackgroundMinimumThreshold () const |
|
virtual void | SetSlabNumberOfSamples (unsigned int _arg) |
|
virtual const unsigned int & | GetSlabNumberOfSamples () const |
|
virtual void | SetSlabTolerance (double _arg) |
|
virtual const double & | GetSlabTolerance () const |
|
virtual void | SetUsingBiasFieldCorrection (bool _arg) |
|
virtual bool | GetUsingBiasFieldCorrection () const |
|
virtual void | UsingBiasFieldCorrectionOn () |
|
virtual void | UsingBiasFieldCorrectionOff () |
|
virtual void | SetGeneratingOutput (bool _arg) |
|
virtual bool | GetGeneratingOutput () const |
|
virtual void | GeneratingOutputOn () |
|
virtual void | GeneratingOutputOff () |
|
virtual void | SetSlicingDirection (int _arg) |
|
virtual int | GetSlicingDirection () const |
|
virtual void | SetBiasFieldDegree (int _arg) |
|
virtual int | GetBiasFieldDegree () const |
|
void | SetInitialBiasFieldCoefficients (const BiasFieldType::CoefficientArrayType &coefficients) |
|
BiasFieldType::CoefficientArrayType | GetEstimatedBiasFieldCoefficients () |
|
void | SetTissueClassStatistics (const Array< double > &means, const Array< double > &sigmas) |
|
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 |
|
virtual void | SetOptimizerShrinkFactor (double _arg) |
|
virtual double | GetOptimizerShrinkFactor () const |
|
void | SetNumberOfLevels (unsigned int num) |
|
virtual unsigned int | GetNumberOfLevels () const |
|
void | SetSchedule (const ScheduleType &schedule) |
|
virtual const ScheduleType & | GetSchedule () const |
|
void | SetStartingShrinkFactors (unsigned int factor) |
|
void | SetStartingShrinkFactors (const unsigned int *factors) |
|
const unsigned int * | GetStartingShrinkFactors () const |
|
void | Initialize () |
|
BiasFieldType | EstimateBiasField (InputImageRegionType region, unsigned int degree, int maximumIteration) |
|
void | CorrectImage (BiasFieldType &bias, InputImageRegionType region) |
|
void | CorrectInterSliceIntensityInhomogeneity (InputImageRegionType region) |
|
| MRIBiasFieldCorrectionFilter () |
|
| ~MRIBiasFieldCorrectionFilter () override=default |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
bool | CheckMaskImage (ImageMaskType *mask) |
|
void | Log1PImage (InternalImageType *source, InternalImageType *target) |
|
void | ExpImage (InternalImageType *source, InternalImageType *target) |
|
template<typename TSource , typename TTarget > |
void | CopyAndConvertImage (const TSource *source, TTarget *target, typename TTarget::RegionType requestedRegion) |
|
void | GetBiasFieldSize (InputImageRegionType region, BiasFieldType::DomainSizeType &biasSize) |
|
void | AdjustSlabRegions (SlabRegionVectorType &slabs, OutputImageRegionType requestedRegion) |
|
void | GenerateData () override |
|
|
using | InputToOutputRegionCopierType = ImageToImageFilterDetail::ImageRegionCopier< Self::OutputImageDimension, Self::InputImageDimension > |
|
using | OutputToInputRegionCopierType = ImageToImageFilterDetail::ImageRegionCopier< Self::InputImageDimension, Self::OutputImageDimension > |
|
| ImageToImageFilter () |
|
| ~ImageToImageFilter () override=default |
|
void | VerifyInputInformation () ITKv5_CONST override |
|
void | GenerateInputRequestedRegion () override |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
void | PushBackInput (const DataObject *input) override |
|
void | PushFrontInput (const DataObject *input) override |
|
| ImageSource () |
|
| ~ImageSource () override=default |
|
void | ClassicMultiThread (ThreadFunctionType callbackFunction) |
|
virtual void | ThreadedGenerateData (const OutputImageRegionType ®ion, ThreadIdType threadId) |
|
virtual void | DynamicThreadedGenerateData (const OutputImageRegionType &outputRegionForThread) |
|
virtual void | AllocateOutputs () |
|
virtual void | BeforeThreadedGenerateData () |
|
virtual void | AfterThreadedGenerateData () |
|
virtual const ImageRegionSplitterBase * | GetImageRegionSplitter () const |
|
virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int pieces, OutputImageRegionType &splitRegion) |
|
virtual bool | GetDynamicMultiThreading () const |
|
virtual void | SetDynamicMultiThreading (bool _arg) |
|
virtual void | DynamicMultiThreadingOn () |
|
virtual void | DynamicMultiThreadingOff () |
|
| ProcessObject () |
|
| ~ProcessObject () override |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
DataObject * | GetInput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetInput (DataObjectPointerArraySizeType idx) const |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType idx, DataObject *input) |
|
virtual void | AddInput (DataObject *input) |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
DataObject * | GetPrimaryInput () |
|
const DataObject * | GetPrimaryInput () const |
|
virtual void | SetPrimaryInputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryInputName () const |
|
virtual void | SetPrimaryInput (DataObject *object) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
void | SetRequiredInputNames (const NameArray &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
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 |
|
virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
virtual void | SetPrimaryOutput (DataObject *object) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType idx, DataObject *output) |
|
virtual void | AddOutput (DataObject *output) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
DataObjectIdentifierType | MakeNameFromInputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectIdentifierType | MakeNameFromOutputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectPointerArraySizeType | MakeIndexFromInputName (const DataObjectIdentifierType &name) const |
|
DataObjectPointerArraySizeType | MakeIndexFromOutputName (const DataObjectIdentifierType &name) const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
virtual void | VerifyPreconditions () ITKv5_CONST |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
virtual void | GenerateOutputInformation () |
|
virtual void | PropagateResetPipeline () |
|
virtual void | ReleaseInputs () |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual bool | GetThreaderUpdateProgress () const |
|
virtual void | ThreaderUpdateProgressOn () |
|
virtual void | ThreaderUpdateProgressOff () |
|
virtual void | SetThreaderUpdateProgress (bool arg) |
|
| Object () |
|
| ~Object () override |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
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 () |
|
static const ImageRegionSplitterBase * | GetGlobalDefaultSplitter () |
|
static ITK_THREAD_RETURN_FUNCTION_CALL_CONVENTION | ThreaderCallback (void *arg) |
|
static constexpr float | progressFixedToFloat (uint32_t fixed) |
|
static uint32_t | progressFloatToFixed (float f) |
|
bool | m_DynamicMultiThreading |
|
bool | m_Updating |
|
TimeStamp | m_OutputInformationMTime |
|
std::atomic< int > | m_ReferenceCount |
|
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 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 232 of file itkMRIBiasFieldCorrectionFilter.h.