ITK  5.1.0
Insight Toolkit
itkShapeLabelMapFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
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 itkShapeLabelMapFilter_h
19 #define itkShapeLabelMapFilter_h
20 
23 
24 namespace itk
25 {
53 template <typename TImage, typename TLabelImage = Image<typename TImage::PixelType, TImage ::ImageDimension>>
54 class ITK_TEMPLATE_EXPORT ShapeLabelMapFilter : public InPlaceLabelMapFilter<TImage>
55 {
56 public:
57  ITK_DISALLOW_COPY_AND_ASSIGN(ShapeLabelMapFilter);
58 
64 
66  using ImageType = TImage;
67  using ImagePointer = typename ImageType::Pointer;
68  using ImageConstPointer = typename ImageType::ConstPointer;
69  using PixelType = typename ImageType::PixelType;
70  using IndexType = typename ImageType::IndexType;
71  using SizeType = typename ImageType::SizeType;
73  using OffsetType = typename ImageType::OffsetType;
74  using LabelObjectType = typename ImageType::LabelObjectType;
75  using MatrixType = typename LabelObjectType::MatrixType;
77 
78  using LabelImageType = TLabelImage;
82 
84  static constexpr unsigned int ImageDimension = TImage::ImageDimension;
85 
87  itkNewMacro(Self);
88 
91 
92 #ifdef ITK_USE_CONCEPT_CHECKING
93  // Begin concept checking
94 /* itkConceptMacro(InputEqualityComparableCheck,
95  (Concept::EqualityComparable<InputImagePixelType>));
96  itkConceptMacro(IntConvertibleToInputCheck,
97  (Concept::Convertible<int, InputImagePixelType>));
98  itkConceptMacro(InputOStreamWritableCheck,
99  (Concept::OStreamWritable<InputImagePixelType>));*/
100 // End concept checking
101 #endif
102 
107  itkSetMacro(ComputeFeretDiameter, bool);
108  itkGetConstReferenceMacro(ComputeFeretDiameter, bool);
109  itkBooleanMacro(ComputeFeretDiameter);
111 
116  itkSetMacro(ComputePerimeter, bool);
117  itkGetConstReferenceMacro(ComputePerimeter, bool);
118  itkBooleanMacro(ComputePerimeter);
120 
126  itkSetMacro(ComputeOrientedBoundingBox, bool);
127  itkGetConstReferenceMacro(ComputeOrientedBoundingBox, bool);
128  itkBooleanMacro(ComputeOrientedBoundingBox);
130 
132  void
133  SetLabelImage(const TLabelImage * input)
134  {
135  m_LabelImage = input;
136  }
137 
138 protected:
140  ~ShapeLabelMapFilter() override = default;
141 
142  void
143  ThreadedProcessLabelObject(LabelObjectType * labelObject) override;
144 
145  void
146  BeforeThreadedGenerateData() override;
147 
148  void
149  AfterThreadedGenerateData() override;
150 
151  void
152  PrintSelf(std::ostream & os, Indent indent) const override;
153 
154 private:
159 
160  void
161  ComputeFeretDiameter(LabelObjectType * labelObject);
162  void
163  ComputePerimeter(LabelObjectType * labelObject);
164  void
165  ComputeOrientedBoundingBox(LabelObjectType * labelObject);
166 
171  using MapIntercept2Type = std::map<Offset2Type, SizeValueType, Functor::LexicographicCompare>;
172  using MapIntercept3Type = std::map<Offset3Type, SizeValueType, Functor::LexicographicCompare>;
173 
174  // it seems impossible to specialize a method without specializing the whole class, but we
175  // can use simple overloading
176  template <typename TMapIntercept, typename TSpacing>
177  double
178  PerimeterFromInterceptCount(TMapIntercept & intercepts, const TSpacing & spacing);
179 #if !defined(ITK_DO_NOT_USE_PERIMETER_SPECIALIZATION)
180  double
181  PerimeterFromInterceptCount(MapIntercept2Type & intercepts, const Spacing2Type spacing);
182  double
183  PerimeterFromInterceptCount(MapIntercept3Type & intercepts, const Spacing3Type spacing);
184 #endif
185 };
186 
187 
188 } // end namespace itk
189 
190 #ifndef ITK_MANUAL_INSTANTIATION
191 # include "itkShapeLabelMapFilter.hxx"
192 #endif
193 
194 #endif
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::ImageType
TImage ImageType
Definition: itkShapeLabelMapFilter.h:66
itk::ShapeLabelMapFilter::m_ComputePerimeter
bool m_ComputePerimeter
Definition: itkShapeLabelMapFilter.h:156
itk::ShapeLabelMapFilter::m_ComputeFeretDiameter
bool m_ComputeFeretDiameter
Definition: itkShapeLabelMapFilter.h:155
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::MapIntercept3Type
std::map< Offset3Type, SizeValueType, Functor::LexicographicCompare > MapIntercept3Type
Definition: itkShapeLabelMapFilter.h:172
itk::InPlaceLabelMapFilter
Base class for filters that takes an image as input and overwrites that image as the output.
Definition: itkInPlaceLabelMapFilter.h:84
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::MapIntercept2Type
std::map< Offset2Type, SizeValueType, Functor::LexicographicCompare > MapIntercept2Type
Definition: itkShapeLabelMapFilter.h:171
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::LabelImagePointer
typename LabelImageType::Pointer LabelImagePointer
Definition: itkShapeLabelMapFilter.h:79
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::SizeType
typename ImageType::SizeType SizeType
Definition: itkShapeLabelMapFilter.h:71
itk::GTest::TypedefsAndConstructors::Dimension2::VectorType
ImageBaseType::SpacingType VectorType
Definition: itkGTestTypedefsAndConstructors.h:53
itk::Vector
A templated class holding a n-Dimensional vector.
Definition: itkVector.h:62
itk::InPlaceLabelMapFilter< TImage >::LabelObjectType
typename InputImageType::LabelObjectType LabelObjectType
Definition: itkInPlaceLabelMapFilter.h:113
itk::GTest::TypedefsAndConstructors::Dimension2::SizeType
ImageBaseType::SizeType SizeType
Definition: itkGTestTypedefsAndConstructors.h:49
itkLexicographicCompare.h
itk::SmartPointer< Self >
itk::ShapeLabelMapFilter::m_LabelImage
LabelImageConstPointer m_LabelImage
Definition: itkShapeLabelMapFilter.h:158
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ShapeLabelMapFilter
The valuator class for the ShapeLabelObject.
Definition: itkShapeLabelMapFilter.h:54
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::ImagePointer
typename ImageType::Pointer ImagePointer
Definition: itkShapeLabelMapFilter.h:67
itk::GTest::TypedefsAndConstructors::Dimension2::IndexType
ImageBaseType::IndexType IndexType
Definition: itkGTestTypedefsAndConstructors.h:50
itk::LightObject
Light weight base class for most itk classes.
Definition: itkLightObject.h:59
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::LabelPixelType
typename LabelImageType::PixelType LabelPixelType
Definition: itkShapeLabelMapFilter.h:81
itk::GTest::TypedefsAndConstructors::Dimension2::RegionType
ImageBaseType::RegionType RegionType
Definition: itkGTestTypedefsAndConstructors.h:54
itk::ShapeLabelMapFilter::SetLabelImage
void SetLabelImage(const TLabelImage *input)
Definition: itkShapeLabelMapFilter.h:133
itkInPlaceLabelMapFilter.h
itk::InPlaceLabelMapFilter< TImage >::RegionType
typename InputImageType::RegionType RegionType
Definition: itkInPlaceLabelMapFilter.h:117
itk::ShapeLabelMapFilter::m_ComputeOrientedBoundingBox
bool m_ComputeOrientedBoundingBox
Definition: itkShapeLabelMapFilter.h:157
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::LabelImageConstPointer
typename LabelImageType::ConstPointer LabelImageConstPointer
Definition: itkShapeLabelMapFilter.h:80
itk::Image::PixelType
TPixel PixelType
Definition: itkImage.h:106
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::ImageConstPointer
typename ImageType::ConstPointer ImageConstPointer
Definition: itkShapeLabelMapFilter.h:68
itk::Offset
Represent a n-dimensional offset between two n-dimensional indexes of n-dimensional image.
Definition: itkOffset.h:67
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::MatrixType
typename LabelObjectType::MatrixType MatrixType
Definition: itkShapeLabelMapFilter.h:75
itk::InPlaceLabelMapFilter< TImage >::PixelType
typename InputImageType::PixelType PixelType
Definition: itkInPlaceLabelMapFilter.h:115
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkArray.h:26
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::OffsetType
typename ImageType::OffsetType OffsetType
Definition: itkShapeLabelMapFilter.h:73
itk::ShapeLabelMapFilter< TImage, Image< TImage::PixelType, TImage ::ImageDimension > >::VectorType
typename LabelObjectType::VectorType VectorType
Definition: itkShapeLabelMapFilter.h:76
itk::Image
Templated n-dimensional image class.
Definition: itkImage.h:86
itk::InPlaceLabelMapFilter< TImage >::IndexType
typename InputImageType::IndexType IndexType
Definition: itkInPlaceLabelMapFilter.h:116