📄 itkhistogram.txx
字号:
::GetBinMaxFromValue(const unsigned int dimension, const float value ) const
{
// If the value is lower than any of max value in the Histogram,
// it returns the lowest max value
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 Histogram,
// it returns the highest max value
if ( value >= m_Max[dimension][m_Size[dimension]-1] )
{
return m_Max[dimension][this->m_Size[dimension]-1];
}
MeasurementType binMaxFromValue = NumericTraits<MeasurementType>::max();
for ( unsigned int i = 0 ; i < this->m_Size[dimension]; i++ )
{
if ( (value >= this->m_Min[dimension][i])
&& (value < this->m_Max[dimension][i]) )
{
binMaxFromValue = this->m_Max[dimension][i];
}
}
return binMaxFromValue;
}
/*template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType&
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetHistogramMinFromValue(const MeasurementVectorType &measurement)
{
for ( int i = 0; i < MeasurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetDimensionMinByValue(i,measurement[i]);
}
return m_TempMeasurementVector ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType&
Histogram<TMeasurement, VMeasurementVectorSize, TFrequencyContainer>
::GetHistogramMaxFromValue(const MeasurementVectorType &measurement)
{
for ( int i=0; i < MeasurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetDimensionMaxByValue(i,measurement[i]);
}
return m_TempMeasurementVector ;
}
*/
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType&
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetHistogramMinFromIndex(const IndexType &index)
{
for ( int i=0; i < MeasurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetBinMin(i, index[i]) ;
}
return m_TempMeasurementVector ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType&
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetHistogramMaxFromIndex(const IndexType &index)
{
for ( unsigned int i=0; i < MeasurementVectorSize; i++ )
{
m_TempMeasurementVector[i] = this->GetBinMax(i, index[i]) ;
}
return m_TempMeasurementVector ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline const typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType &
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetMeasurementVector(const IndexType &index) const
{
for ( unsigned int i = 0; i < MeasurementVectorSize; 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, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline const typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType &
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetMeasurementVector(const InstanceIdentifier &identifier) const
{
return this->GetMeasurementVector( this->GetIndex(identifier) ) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline void
Histogram< TMeasurement, VMeasurementVectorSize, 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, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline bool
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::SetFrequency(const IndexType &index, const FrequencyType value)
{
return this->SetFrequency( this->GetInstanceIdentifier(index), value) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline bool
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::SetFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
return this->SetFrequency( this->GetInstanceIdentifier(GetIndex(measurement)), value) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline bool
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::IncreaseFrequency(const IndexType &index, const FrequencyType value)
{
const bool result =
this->IncreaseFrequency( this->GetInstanceIdentifier(index), value) ;
return result;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline bool
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::IncreaseFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
IndexType index;
this->GetIndex( measurement, index );
return this->IncreaseFrequency( this->GetInstanceIdentifier( index ), value );
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::FrequencyType
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetFrequency(const IndexType &index) const
{
return ( this->GetFrequency( this->GetInstanceIdentifier(index)) ) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer>
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementType
Histogram< TMeasurement, VMeasurementVectorSize, 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, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::FrequencyType
Histogram< TMeasurement, VMeasurementVectorSize, 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[VMeasurementVectorSize] ;
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, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::TotalFrequencyType
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetTotalFrequency() const
{
return m_FrequencyContainer->GetTotalFrequency() ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
double
Histogram< TMeasurement, VMeasurementVectorSize, 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, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
void
Histogram< TMeasurement, VMeasurementVectorSize, 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 + -