Create Histogram From List Of Measurements

Synopsis

Create a histogram from a list of sample measurements.

Results

Output:

Histogram vector size: 1
Frequency of 0 : (1 to 1.1001) = 2
Frequency of 1 : (1.1001 to 1.2002) = 0
Frequency of 2 : (1.2002 to 1.3003) = 0
Frequency of 3 : (1.3003 to 1.4004) = 0
Frequency of 4 : (1.4004 to 1.5005) = 0
Frequency of 5 : (1.5005 to 1.6006) = 0
Frequency of 6 : (1.6006 to 1.7007) = 0
Frequency of 7 : (1.7007 to 1.8008) = 0
Frequency of 8 : (1.8008 to 1.9009) = 0
Frequency of 9 : (1.9009 to 2.001) = 1
Total count 3

Code

C++

#include "itkSampleToHistogramFilter.h"
#include "itkListSample.h"
#include "itkHistogram.h"

using MeasurementVectorType = itk::Vector<unsigned char, 1>;
using SampleType = itk::Statistics::ListSample<MeasurementVectorType>;

using HistogramType = itk::Statistics::Histogram<float, itk::Statistics::DenseFrequencyContainer2>;

void
CreateSample(SampleType::Pointer image);

int
main(int, char *[])
{
  SampleType::Pointer sample = SampleType::New();
  CreateSample(sample);

  using SampleToHistogramFilterType = itk::Statistics::SampleToHistogramFilter<SampleType, HistogramType>;
  SampleToHistogramFilterType::Pointer sampleToHistogramFilter = SampleToHistogramFilterType::New();
  sampleToHistogramFilter->SetInput(sample);

  SampleToHistogramFilterType::HistogramSizeType histogramSize(1);
  histogramSize.Fill(10);
  sampleToHistogramFilter->SetHistogramSize(histogramSize);

  sampleToHistogramFilter->Update();

  const HistogramType * histogram = sampleToHistogramFilter->GetOutput();
  std::cout << "Histogram vector size: " << histogram->GetMeasurementVectorSize() << std::endl;


  for (unsigned int i = 0; i < histogram->GetSize()[0]; i++)
  {
    std::cout << "Frequency of " << i << " : (" << histogram->GetBinMin(0, i) << " to " << histogram->GetBinMax(0, i)
              << ") = " << histogram->GetFrequency(i) << std::endl;
  }

  std::cout << "Total count " << histogram->GetTotalFrequency() << std::endl;

  return EXIT_SUCCESS;
}

void
CreateSample(SampleType::Pointer sample)
{
  MeasurementVectorType mv;
  mv[0] = 1.0;
  sample->PushBack(mv);

  mv[0] = 1.0;
  sample->PushBack(mv);

  mv[0] = 2.0;
  sample->PushBack(mv);
}

Classes demonstrated