Proposals:Refactoring Statistics Framework 2007 Migration Users Guide: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
Line 142: Line 142:
| ImageToListAdaptor            || Refactored into "ImageToListSampleAdaptor". This class handles images with scalar, fixed size array (itk::FixedArray) and variable length vector (itk::VariableLengthVector) pixel types.  
| ImageToListAdaptor            || Refactored into "ImageToListSampleAdaptor". This class handles images with scalar, fixed size array (itk::FixedArray) and variable length vector (itk::VariableLengthVector) pixel types.  
||
||
* Doesn't derive from ListSampleBase since ListSampleBase has been deprecated
* isn't derived from ListSampleBase since ListSampleBase has been deprecated
* removed the second template parameter ( MeasurementVectorType ) since it is redundant. The measurement vector type is determined from the input Image type using MeasurementVectorPixelTraits.
* the second template parameter ( MeasurementVectorType ) is removed since it is redundant. The measurement vector type is determined from the input Image type using the newly added MeasurementVectorPixelTraits.
* GetUseBuffer() : This method is renamed as GetUsePointContainer(). The term "buffer" is misleading. This flag is used in the class to differentiate between accessing the pixel value directly from the pixel container or using GetPixel(Index) method after computing the index for the given id using ComputeIndex() method.  In addition to the Get method, Set methods have been added as indicated in the new API column.
* GetUseBuffer() : This method is renamed as GetUsePointContainer(). The term "buffer" is misleading. This flag is used in the class to differentiate between accessing the pixel value directly from the pixel container or using GetPixel(Index) method after computing the index for the given id using ComputeIndex() method.  In addition to the Get method, Set methods have been added as indicated in the new API column.



Revision as of 17:17, 5 May 2007

How To Migrate your code to the New Statistics Framework

Measurement Containers



Class Name Fate Deprecated API New API
Sample Refactored
  • Does not derives from Object anymore, now it derives from DataObject.
  • typedef for InstanceIdentifier was replaced from unsigned long to std::vector<MeasurementVectorType>::size_type
  • Size() method now returns InstanceIdentifier type, before it returned unsigned int, which was inconsistent with the declaration of InstanceIdentifier as unsigned long. The return type of Size() must be the same use for Id of the elements, since it may reach the same maximum number.
  • Removing unnecessary const in identifiers
    • GetMeasurementVector( const InstanceItentifier & id ) is now GetMeasurementVector( InstanceItentifier id )
    • GetFrequency( const InstanceItentifier & id ) is now GetFrequency( InstanceItentifier id )
    • SetMeasurementVectorSize( const MeasurementVectorSizeType s ) is now SetMeasurementVectorSize( MeasurementVectorSizeType s )
  • const-correctness is now enforced.
  • It now derives from DataObject
Subsample Refactored
  • The concept of Indices and InstanceIdentifiers was fixed. InstanceIdentifiers were previously referring to the original Sample, they are now referring to the current Subsample set of measurement vectors.
  • It now derives from its template argument. Before, it was deriving from an explicit itk::Statistics::Sample<> whose template argument MeasurementVector was taken as a trait from the Subsample template argument. The current derivation is more consistent with the notion that the Subsample should behave as the sample from which the instances are taken.
  • FrequencyType GetFrequencyByIndex(int index) const : was removed. This method becomes obsolete when the inconsistencies between index and identifier are removed.
  • InstanceIdentifier GetInstanceIdentifier(int index) const; was removed. This method becomes obsolete when the inconsistencies between index and identifier are removed.
  • Iterators
    • Common
      • GetInstanceIdentifier() now returns the integer distance to the Begin() element. Before it used to return the index of the instance in the real sample.
      • Iterator& operator+(int n) and Iterator& operator-(int n) were removed. The methods were not used, and they were not consistent with other containers. They were also unsafe, given that with Begin() and End() there is no way to verify if an iterator has moved before Begin() or after End() (unless we rely on being aware of the underlying pointer implementation of the Iterators, which would be a violation of the class encapsulation).
      • Constructor ConstIterator(typename InstanceIdentifierHolder::const_iterator iter, const Self* classSample) was made protected, since this constructor must only be called by the Sample owner class.
    • ConstIterator
      • removing Friendship to the Iterator
    • non-const Iterator
      • removing Friendship to the ConstIterator
  • The basic principle followed now in the design of the Subsample class is that the subsample should behave as a sample. That is, a user should be able to use a Subsample class in any algorithm that is expecting a Sample.
  • AddInstance( InsitanceIdentifier Id )
    • Now throws an exception if the Id is larger than the Size of the Sample.
    • Now it calls Modified()
  • Iterators
    • Now the non-const Iterator derives from the ConstIterator
    • Methods declared protected and purposely not implemented
      • Default constructor: This was a safety risk since it contained uninitialized variables
      • The following method are in this category to enforce const correctness. All of them could have offered ways of removing constness without warning
        • Iterator(const Self * sample);
        • Iterator(typename InstanceIdentifierHolder::const_iterator iter, const Self* classSample);
        • Iterator(const ConstIterator & it);
        • ConstIterator& operator=(const ConstIterator& it);
ListSampleBase Deprecated. The class was unecessary, it was providing only a Search() method that should in fact be provided by a process class, not a data container.
  • If you were deriving a class from the itk::Statistics::ListSampleBase, you should now derive directly from the itk::Statistics::Sample class.
  • If you were using the Search() method you can get that functionality now from the (refactored) NeighborhoodSampler filter class. Note that the NeighborhoodSampler now allows users to setup a specific distance metric.
ListSample Refactored Luis to add more here The iterators API was updated, const-correctness is now enforced
MembershipSample Refactored Luis to add more here
  • It does not derive from itk::Sample anymore, instead it derives from DataObject.
Histogram Refactored Luis to add more here
VariableDimensionHistogram
KdTree Refactored Luis to add more here

Frequency Containers

Class Name Fate Deprecated API New API
DenseFrequencyContainer
SparseFrequencyContainer

Process Objects

Class Name Fate Deprecated API New API
SampleClassifier
SampleClassifierWithMask

Traits

Class Name Fate Deprecated API New API
MeasurementVectorTraits Refactored (same name)
  • Added Assert() instantiations for comparing length of
    • FixedArray raw pointer, std::vector raw pointer
    • FixedArray reference, std::vector reference
  • Added Assign() method for generalizing the assignment of scalars and vector types
    • Assign() vectorType to vectorType
    • Assign() scalarType to FixedArray< scalarType, 1 >
  • Added trait MeasurementVectorType
    • to be used as MeasurementVectorPixelTraits< PixelType >::MeasurementVectorType
    • This trait generalizes the mechanism for creating a measurement vector using as component type the pixel type of an image
  • Added explicit testing up to 100% code coverage

MeanShift

Class Name Fate Deprecated API New API

Adaptors

Class Name Fate Deprecated API New API
ImageToCoocurrenceListAdaptor UNDECIDED
ImageToListAdaptor Refactored into "ImageToListSampleAdaptor". This class handles images with scalar, fixed size array (itk::FixedArray) and variable length vector (itk::VariableLengthVector) pixel types.
  • isn't derived from ListSampleBase since ListSampleBase has been deprecated
  • the second template parameter ( MeasurementVectorType ) is removed since it is redundant. The measurement vector type is determined from the input Image type using the newly added MeasurementVectorPixelTraits.
  • GetUseBuffer() : This method is renamed as GetUsePointContainer(). The term "buffer" is misleading. This flag is used in the class to differentiate between accessing the pixel value directly from the pixel container or using GetPixel(Index) method after computing the index for the given id using ComputeIndex() method. In addition to the Get method, Set methods have been added as indicated in the new API column.
  • The class derives from ListSample with the measurement vector type determined from the input image type
  • The Iterator and ConstIterator API is modified to be consistent with the iterator and constiterators of the ListSample class.
  • Added SetUsePixelContainer( bool ) : To turn on and off the UsePixelContainer flag.
  • Added UsePixelContainerOn(), UsePixelContainerOff() : convenient methods to turn on/off the UsePixelContainer flag.
ScalarImageToListAdaptor Deprecated ( This class is redundant as the new ImageToListSampleAdaptor also handles scalar images with scalar pixel type. )
JointDomainImageToListAdaptor Refactored into "JointDomainImageToListSampleAdaptor"
PointSetToListAdapor Refactored into "PointSetToListSampleAdaptor"

Univariate Distributions

Class Name Fate Deprecated API New API

Algorithms

Class Name Fate Deprecated API New API

Calculators

Class Name Fate Deprecated API New API
CovarianceCalculator Refactored into CovarianceFilter SetMean() because it was inconsistent GetOutput(), SetInput(), GetMean()
GreyLevelCooccurrenceMatrixTextureCoefficientsCalculator Refactored into HistogramToTextureFeaturesFilter now derives from ProcessObject, SetInput(), GetOutput()
MeanCalculator Refactored into MeanFilter SetSample() method replaced with SetInput() now derives from ProcessObject
ScalarImageTextureCalculator Refactored into (???Filter)
WeightedCovarianceCalculator Refactored into WeightedCovarianceFilter
  • SetSample() method replaced with SetInput()
  • SetWeightFunction() now you could use the WeightFilter???
  • now derives from ProcessObject
  • SetWeightsInputs() (the data decorated version of SetWeights() ....
WeightedMeanCalculator Refactored into WeightedMeanFilter
  • SetSample() method replaced with SetInput()
  • SetWeightFunction() now you could use the WeightFilter???
  • now derives from ProcessObject
  • SetWeightsInputs() (the data decorated version of SetWeights() ....


Generators

Class Name Fate Deprecated API New API


Filters

Class Name Fate Deprecated API New API

Multivariate Density Functions

Class Name Fate Deprecated API New API

Distance Metrics

Class Name Fate Deprecated API New API

Components

Class Name Fate Deprecated API New API

Estimators

Class Name Fate Deprecated API New API