class ExampleWeightFunction
{
public:
using Self = ExampleWeightFunction;
itkTypeMacro(ExampleWeightFunction, FunctionBase);
itkNewMacro(Self);
using InputType = MeasurementVectorType;
using OutputType = double;
OutputType
Evaluate(
const InputType & input)
const override
{
if (input[0] < 3.0)
{
return 0.5;
}
else
{
return 0.01;
}
}
protected:
ExampleWeightFunction() = default;
~ExampleWeightFunction() override = default;
};
int
main()
{
SampleType::Pointer sample = SampleType::New();
sample->SetMeasurementVectorSize(3);
MeasurementVectorType mv;
mv[0] = 1.0;
mv[1] = 2.0;
mv[2] = 4.0;
sample->PushBack(mv);
mv[0] = 2.0;
mv[1] = 4.0;
mv[2] = 5.0;
sample->PushBack(mv);
mv[0] = 3.0;
mv[1] = 8.0;
mv[2] = 6.0;
sample->PushBack(mv);
mv[0] = 2.0;
mv[1] = 7.0;
mv[2] = 4.0;
sample->PushBack(mv);
mv[0] = 3.0;
mv[1] = 2.0;
mv[2] = 7.0;
sample->PushBack(mv);
using WeightedMeanAlgorithmType =
WeightedMeanAlgorithmType::WeightArrayType weightArray(sample->Size());
weightArray.Fill(0.5);
weightArray[2] = 0.01;
weightArray[4] = 0.01;
WeightedMeanAlgorithmType::Pointer weightedMeanAlgorithm =
WeightedMeanAlgorithmType::New();
weightedMeanAlgorithm->SetInput(sample);
weightedMeanAlgorithm->SetWeights(weightArray);
weightedMeanAlgorithm->Update();
std::cout << "Sample weighted mean = " << weightedMeanAlgorithm->GetMean()
<< std::endl;
using WeightedCovarianceAlgorithmType =
WeightedCovarianceAlgorithmType::Pointer weightedCovarianceAlgorithm =
WeightedCovarianceAlgorithmType::New();
weightedCovarianceAlgorithm->SetInput(sample);
weightedCovarianceAlgorithm->SetWeights(weightArray);
weightedCovarianceAlgorithm->Update();
std::cout << "Sample weighted covariance = " << std::endl;
std::cout << weightedCovarianceAlgorithm->GetCovarianceMatrix()
<< std::endl;
ExampleWeightFunction::Pointer weightFunction =
ExampleWeightFunction::New();
weightedMeanAlgorithm->SetWeightingFunction(weightFunction);
weightedMeanAlgorithm->Update();
std::cout << "Sample weighted mean = " << weightedMeanAlgorithm->GetMean()
<< std::endl;
weightedCovarianceAlgorithm->SetWeightingFunction(weightFunction);
weightedCovarianceAlgorithm->Update();
std::cout << "Sample weighted covariance = " << std::endl;
std::cout << weightedCovarianceAlgorithm->GetCovarianceMatrix();
std::cout << "Sample weighted mean (from WeightedCovarainceSampleFilter) = "
<< std::endl
<< weightedCovarianceAlgorithm->GetMean() << std::endl;
return EXIT_SUCCESS;
}