Rewrite texture computation for FeatureExtraction application (ScalarImageTextureFunctor is doing too many allocations)
Use the itkScalarImageTextureCalculator, itkGreyLevelCoocurenceMatrixTextureCoefficientClaculator to create neighborhood functors and functions that compute:
-
Energy -
Inertia : equal to contrast -
ClusterShade -
ClusterProminence
Haralick descriptors, see [1] (use Scott formula for bin computation):
Angular second momentContrastCorrelation: need validationSum of squares: VarianceInverse difference moment (Homogeneity)Sum averageSum varianceSum entropyEntropyDifference varianceDifference entropyInformation measure of correlation(1)Information measure of correlation(2)
Cherry onthe cake:
Mean
To gather the code used by the functors and functions, a TextureFunctorBase was made. It is templated with NeighborhoodIterators (one for the neighborhood, one for the offset neighborhood).
The method operator(), loops over each component of the pointed pixel, creates 2 Neighbordhoods that are given to a method ComputeOverSingleChannel declared pure virtual. The function class, calls directly this method using it.GetNeighborhood(). Each texture functor inherits from TextureFunctorBase and only has to overload ComputeOverSingleChannel.
Moreover, TextureFunctorBase deals with the offset setting (used in the computation).
MAJ: Haralick descriptors formula: [2]