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 "itkEquivalencyTable.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 ITK_EXPORT 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