17 #ifndef __itkVariableDimensionHistogram_h
18 #define __itkVariableDimensionHistogram_h
30 namespace Statistics {
66 template <
class TMeasurement = float,
67 class TFrequencyContainer = DenseFrequencyContainer >
69 :
public Sample < Array< TMeasurement > >
119 void Initialize(
const SizeType &size);
144 itkGetMacro(ClipBinsAtEnds,
bool);
148 itkSetMacro(ClipBinsAtEnds,
bool);
152 bool IsIndexOutOfBounds(
const IndexType &index)
const;
160 unsigned int Size()
const;
169 return m_Size[dimension];
174 const unsigned long nbin)
const
175 {
return m_Min[dimension][nbin]; }
179 const unsigned long nbin)
const
180 {
return m_Max[dimension][nbin]; }
183 void SetBinMin(
const unsigned int dimension,
const unsigned long nbin,
185 { m_Min[dimension][nbin] = min; }
188 void SetBinMax(
const unsigned int dimension,
190 { m_Max[dimension][nbin] = max; }
194 const MeasurementType& GetBinMinFromValue(
const unsigned int dimension,
195 const float value )
const;
199 const MeasurementType& GetBinMaxFromValue(
const unsigned int dimension,
200 const float value )
const;
204 {
return m_Min[dimension]; }
208 {
return m_Max[dimension]; }
218 MeasurementVectorType& GetHistogramMinFromValue(
const MeasurementVectorType
222 MeasurementVectorType& GetHistogramMaxFromValue(
const MeasurementVectorType
226 MeasurementVectorType& GetHistogramMinFromIndex(
const IndexType &index);
229 MeasurementVectorType& GetHistogramMaxFromIndex(
const IndexType &index);
233 {
return m_FrequencyContainer->GetFrequency(ident); }
236 FrequencyType GetFrequency(
const IndexType &index)
const;
239 void SetFrequency(
const FrequencyType value);
244 {
return m_FrequencyContainer->SetFrequency(ident, value); }
248 bool SetFrequency(
const IndexType &index,
249 const FrequencyType value);
253 bool SetFrequency(
const MeasurementVectorType &measurement,
254 const FrequencyType value);
262 {
return m_FrequencyContainer->IncreaseFrequency(ident, value); }
267 bool IncreaseFrequency(
const IndexType &index,
268 const FrequencyType value);
273 bool IncreaseFrequency(
const MeasurementVectorType &measurement,
274 const FrequencyType value);
279 const MeasurementVectorType & GetMeasurementVector(
const InstanceIdentifier &ident)
const;
282 const MeasurementVectorType & GetMeasurementVector(
const IndexType &index)
const;
286 MeasurementType GetMeasurement(
const unsigned long n,
287 const unsigned int dimension)
const;
290 TotalFrequencyType GetTotalFrequency()
const;
293 FrequencyType GetFrequency(
const unsigned long n,
294 const unsigned int dimension)
const;
311 double Quantile(
const unsigned int dimension,
const double &p)
const;
314 void PrintSelf(std::ostream& os,
Indent indent)
const;
327 m_Histogram = histogram;
331 : m_Id(ident), m_Histogram(histogram) {}
335 return m_Histogram->GetFrequency(m_Id);
340 return m_Histogram->SetFrequency(m_Id, value);
348 return m_Histogram->GetMeasurementVector(m_Id);
358 {
return (m_Id != it.
m_Id); }
361 {
return (m_Id == it.
m_Id); }
393 m_Histogram = histogram;
397 : m_Id(ident), m_Histogram(histogram) {}
401 return m_Histogram->GetFrequency(m_Id);
406 return m_Histogram->SetFrequency(m_Id, value);
414 return m_Histogram->GetMeasurementVector(m_Id);
424 {
return (m_Id != it.
m_Id); }
427 {
return (m_Id == it.
m_Id); }
458 return Iterator(m_OffsetTable[this->GetMeasurementVectorSize()],
this);
469 return ConstIterator(m_OffsetTable[this->GetMeasurementVectorSize()],
this);
479 void SetMeasurementVectorSize(
const MeasurementVectorSizeType );
486 void operator=(
const Self&);
493 std::vector< std::vector<MeasurementType> >
m_Min;
496 std::vector< std::vector<MeasurementType> >
m_Max;
508 #ifndef ITK_MANUAL_INSTANTIATION