00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkWatershedEquivalenceRelabeler_h
00018 #define __itkWatershedEquivalenceRelabeler_h
00019
00020 #include "itkWatershedEquivalencyTable.h"
00021 #include "itkWatershedSegmenter.h"
00022 #include "itkImage.h"
00023
00024 namespace itk
00025 {
00026 namespace watershed
00027 {
00051 template <class TScalarType, unsigned int TImageDimension>
00052 class EquivalenceRelabeler
00053 : public ProcessObject
00054 {
00055 public:
00057 itkStaticConstMacro(ImageDimension, unsigned int,TImageDimension);
00058
00060 typedef Image<unsigned long, TImageDimension> ImageType;
00061 typedef EquivalenceRelabeler Self;
00062 typedef ProcessObject Superclass;
00063 typedef TScalarType ScalarType;
00064 typedef EquivalencyTable EquivalencyTableType;
00065 typedef Segmenter<Image<ScalarType, TImageDimension> > SegmenterType;
00066 typedef DataObject::Pointer DataObjectPointer;
00067
00069 typedef SmartPointer<Self> Pointer;
00070 typedef SmartPointer<const Self> ConstPointer;
00071 itkNewMacro(Self);
00072 itkTypeMacro(EquivalenceRelabeler, ProcessObject);
00073
00075 void SetInputImage(ImageType *img)
00076 { this->ProcessObject::SetNthInput(0, img); }
00077 const ImageType * GetInputImage(void)
00078 {
00079 return static_cast<ImageType *>
00080 (this->ProcessObject::GetInput(0));
00081 }
00082
00084 void SetOutputImage(ImageType * img)
00085 {
00086 this->ProcessObject::SetNthOutput(0,img);
00087 }
00088 typename ImageType::Pointer GetOutputImage()
00089 { return static_cast<ImageType *>
00090 (this->ProcessObject::GetOutput(0)); }
00091
00093 void SetEquivalencyTable(EquivalencyTableType *et)
00094 {
00095 this->ProcessObject::SetNthInput(1, et);
00096 }
00097 EquivalencyTableType::Pointer GetEquivalencyTable()
00098 {
00099 return static_cast<EquivalencyTableType *>
00100 (this->ProcessObject::GetInput(1));
00101 }
00102
00104 void GenerateData();
00105
00107 virtual DataObjectPointer MakeOutput(unsigned int idx);
00108
00109 protected:
00110 EquivalenceRelabeler()
00111 {
00112 typename ImageType::Pointer img
00113 = static_cast<ImageType*>(this->MakeOutput(0).GetPointer());
00114 this->SetNumberOfRequiredOutputs(1);
00115 this->ProcessObject::SetNthOutput(0, img.GetPointer());
00116 }
00117 virtual ~EquivalenceRelabeler() {}
00118 EquivalenceRelabeler(const Self&) {}
00119 void operator=(const Self&) {}
00120 void PrintSelf(std::ostream& os, Indent indent) const;
00121
00122 void GenerateOutputRequestedRegion(DataObject *output);
00123 void GenerateInputRequestedRegion();
00124 };
00125
00126 }
00127 }
00128
00129 #ifndef ITK_MANUAL_INSTANTIATION
00130 #include "itkWatershedEquivalenceRelabeler.txx"
00131 #endif
00132
00133 #endif