1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
/*=========================================================================
Program: Advanced Normalization Tools
Copyright (c) ConsortiumOfANTS. All rights reserved.
See accompanying COPYING.txt or
https://github.com/stnava/ANTs/blob/master/ANTSCopyright.txt
for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __antsListSampleFunction_h
#define __antsListSampleFunction_h
#include "itkFunctionBase.h"
#include "itkArray.h"
namespace itk
{
namespace ants
{
namespace Statistics
{
/** \class ListSampleFunction
* \brief Evaluates a function of an image at specified position.
*
* ListSampleFunction is a baseclass for all objects that evaluates
* a function of a list sample at a measurement
* This class is templated over the input list type, the type
* of the function output and the coordinate representation type
* (e.g. float or double).
*
* The input list sample is set via method SetInputListSample().
* The methods Evaluate() evaluates the function at a measurement vector.
*
* \ingroup ListSampleFunctions
*/
template <typename TInputListSample, typename TOutput, typename TCoordRep = float>
class ListSampleFunction : public FunctionBase<typename TInputListSample::MeasurementVectorType, TOutput>
{
public:
/** Standard class typedefs. */
typedef ListSampleFunction Self;
typedef FunctionBase<TInputListSample, TOutput> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Run-time type information (and related methods). */
itkTypeMacro(ListSampleFunction, FunctionBase);
/** InputListSampleType typedef support. */
typedef TInputListSample InputListSampleType;
/** Array typedef for weights */
typedef Array<double> ListSampleWeightArrayType;
/** InputPixel typedef support */
typedef typename InputListSampleType::MeasurementVectorType InputMeasurementVectorType;
typedef typename InputListSampleType::MeasurementType InputMeasurementType;
/** OutputType typedef support. */
typedef TOutput OutputType;
/** CoordRepType typedef support. */
typedef TCoordRep CoordRepType;
/** Set the input point set.
* \warning this method caches BufferedRegion information.
* If the BufferedRegion has changed, user must call
* SetInputListSample again to update cached values. */
virtual void
SetInputListSample(const InputListSampleType * ptr)
{
this->SetIndexedInputListSample(0, ptr);
}
virtual void
SetIndexedInputListSample(const unsigned int d, const InputListSampleType * ptr);
/** Sets the weights using an array */
virtual void
SetListSampleWeights(ListSampleWeightArrayType * array)
{
this->SetListSampleWeights(0, array);
}
virtual void
SetListSampleWeights(const unsigned int, ListSampleWeightArrayType *);
/** Get the input image. */
virtual const InputListSampleType *
GetInputListSample(const unsigned int idx = 0) const;
/** Clear the input list sample to free memory */
virtual void
ClearInputListSample(const unsigned int idx = 0)
{
this->SetIndexedInputListSample(idx, nullptr);
}
/** Gets the weights array */
virtual ListSampleWeightArrayType *
GetListSampleWeights(const unsigned int idx = 0);
/** Evaluate the function at specified Point position.
* Subclasses must provide this method. */
TOutput
Evaluate(const InputMeasurementVectorType & measurement) const override = 0;
protected:
ListSampleFunction();
~ListSampleFunction() override = default;
void
PrintSelf(std::ostream & os, Indent indent) const override;
/** Const pointer to the input image. */
std::vector<typename InputListSampleType::ConstPointer> m_ListSamples;
std::vector<ListSampleWeightArrayType *> m_ListSampleWeights;
private:
ListSampleFunction(const Self &) = delete;
void
operator=(const Self &) = delete;
};
} // end of namespace Statistics
} // end of namespace ants
} // end of namespace itk
// Define instantiation macro for this template.
#define ITK_TEMPLATE_ListSampleFunction(_, EXPORT, x, y) \
namespace itk \
{ \
_(3(class EXPORT ListSampleFunction<ITK_TEMPLATE_3 x>)) \
namespace Templates \
{ \
typedef ListSampleFunction<ITK_TEMPLATE_3 x> ListSampleFunction##y; \
} \
}
#if ITK_TEMPLATE_EXPLICIT
# include "Templates/antsListSampleFunction+-.h"
#endif
#ifndef ITK_MANUAL_INSTANTIATION
# include "antsListSampleFunction.hxx"
#endif
#endif
|