📄 itkhistogram.txx
字号:
}
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, 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 ( 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 typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetMeasurementVector(const IndexType &index)
{
for ( unsigned int i = 0; i < MeasurementVectorSize; i++)
{
m_TempMeasurementVector[i] = (m_Min[i][index[i]] + m_Max[i][index[i]])/2;
}
return m_TempMeasurementVector ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline typename Histogram< TMeasurement, VMeasurementVectorSize,
TFrequencyContainer >::MeasurementVectorType
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::GetMeasurementVector(const InstanceIdentifier &id)
{
return GetMeasurementVector(GetIndex(id)) ;
}
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 void
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::SetFrequency(const IndexType &index, const FrequencyType value)
{
this->SetFrequency(GetInstanceIdentifier(index), value) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline void
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::SetFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
this->SetFrequency(GetInstanceIdentifier(GetIndex(measurement)), value) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline void
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::IncreaseFrequency(const IndexType &index, const FrequencyType value)
{
this->IncreaseFrequency(GetInstanceIdentifier(index), value) ;
}
template< class TMeasurement, unsigned int VMeasurementVectorSize,
class TFrequencyContainer >
inline void
Histogram< TMeasurement, VMeasurementVectorSize, TFrequencyContainer >
::IncreaseFrequency(const MeasurementVectorType &measurement, const FrequencyType value)
{
this->IncreaseFrequency(GetInstanceIdentifier(GetIndex(measurement)), 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 ( GetFrequency(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 >::FrequencyType
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)
{
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(GetBinMin(dimension, n - 1)) ;
max = double(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 = 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 ;
double min = double(GetBinMin(dimension, n + 1)) ;
double max = double(GetBinMax(dimension, n + 1)) ;
double 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;
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 + -