ITK  4.10.0
Insight Segmentation and Registration Toolkit
itkWatershedSegmentTreeGenerator.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef itkWatershedSegmentTreeGenerator_h
19 #define itkWatershedSegmentTreeGenerator_h
20 
23 #include "itkEquivalencyTable.h"
24 
25 #include <algorithm>
26 #include <utility>
27 
28 namespace itk
29 {
30 namespace watershed
31 {
77 template< typename TScalar >
79 {
80 public:
81 
87 
89  itkNewMacro(Self);
90  itkTypeMacro(WatershedSegmentTreeGenerator, ProcessObject);
92 
94  typedef TScalar ScalarType;
100 
105 
107  SegmentTableType * GetInputSegmentTable()
108  {
109  return static_cast< SegmentTableType * >( this->ProcessObject::GetInput(0) );
110  }
111 
112  void SetInputSegmentTable(SegmentTableType *st)
113  {
114  // Reset the highest calculated flood level if we are given a
115  // different input image.
116  if ( st != this->GetInput(0) )
117  {
119  }
120  this->ProcessObject::SetNthInput(0, st);
121  }
122 
126  void SetInputEquivalencyTable(EquivalencyTableType *eq)
127  {
128  this->ProcessObject::SetNthInput(1, eq);
129  }
130 
131  EquivalencyTableType * GetInputEquivalencyTable()
132  {
133  return
134  static_cast< EquivalencyTableType * >( this->ProcessObject::GetInput(1) );
135  }
136 
138  SegmentTreeType * GetOutputSegmentTree()
139  {
140  return static_cast< SegmentTreeType * >
141  ( this->ProcessObject::GetOutput(0) );
142  }
143 
145  virtual void GenerateData() ITK_OVERRIDE;
146 
151  itkSetMacro(Merge, bool);
152  itkGetConstMacro(Merge, bool);
154 
160  void SetFloodLevel(double);
161 
162  itkGetConstMacro(FloodLevel, double);
163 
167  itkSetMacro(HighestCalculatedFloodLevel, double);
168  itkGetConstMacro(HighestCalculatedFloodLevel, double);
170 
176  itkSetMacro(ConsumeInput, bool);
177  itkGetConstMacro(ConsumeInput, bool);
179 
182  static void MergeSegments(SegmentTableTypePointer,
183  OneWayEquivalencyTableTypePointer,
184  const IdentifierType,
185  const IdentifierType);
186 
189  static void PruneMergeSegments(SegmentTableTypePointer,
190  OneWayEquivalencyTableTypePointer,
191  const IdentifierType,
192  const IdentifierType,
193  ScalarType);
194 
198  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
199 
200 protected:
203  SegmentTreeGenerator(const Self &) {}
204  void operator=(const Self &) {}
205  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;
206 
209  void CompileMergeList(SegmentTableTypePointer, SegmentTreeTypePointer);
210 
213  void ExtractMergeHierarchy(SegmentTableTypePointer, SegmentTreeTypePointer);
214 
215  void MergeEquivalencies();
216 
218  virtual void GenerateOutputRequestedRegion(DataObject *output) ITK_OVERRIDE;
219 
220  virtual void GenerateInputRequestedRegion() ITK_OVERRIDE;
221 
222 private:
223  bool m_Merge;
224  double m_FloodLevel;
226 
227  typedef itksys::hash_map< IdentifierType, bool,
228  itksys::hash< IdentifierType > > HashMapType;
229 
231 
237 };
238 } // end namespace watershed
239 } // end namespace itk
240 
241 #ifndef ITK_MANUAL_INSTANTIATION
242 #include "itkWatershedSegmentTreeGenerator.hxx"
243 #endif
244 
245 #endif
void CompileMergeList(SegmentTableTypePointer, SegmentTreeTypePointer)
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes...
Definition: itkArray.h:30
static void PruneMergeSegments(SegmentTableTypePointer, OneWayEquivalencyTableTypePointer, const IdentifierType, const IdentifierType, ScalarType)
void ExtractMergeHierarchy(SegmentTableTypePointer, SegmentTreeTypePointer)
Hash table to manage integral label equivalencies that are order dependent.
virtual void PrintSelf(std::ostream &os, Indent indent) const override
itksys::hash_map< IdentifierType, bool, itksys::hash< IdentifierType > > HashMapType
static void MergeSegments(SegmentTableTypePointer, OneWayEquivalencyTableTypePointer, const IdentifierType, const IdentifierType)
SizeValueType IdentifierType
Definition: itkIntTypes.h:147
Hash table to manage integral label equivalencies.
DataObjectPointerArray::size_type DataObjectPointerArraySizeType
OneWayEquivalencyTableType::Pointer m_MergedSegmentsTable
virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) override
Make a DataObject of the correct type to used as the specified output.
virtual void GenerateOutputRequestedRegion(DataObject *output) override
virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx)
Make a DataObject of the correct type to used as the specified output.
void SetInputEquivalencyTable(EquivalencyTableType *eq)
DataObject * GetInput(const DataObjectIdentifierType &key)
Return an input.
ProcessObject::DataObjectPointerArraySizeType DataObjectPointerArraySizeType
Control indentation during Print() invocation.
Definition: itkIndent.h:49
virtual void SetNthInput(DataObjectPointerArraySizeType num, DataObject *input)
virtual void GenerateInputRequestedRegion() override
Base class for all data objects in ITK.
virtual void GenerateData() override
OneWayEquivalencyTableType::Pointer OneWayEquivalencyTableTypePointer
DataObject * GetOutput(const DataObjectIdentifierType &key)