Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkMembershipSample.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkMembershipSample.h,v $ 00005 Language: C++ 00006 Date: $Date: 2003/12/15 01:00:46 $ 00007 Version: $Revision: 1.28 $ 00008 00009 Copyright (c) Insight Software Consortium. All rights reserved. 00010 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef __itkMembershipSample_h 00018 #define __itkMembershipSample_h 00019 00020 #include "itk_hash_map.h" 00021 #include "itkSample.h" 00022 #include "itkSubsample.h" 00023 00024 #include "itkExceptionObject.h" 00025 00026 namespace itk{ 00027 namespace Statistics{ 00028 00050 template< class TSample > 00051 class ITK_EXPORT MembershipSample : 00052 public Sample< typename TSample::MeasurementVectorType > 00053 { 00054 public: 00056 typedef MembershipSample Self; 00057 typedef Sample< typename TSample::MeasurementVectorType > Superclass ; 00058 typedef SmartPointer< Self > Pointer ; 00059 typedef SmartPointer< const Self > ConstPointer ; 00060 00062 itkTypeMacro(MembershipSample, Sample); 00063 itkNewMacro(Self) ; 00064 00067 typedef typename TSample::MeasurementVectorType MeasurementVectorType; 00068 typedef typename TSample::MeasurementType MeasurementType; 00069 typedef typename TSample::InstanceIdentifier InstanceIdentifier; 00070 typedef typename TSample::FrequencyType FrequencyType ; 00071 // typedef typename TSample::SizeType SizeType ; 00072 // typedef typename TSample::SizeValueType SizeValueType ; 00073 00075 itkStaticConstMacro(MeasurementVectorSize, unsigned int, 00076 TSample::MeasurementVectorSize); 00077 00080 typedef std::vector< unsigned int > UniqueClassLabelsType ; 00081 00084 typedef itk::hash_map< InstanceIdentifier, unsigned int> ClassLabelHolderType ; 00085 00088 typedef Subsample< TSample > ClassSampleType ; 00089 typedef typename ClassSampleType::Pointer ClassSamplePointer; 00090 typedef typename ClassSampleType::ConstPointer ClassSampleConstPointer; 00091 00093 void SetSample(const TSample* sample) ; 00094 00096 const TSample* GetSample() const; 00097 00099 void SetNumberOfClasses(unsigned int numberOfClasses) ; 00100 00102 unsigned int GetNumberOfClasses() const ; 00103 00108 void AddInstance(const unsigned int &classLabel, const InstanceIdentifier &id) ; 00111 unsigned int GetClassLabel(const InstanceIdentifier &id) const ; 00112 00115 int GetInternalClassLabel(const unsigned int classLabel ) const ; 00116 00119 unsigned int GetClassSampleSize(const unsigned int &classLabel) const ; 00120 00123 const ClassSampleType* GetClassSample(const unsigned int &classLabel) const ; 00124 00127 ClassLabelHolderType* GetClassLabels() 00128 { return &m_ClassLabelHolder ; } 00129 00131 unsigned int Size(void) const ; 00132 00135 const MeasurementVectorType & GetMeasurementVector(const InstanceIdentifier &id) const; 00136 00139 MeasurementType GetMeasurement(const InstanceIdentifier &id, 00140 const unsigned int &dimension) ; 00141 00143 FrequencyType GetFrequency(const InstanceIdentifier &id) const ; 00144 00146 FrequencyType GetTotalFrequency() const ; 00147 00148 void Resize(unsigned int n) 00149 { 00150 m_ClassLabelHolder.resize(n) ; 00151 } 00152 00153 00154 class ConstIterator 00155 { 00156 public: 00157 ConstIterator(InstanceIdentifier id, const Self* membershipSample) 00158 :m_Id(id), m_MembershipSample(membershipSample), 00159 m_Sample(membershipSample->GetSample()) 00160 {} 00161 00162 FrequencyType GetFrequency() const 00163 { return m_Sample->GetFrequency(m_Id) ; } 00164 00165 const MeasurementVectorType & GetMeasurementVector() const 00166 { return m_Sample->GetMeasurementVector(m_Id) ; } 00167 00168 InstanceIdentifier GetInstanceIdentifier() const 00169 { return m_Id ; } 00170 00171 void SetClassLabel(unsigned int classLabel) 00172 { m_MembershipSample->AddInstance(classLabel, m_Id) ; } 00173 00174 unsigned int GetClassLabel() const 00175 { return m_MembershipSample->GetClassLabel(m_Id) ; } 00176 00177 ConstIterator& operator++() 00178 { 00179 ++m_Id ; 00180 return *this ; 00181 } 00182 00183 bool operator!=(const ConstIterator& it) 00184 { 00185 if (m_Id != it.m_Id || 00186 m_MembershipSample != it.m_MembershipSample || 00187 m_Sample != it.m_Sample) 00188 { 00189 return true ; 00190 } 00191 else 00192 { 00193 return false ; 00194 } 00195 } 00196 00197 bool operator==(const ConstIterator& it) 00198 { 00199 if (m_Id == it.m_Id && 00200 m_MembershipSample == it.m_MembershipSample && 00201 m_Sample == it.m_Sample) 00202 { 00203 return true ; 00204 } 00205 else 00206 { 00207 return false ; 00208 } 00209 } 00210 00211 ConstIterator& operator=(const ConstIterator& it) 00212 { 00213 m_Id = it.m_Id; 00214 m_MembershipSample = it.m_MembershipSample ; 00215 m_Sample = it.m_Sample ; 00216 return *this ; 00217 } 00218 00219 ConstIterator(const ConstIterator& it) 00220 { 00221 m_Id = it.m_Id; 00222 m_MembershipSample = it.m_MembershipSample ; 00223 m_Sample = it.m_Sample ; 00224 } 00225 00226 private: 00227 // identifier for the instance 00228 InstanceIdentifier m_Id ; 00229 // Pointer to MemebershipSample object 00230 const Self* m_MembershipSample ; 00231 const TSample* m_Sample ; 00232 } ; 00233 00234 ConstIterator Begin() const 00235 { 00236 ConstIterator iter(0, this) ; 00237 return iter; 00238 } 00239 00240 ConstIterator End() const 00241 { 00242 ConstIterator iter(this->Size(), this) ; 00243 return iter; 00244 } 00245 00246 protected: 00247 MembershipSample() ; 00248 virtual ~MembershipSample() {} 00249 void PrintSelf(std::ostream& os, Indent indent) const; 00250 00251 private: 00252 MembershipSample(const Self&) ; //purposely not implemented 00253 void operator=(const Self&) ; //purposely not implemented 00254 00255 const TSample* m_Sample ; 00256 unsigned int m_CurrentClassLabel ; 00257 UniqueClassLabelsType m_UniqueClassLabels ; 00258 ClassLabelHolderType m_ClassLabelHolder ; 00259 unsigned int m_NumberOfClasses ; 00260 std::vector< unsigned int > m_ClassSampleSizes ; 00261 std::vector< ClassSamplePointer > m_ClassSamples ; 00262 } ; // end of class 00263 00264 00265 } // end of namespace Statistics 00266 } // end of namespace itk 00267 00268 00269 #ifndef ITK_MANUAL_INSTANTIATION 00270 #include "itkMembershipSample.txx" 00271 #endif 00272 00273 #endif 00274 00275 00276 00277 00278 00279 00280

Generated at Sun Apr 1 02:37:44 2007 for ITK by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2000