17 #include <itkSampleToHistogramFilter.h> 18 #include <vtkDataArray.h> 19 #include <vtkPointData.h> 20 #include <vtkUnstructuredGrid.h> 25 : m_UGHistogram(HistogramType::New()), m_InvMaxFrequency(1)
33 return m_UGHistogram->GetBinMax(0, m_UGHistogram->GetSize(0) - 1);
43 ListSampleType::Pointer listSample = ListSampleType::New();
44 listSample->SetMeasurementVectorSize(1);
46 MeasurementVectorType v;
48 MeasurementVectorType lowerBound;
49 MeasurementVectorType upperBound;
52 HistogramType::SizeType size(1);
55 data = vtkUGrid->GetPointData()->GetScalars();
60 listSample->Resize(1);
62 listSample->PushBack(v);
65 size.Fill(numberOfBins);
69 listSample->Resize(data->GetNumberOfTuples());
70 for (vtkIdType i = 0; i < data->GetNumberOfTuples(); ++i)
72 v[0] = data->GetComponent(i, 0);
74 listSample->PushBack(v);
77 vtkIdType numberOfTuples = data->GetNumberOfTuples();
79 if (numberOfTuples < 1000)
81 else if (numberOfTuples < 30000)
83 else if (numberOfTuples < 100000)
88 size.Fill(numberOfBins);
91 data->GetRange(range);
92 lowerBound[0] = range[0];
93 upperBound[0] = range[1];
96 typedef itk::Statistics::SampleToHistogramFilter<ListSampleType, HistogramType> FilterType;
97 FilterType::Pointer histoFilter = FilterType::New();
99 FilterType::HistogramMeasurementVectorType binMin(1);
100 FilterType::HistogramMeasurementVectorType binMax(1);
102 binMin[0] = lowerBound[0];
103 binMax[0] = upperBound[0];
105 histoFilter->SetInput(listSample);
106 histoFilter->SetHistogramSize(size);
107 histoFilter->SetHistogramBinMinimum(binMin);
108 histoFilter->SetHistogramBinMaximum(binMax);
109 histoFilter->Update();
111 m_UGHistogram = histoFilter->GetOutput();
113 m_BinSize = (
GetMax() -
GetMin()) / (
double)numberOfBins;
115 m_Mins = m_UGHistogram->GetMins();
116 m_Maxs = m_UGHistogram->GetMaxs();
118 HistogramType::AbsoluteFrequencyType maxFrequency = 0;
119 HistogramType::SizeValueType histoSize = m_UGHistogram->GetSize(0);
120 for (HistogramType::SizeValueType i = 0; i < histoSize; ++i)
122 HistogramType::AbsoluteFrequencyType f = m_UGHistogram->GetFrequency(i);
123 if (f > maxFrequency)
132 m_InvMaxFrequency = 1.0 / log((
double)maxFrequency);
142 HistogramType::AbsoluteFrequencyType maxf = 0;
143 for (
double pos = start; pos < end; pos += m_BinSize)
145 HistogramType::AbsoluteFrequencyType f = m_UGHistogram->GetFrequency(m_UGHistogram->GetIndex(pos));
150 return log(static_cast<double>(maxf)) * m_InvMaxFrequency;
double GetMax() const override
Returns the maximum value of the histogram.
Base of all data objects.
DataCollection - Class to facilitate loading/accessing structured data.
virtual vtkUnstructuredGrid * GetVtkUnstructuredGrid(unsigned int t=0)
SimpleUnstructuredGridHistogram()
void ComputeFromBaseData(BaseData *source) override
Creates a new histogram out the source.
double GetMin() const override
Returns the minimal value of the histogram.
Class for storing unstructured grids (vtkUnstructuredGrid)
float GetRelativeBin(double start, double end) const override
TODO: (What should this method do?)