ITK  6.0.0
Insight Toolkit
itkScalarConnectedComponentImageFilter.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 * https://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/*=========================================================================
19 *
20 * Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21 *
22 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23 *
24 * For complete copyright, license and disclaimer of warranty information
25 * please refer to the NOTICE file at the top of the ITK source tree.
26 *
27 *=========================================================================*/
28#ifndef itkScalarConnectedComponentImageFilter_h
29#define itkScalarConnectedComponentImageFilter_h
30
31#include "itkMath.h"
32#include "itkNumericTraits.h"
34
35namespace itk
36{
51namespace Functor
52{
53template <typename TInput>
55{
56public:
57 SimilarPixelsFunctor() { m_Threshold = TInput{}; }
59 ~SimilarPixelsFunctor() = default;
60
61 bool
62 operator==(const SimilarPixelsFunctor & other) const
63 {
64 return m_Threshold == other.m_Threshold;
65 }
68
69 void
70 SetDistanceThreshold(const TInput & thresh)
71 {
72 m_Threshold = thresh;
73 }
74
75 TInput
77 {
78 return (m_Threshold);
79 }
80
81 bool
82 operator()(const TInput & a, const TInput & b) const
83 {
84 using InputRealType = typename NumericTraits<TInput>::RealType;
85 auto absDifference =
86 static_cast<TInput>(itk::Math::abs(static_cast<InputRealType>(a) - static_cast<InputRealType>(b)));
87 if (absDifference <= m_Threshold)
88 {
89 return true;
90 }
91 else
92 {
93 return false;
94 }
95 }
96
97protected:
98 TInput m_Threshold;
99};
100} // end namespace Functor
101
102template <typename TInputImage, typename TOutputImage, typename TMaskImage = TInputImage>
104 : public ConnectedComponentFunctorImageFilter<TInputImage,
105 TOutputImage,
106 Functor::SimilarPixelsFunctor<typename TInputImage::ValueType>,
107 TMaskImage>
108{
109public:
110 ITK_DISALLOW_COPY_AND_MOVE(ScalarConnectedComponentImageFilter);
111
114 using Superclass =
116 TOutputImage,
118 TMaskImage>;
122
124 itkNewMacro(Self);
125
127 itkOverrideGetNameOfClassMacro(ScalarConnectedComponentImageFilter);
129 using InputPixelType = typename TInputImage::PixelType;
130
131 virtual void
133 {
134 this->GetFunctor().SetDistanceThreshold(thresh);
135 }
136
139 {
140 return (this->GetFunctor().GetDistanceThreshold());
141 }
142
143#ifdef ITK_USE_CONCEPT_CHECKING
144 // Begin concept checking
145 itkConceptMacro(InputEqualityComparableCheck, (Concept::EqualityComparable<InputPixelType>));
148 itkConceptMacro(OutputIncrementDecrementOperatorsCheck,
150 // End concept checking
151#endif
152
153protected:
155 ~ScalarConnectedComponentImageFilter() override = default;
156};
157} // end namespace itk
158
159#endif
A generic connected components filter that labels the objects in an arbitrary image.
bool operator==(const SimilarPixelsFunctor &other) const
bool operator()(const TInput &a, const TInput &b) const
ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(SimilarPixelsFunctor)
Base class for all process objects that output image data.
Define additional traits for native types such as int or float.
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
A connected components filter that labels the objects in an arbitrary image. Two pixels are similar i...
virtual void SetDistanceThreshold(const InputPixelType &thresh)
~ScalarConnectedComponentImageFilter() override=default
typename TInputImage::PixelType InputPixelType
#define itkConceptMacro(name, concept)
bool abs(bool x)
Definition: itkMath.h:840
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....