00001 #ifndef __itkBloxBoundaryProfileItem_h 00002 #define __itkBloxBoundaryProfileItem_h 00003 00004 #include "vnl/vnl_vector_fixed.h" 00005 #include "itkBloxBoundaryPointItem.h" 00006 #include "itkBloxItem.h" 00007 00008 namespace itk 00009 { 00010 00011 template <unsigned int VImageDimension> 00012 class BloxBoundaryProfileItem: public BloxItem 00013 { 00014 public: 00016 typedef Point<double, VImageDimension> PositionType; 00017 00019 typedef CovariantVector<double, VImageDimension> GradientType; 00020 00022 typedef vnl_vector<double> VectorType; 00023 00025 typedef BloxBoundaryPointItem<VImageDimension> BPItemType; 00026 00028 void SetBoundaryPoint(BPItemType* point) 00029 { m_BoundaryPoint = point; } 00030 00032 void SetLowerIntensity(double lowerIntensity) 00033 { m_LowerIntensity = lowerIntensity; } 00034 00035 double GetLowerIntensity(void) 00036 { return(m_LowerIntensity); } 00037 00039 void SetUpperIntensity(double upperIntensity) 00040 { m_UpperIntensity = upperIntensity; } 00041 00042 double GetUpperIntensity(void) 00043 { return(m_UpperIntensity); } 00044 00046 void SetMean(double mean) 00047 { m_Mean = mean; } 00048 00049 double GetMean(void) 00050 { return(m_Mean); } 00051 00053 void SetBoundaryWidth(double boundaryWidth) 00054 { m_BoundaryWidth = boundaryWidth; } 00055 00056 double GetBoundaryWidth(void) 00057 { return(m_BoundaryWidth); } 00058 00060 void SetProfileLength(unsigned int profileLength) 00061 { m_ProfileLength = profileLength; } 00062 00063 unsigned int GetProfileLength(void) 00064 { return(m_ProfileLength); } 00065 00067 void SetMeanNormalized(void) 00068 { m_MeanNormalized = m_Mean - m_ProfileLength/2; } 00069 00070 double GetMeanNormalized(void) 00071 { return(m_MeanNormalized); } 00072 00074 void SetStandardDeviation(double standardDeviation) 00075 { m_StandardDeviation = standardDeviation; } 00076 00077 double GetStandardDeviation(void) 00078 { return(m_StandardDeviation); } 00079 00081 void SetStandardDeviationNormalized(void) 00082 { m_StandardDeviationNormalized = m_StandardDeviation / m_ProfileLength; } 00083 00084 double GetStandardDeviationNormalized(double) 00085 { return(m_StandardDeviationNormalized); } 00086 00088 void SetOptimalBoundaryLocation(VectorType spatialFunctionOriginVector, VectorType orientation) 00089 { 00090 VectorType optimalBoundaryLocation; 00091 optimalBoundaryLocation = m_MeanNormalized * orientation; 00092 optimalBoundaryLocation = spatialFunctionOriginVector + optimalBoundaryLocation; 00093 for(unsigned int i = 0; i < VImageDimension; i++) 00094 { m_OptimalBoundaryLocation[i] = optimalBoundaryLocation[i]; } 00095 } 00096 00097 PositionType GetOptimalBoundaryLocation(void) 00098 { return(m_OptimalBoundaryLocation); } 00099 00101 void SetGradient(GradientType grad){m_Gradient = grad;}; 00102 00104 GradientType GetGradient(){return m_Gradient;}; 00105 00106 BloxBoundaryProfileItem(); 00107 ~BloxBoundaryProfileItem(); 00108 00109 private: 00110 00111 double m_LowerIntensity; 00112 double m_UpperIntensity; 00113 double m_Mean; 00114 double m_BoundaryWidth; 00115 unsigned int m_ProfileLength; 00116 double m_MeanNormalized; 00117 double m_StandardDeviation; 00118 double m_StandardDeviationNormalized; 00119 00121 PositionType m_OptimalBoundaryLocation; 00122 00124 GradientType m_Gradient; 00125 }; 00126 00127 } // end namespace itk 00128 00129 00130 #ifndef ITK_MANUAL_INSTANTIATION 00131 #include "itkBloxBoundaryProfileItem.txx" 00132 #endif 00133 00134 #endif