ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkLabelOverlapMeasuresImageFilter.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#ifndef itkLabelOverlapMeasuresImageFilter_h
19#define itkLabelOverlapMeasuresImageFilter_h
20
21#include "itkImageSink.h"
22#include "itkNumericTraits.h"
24#include <mutex>
25#include <unordered_map>
26
27namespace itk
28{
42template <typename TLabelImage>
43class ITK_TEMPLATE_EXPORT LabelOverlapMeasuresImageFilter : public ImageSink<TLabelImage>
44{
45public:
46 ITK_DISALLOW_COPY_AND_MOVE(LabelOverlapMeasuresImageFilter);
47
53
55 itkNewMacro(Self);
56
58 itkOverrideGetNameOfClassMacro(LabelOverlapMeasuresImageFilter);
59
61 using LabelImageType = TLabelImage;
62 using LabelImagePointer = typename TLabelImage::Pointer;
63 using LabelImageConstPointer = typename TLabelImage::ConstPointer;
64
65 using RegionType = typename TLabelImage::RegionType;
66 using SizeType = typename TLabelImage::SizeType;
67 using IndexType = typename TLabelImage::IndexType;
68
69 using LabelType = typename TLabelImage::PixelType;
70
73
74#ifndef ITK_FUTURE_LEGACY_REMOVE
76 using LabelSetMeasures = LabelOverlapLabelSetMeasures;
77#endif // !ITK_FUTURE_LEGACY_REMOVE
78
80 using MapType = std::unordered_map<LabelType, LabelOverlapLabelSetMeasures>;
81 using MapIterator = typename MapType::iterator;
82 using MapConstIterator = typename MapType::const_iterator;
83
85 static constexpr unsigned int ImageDimension = TLabelImage::ImageDimension;
86
94
98 {
99 return this->m_LabelSetMeasures;
100 }
101
116 std::vector<LabelType>
117 GetLabels() const
118 {
119 std::vector<LabelType> labels;
120 labels.reserve(this->m_LabelSetMeasures.size());
121 for (const auto & kv : this->m_LabelSetMeasures)
122 {
123 labels.push_back(kv.first);
124 }
125 return labels;
126 }
127
134 {
135 const auto it = this->m_LabelSetMeasures.find(label);
136 if (it == this->m_LabelSetMeasures.end())
137 {
138 itkExceptionMacro("Label " << static_cast<typename NumericTraits<LabelType>::PrintType>(label)
139 << " is not present in the label set measures map.");
140 }
141 return it->second;
142 }
143
144 // Overlap agreement metrics
145
149
152
159 {
160 return this->GetUnionOverlap();
161 }
162
169 {
170 return this->GetUnionOverlap(label);
171 }
172
179 {
180 return this->GetMeanOverlap();
181 }
182
189 {
190 return this->GetMeanOverlap(label);
191 }
192
196
199
200 // Overlap error metrics
201
205
208
212
215
219
222
223 itkConceptMacro(Input1HasNumericTraitsCheck, (Concept::HasNumericTraits<LabelType>));
224
225protected:
228
231
232 void
233 PrintSelf(std::ostream & os, Indent indent) const override;
234
235 void
237
238 void
240
241 void
242 MergeMap(MapType & m1, MapType & m2) const;
243
244private:
246
247 std::mutex m_Mutex{};
248}; // end of class
249
250} // end namespace itk
251
252#ifndef ITK_MANUAL_INSTANTIATION
253# include "itkLabelOverlapMeasuresImageFilter.hxx"
254#endif
255
256#endif
Control indentation during Print() invocation.
Definition itkIndent.h:50
typename TLabelImage::ConstPointer LabelImageConstPointer
std::unordered_map< LabelType, LabelOverlapLabelSetMeasures > MapType
typename NumericTraits< LabelType >::RealType RealType
itkSetInputMacro(SourceImage, LabelImageType)
RealType GetUnionOverlap(LabelType) const
itkSetInputMacro(TargetImage, LabelImageType)
RealType GetFalsePositiveError(LabelType) const
RealType GetFalseDiscoveryRate(LabelType) const
RealType GetVolumeSimilarity(LabelType) const
RealType GetMeanOverlap(LabelType) const
void ThreadedStreamedGenerateData(const RegionType &) override
RealType GetTargetOverlap(LabelType) const
~LabelOverlapMeasuresImageFilter() override=default
typename NumericTraits< LabelType >::PrintType PrintType
itkGetInputMacro(SourceImage, LabelImageType)
void PrintSelf(std::ostream &os, Indent indent) const override
RealType GetFalseNegativeError(LabelType) const
LabelOverlapLabelSetMeasures GetMeasureForLabel(LabelType label) const
itkGetInputMacro(TargetImage, LabelImageType)
void MergeMap(MapType &m1, MapType &m2) const
Implements transparent reference counting.
#define itkConceptMacro(name, concept)
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....