📄 itkvariabledimensionhistogram.txx
字号:
if ( value <= this->m_Max[dimension][0] )
{
return this->m_Max[dimension][0];
}
// If the value is higher than any of max value in the VariableDimensionHistogram,
// it returns the highest max value
if ( value >= m_Max[dimension][m_Size[dimension]-1] )
{
return m_Max[dimension][this->m_Size[dimension]-1];
}
for ( int i = 0 ; i < this->m_Size[dimension]; i++ )
{
if ( (value >= this->m_Min[dimension][i])
&& (value < this->m_Max[dimension][i]) )
{
return this->m_Max[dimension][i];
}
}
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType&
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetHistogramMinFromValue(const MeasurementVectorType &measurement)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
const MeasurementVectorSizeType measurementVectorSize =
this->GetMeasurementVectorSize();
MeasurementVectorTraits::Assert( measurement, measurementVectorSize,
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
for ( int i = 0; i < measurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetDimensionMinByValue(i,measurement[i]);
}
return m_TempMeasurementVector ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType&
VariableDimensionHistogram<TMeasurement, TFrequencyContainer>
::GetHistogramMaxFromValue(const MeasurementVectorType &measurement)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
const MeasurementVectorSizeType measurementVectorSize =
this->GetMeasurementVectorSize();
MeasurementVectorTraits::Assert( measurement, measurementVectorSize,
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
for ( int i=0; i < measurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetDimensionMaxByValue(i,measurement[i]);
}
return m_TempMeasurementVector ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType&
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetHistogramMinFromIndex(const IndexType &index)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
for ( int i=0; i < this->GetMeasurementVectorSize(); i++ )
{
m_TempMeasurementVector[i] = this->GetBinMin(i, index[i]) ;
}
return m_TempMeasurementVector ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType&
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetHistogramMaxFromIndex(const IndexType &index)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
for ( int i=0; i < this->GetMeasurementVectorSize(); i++ )
{
m_TempMeasurementVector[i] = this->GetBinMax(i, index[i]) ;
}
return m_TempMeasurementVector ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline const typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType &
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetMeasurementVector(const IndexType &index) const
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
for ( unsigned int i = 0; i < this->GetMeasurementVectorSize(); i++)
{
MeasurementType value = (m_Min[i][index[i]] + m_Max[i][index[i]]);
m_TempMeasurementVector[i] = static_cast< MeasurementType >( value / 2.0 );
}
return m_TempMeasurementVector ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline const typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementVectorType &
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetMeasurementVector(const InstanceIdentifier &id) const
{
return this->GetMeasurementVector( this->GetIndex(id) ) ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline void
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::SetFrequency(const FrequencyType value)
{
typename Self::Iterator iter = this->Begin() ;
typename Self::Iterator end = this->End() ;
while ( iter != end )
{
iter.SetFrequency(value) ;
++iter ;
}
}
template< class TMeasurement,
class TFrequencyContainer >
inline bool
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::SetFrequency(const IndexType &index, const FrequencyType value)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
return this->SetFrequency( this->GetInstanceIdentifier(index), value) ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline bool
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::SetFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
const MeasurementVectorSizeType measurementVectorSize =
this->GetMeasurementVectorSize();
MeasurementVectorTraits::Assert( measurement, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::SetFrequency");
return this->SetFrequency( this->GetInstanceIdentifier(GetIndex(measurement)), value) ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline bool
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::IncreaseFrequency(const IndexType &index, const FrequencyType value)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetIndex(MeasurementVectorType, IndexType)");
const bool result =
this->IncreaseFrequency( this->GetInstanceIdentifier(index), value) ;
return result;
}
template< class TMeasurement,
class TFrequencyContainer >
inline bool
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::IncreaseFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
// Sanity check.. see if index is of the same length as MeasurementVectorSize;
const MeasurementVectorSizeType measurementVectorSize =
this->GetMeasurementVectorSize();
MeasurementVectorTraits::Assert( measurement, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::IncreaseFrequency");
IndexType index( measurementVectorSize );
this->GetIndex( measurement, index );
return this->IncreaseFrequency( this->GetInstanceIdentifier( index ), value );
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::FrequencyType
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetFrequency(const IndexType &index) const
{
MeasurementVectorTraits::Assert( index, this->GetMeasurementVectorSize(),
"Length mismatch: VariableDimensionHistogram::GetFrequency");
return ( this->GetFrequency( this->GetInstanceIdentifier(index)) ) ;
}
template< class TMeasurement,
class TFrequencyContainer>
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::MeasurementType
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetMeasurement(const unsigned long n, const unsigned int dimension) const
{
return static_cast< MeasurementType >((m_Min[dimension][n] +
m_Max[dimension][n]) / 2) ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::FrequencyType
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetFrequency(const unsigned long n, const unsigned int dimension) const
{
InstanceIdentifier nextOffset = m_OffsetTable[dimension + 1] ;
InstanceIdentifier current = m_OffsetTable[dimension] * n ;
InstanceIdentifier includeLength = m_OffsetTable[dimension] ;
InstanceIdentifier include ;
InstanceIdentifier includeEnd ;
InstanceIdentifier last = m_OffsetTable[this->GetMeasurementVectorSize()] ;
FrequencyType frequency = 0 ;
while (current < last)
{
include = current ;
includeEnd = include + includeLength ;
while(include < includeEnd)
{
frequency += GetFrequency(include) ;
include++ ;
}
current += nextOffset ;
}
return frequency ;
}
template< class TMeasurement,
class TFrequencyContainer >
inline typename VariableDimensionHistogram< TMeasurement,
TFrequencyContainer >::TotalFrequencyType
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::GetTotalFrequency() const
{
return m_FrequencyContainer->GetTotalFrequency() ;
}
template< class TMeasurement,
class TFrequencyContainer >
double
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::Quantile(const unsigned int dimension, const double &p) const
{
InstanceIdentifier n ;
const unsigned int size = this->GetSize(dimension) ;
double p_n_prev ;
double p_n ;
double f_n ;
double cumulated = 0 ;
double totalFrequency = double( this->GetTotalFrequency() ) ;
double binProportion ;
double min, max, interval ;
if ( p < 0.5 )
{
n = 0 ;
p_n = NumericTraits< double >::Zero ;
do
{
f_n = this->GetFrequency(n, dimension) ;
cumulated += f_n ;
p_n_prev = p_n ;
p_n = cumulated / totalFrequency ;
n++ ;
}
while( n < size && p_n < p) ;
binProportion = f_n / totalFrequency ;
min = double( this->GetBinMin(dimension, n - 1) ) ;
max = double( this->GetBinMax(dimension, n - 1) ) ;
interval = max - min ;
return min + ((p - p_n_prev) / binProportion) * interval ;
}
else
{
n = size - 1 ;
InstanceIdentifier m = NumericTraits< InstanceIdentifier >::Zero;
p_n = NumericTraits< double >::One ;
do
{
f_n = this->GetFrequency(n, dimension) ;
cumulated += f_n ;
p_n_prev = p_n ;
p_n = NumericTraits< double >::One - cumulated / totalFrequency ;
n--;
m++;
}
while( m < size && p_n > p);
binProportion = f_n / totalFrequency ;
min = double( this->GetBinMin(dimension, n + 1) ) ;
max = double( this->GetBinMax(dimension, n + 1) ) ;
interval = max - min ;
return max - ((p_n_prev - p) / binProportion) * interval ;
}
}
template< class TMeasurement,
class TFrequencyContainer >
void
VariableDimensionHistogram< TMeasurement, TFrequencyContainer >
::PrintSelf(std::ostream& os, Indent indent) const
{
Superclass::PrintSelf(os,indent);
//os << indent << "OffsetTable: " << *m_OffsetTable << std::endl;
if(m_ClipBinsAtEnds)
{
os << indent << "ClipBinsAtEnds: True" << std::endl;
}
else
{
os << indent << "ClipBinsAtEnds: False" << std::endl;
}
os << indent << "FrequencyContainerPointer: " << m_FrequencyContainer
<< std::endl;
}
} // end of namespace Statistics
} // end of namespace itk
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -