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