00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __mitkEuclideanSkeletonFeatureExtraction_h
00012 #define __mitkEuclideanSkeletonFeatureExtraction_h
00013
00014 #include "mitkSegmentationIncludes.h"
00015 #include "mitkFilter.h"
00016 #include "mitkICVolume.h"
00017
00018 #include "mitkEuclideanDistanceTransformFilter.h"
00019
00023 class MITK_SEGMENTATION_API mitkEuclideanSkeletonFeature : public mitkICVolume
00024 {
00025 public:
00026
00027 struct Descriptor
00028 {
00029 unsigned skeletonPos;
00030 float radius;
00031 float size;
00032 };
00033 typedef std::vector<Descriptor> DescriptorList;
00034 MITK_TYPE(mitkEuclideanSkeletonFeature,mitkICVolume)
00035 mitkEuclideanSkeletonFeature();
00040 void GetSkeletonPosition(unsigned skeletonIndex,int &posX,int &posY,int &posZ);
00045 void GetSkeletonPosition(unsigned skeletonIndex,int pos[3]);
00046
00050 unsigned AddDescriptor(const Descriptor& descriptor)
00051 {
00052 m_dList.push_back(descriptor);
00053 return m_dList.size()-1;
00054 }
00059 unsigned GetNumberOfDescriptors()
00060 {
00061 return m_dList.size();
00062 }
00067 Descriptor& GetDescriptor(unsigned index)
00068 {
00069 return m_dList[index];
00070 }
00074 void RemoveAllDescriptors()
00075 {
00076 m_dList.clear();
00077 }
00078 protected:
00079 virtual ~mitkEuclideanSkeletonFeature();
00080
00081 private:
00082 mitkEuclideanSkeletonFeature(const mitkEuclideanSkeletonFeature&);
00083 void operator = (const mitkEuclideanSkeletonFeature&);
00084
00085 DescriptorList m_dList;
00086 };
00087
00092 class MITK_SEGMENTATION_API mitkEuclideanSkeletonFeatureExtraction : public mitkFilter
00093 {
00094 public:
00095 MITK_TYPE(mitkEuclideanSkeletonFeatureExtraction,mitkFilter)
00096 mitkEuclideanSkeletonFeatureExtraction();
00097
00102 void SetLowThreshValue(double d){m_dtFilter->SetLowThreshValue(d);}
00107 int GetLowThreshValue(){return m_dtFilter->GetLowThreshValue();}
00112 void SetHighThreshValue(double d){m_dtFilter->SetHighThreshValue(d);}
00117 int GetHighThreshValue(){return m_dtFilter->GetHighThreshValue();}
00122 void SetInput(mitkVolume *inData) {m_dtFilter->SetInput(inData);}
00127 mitkVolume* GetInput() {return m_dtFilter->GetInput();}
00132 mitkEuclideanSkeletonFeature* GetEuclideanSkeletonFeature();
00133
00134 protected:
00135 virtual ~mitkEuclideanSkeletonFeatureExtraction();
00136 virtual bool Execute();
00137
00138 mitkEuclideanDistanceTransformFilter *m_dtFilter;
00139 mitkVolume* m_DistanceData;
00140 mitkEuclideanSkeletonFeature *m_ESF;
00141
00142 private:
00143 mitkEuclideanSkeletonFeatureExtraction(const mitkEuclideanSkeletonFeatureExtraction&);
00144 void operator = (const mitkEuclideanSkeletonFeatureExtraction&);
00145 };
00146
00147 #endif