00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkBloxCoreAtomPixel_h
00018 #define __itkBloxCoreAtomPixel_h
00019
00020 #include "vnl/vnl_matrix_fixed.h"
00021 #include "vnl/vnl_vector_fixed.h"
00022 #include "vnl/algo/vnl_generalized_eigensystem.h"
00023
00024 #include "itkObject.h"
00025 #include "itkBloxCoreAtomItem.h"
00026 #include "itkBloxBoundaryPointItem.h"
00027 #include "itkPoint.h"
00028 #include "itkCovariantVector.h"
00029 #include "itkBloxPixel.h"
00030
00031 namespace itk
00032 {
00033
00041 template <unsigned int NDimensions>
00042 class ITK_EXPORT BloxCoreAtomPixel : public BloxPixel< BloxCoreAtomItem<NDimensions> >
00043 {
00044 public:
00045
00047 typedef BloxCoreAtomPixel Self;
00048 typedef BloxPixel< BloxCoreAtomItem<NDimensions> > Superclass;
00049 typedef SmartPointer<Self> Pointer;
00050 typedef SmartPointer<const Self> ConstPointer;
00051
00053 typedef BloxCoreAtomItem<NDimensions> CoreAtomItemType;
00054
00056 typedef BloxBoundaryPointItem<NDimensions> BPItemType;
00057
00059 typedef Point<double, NDimensions> PositionType;
00060
00062 typedef CovariantVector<double, NDimensions> GradientType;
00063
00065 typedef vnl_vector_fixed<double, NDimensions> VectorType;
00066
00068 typedef vnl_vector_fixed<double, NDimensions> EigenvalueType;
00069
00071 typedef vnl_matrix_fixed<double, NDimensions, NDimensions> EigenvectorType;
00072
00074 typedef vnl_matrix_fixed<double, NDimensions, NDimensions> MatrixType;
00075
00077 double CalcMeanCoreAtomDiameter();
00078
00080 bool DoCoreAtomEigenanalysis();
00081
00083 void DoVotedEigenanalysis();
00084
00086 double GetMeanCoreAtomDiameter() {return m_MeanCoreAtomDiameter;}
00087 double GetMeanCoreAtomIntensity() {return m_MeanCoreAtomIntensity;}
00088 EigenvalueType GetEigenvalues() {return m_Eigenvalues;}
00089 EigenvalueType GetVotedEigenvalues() {return m_VotedEigenvalues;}
00090 EigenvectorType GetEigenvectors() {return m_Eigenvectors;}
00091 EigenvectorType GetVotedEigenvectors() {return m_VotedEigenvectors;}
00092 PositionType GetLocationSums() {return m_LocationSums;}
00093 double GetWeightSum() {return m_WeightSum;}
00094
00096 MatrixType* GetRawCMatrixPointer() {return &m_RawCMatrix;}
00097
00099 void CollectVote(MatrixType* pMatrix, double strength, double count);
00100
00102 void NormalizeVotedCMatrix();
00103
00105 void CalcWeightedCoreAtomLocation(double weight_factor, Self * votingPixel);
00106
00108 void CalcMeanCoreAtomIntensity();
00109
00111 PositionType GetVotedLocation();
00112
00113 BloxCoreAtomPixel();
00114 ~BloxCoreAtomPixel();
00115
00116 private:
00117
00119 double m_MeanCoreAtomDiameter;
00120
00122 MatrixType m_RawCMatrix;
00123
00127 EigenvalueType m_Eigenvalues;
00128
00131 EigenvectorType m_Eigenvectors;
00132
00134 MatrixType m_VotedCMatrix;
00135
00137 EigenvalueType m_VotedEigenvalues;
00138
00140 EigenvectorType m_VotedEigenvectors;
00141
00144 double m_ConstituencySize;
00145
00147 PositionType m_LocationSums;
00148
00150 PositionType m_VotedLocation;
00151
00153 double m_WeightSum;
00154
00156 double m_MeanCoreAtomIntensity;
00157 };
00158
00159
00160 }
00161
00162 #ifndef ITK_MANUAL_INSTANTIATION
00163 #include "itkBloxCoreAtomPixel.txx"
00164 #endif
00165
00166 #endif