⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itkvariabledimensionhistogram.txx

📁 DTMK软件开发包,此为开源软件,是一款很好的医学图像开发资源.
💻 TXX
📖 第 1 页 / 共 2 页
字号:
  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 + -