ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkImageToListSampleAdaptor.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 itkImageToListSampleAdaptor_h
19#define itkImageToListSampleAdaptor_h
20
21#include <typeinfo>
22#include <utility>
23
24#include "itkImage.h"
25#include "itkPixelTraits.h"
26#include "itkListSample.h"
27#include "itkSmartPointer.h"
30
31namespace itk::Statistics
32{
50
51template <typename TImage>
52class ITK_TEMPLATE_EXPORT ImageToListSampleAdaptor
53 : public ListSample<typename MeasurementVectorPixelTraits<typename TImage::PixelType>::MeasurementVectorType>
54{
55public:
56 ITK_DISALLOW_COPY_AND_MOVE(ImageToListSampleAdaptor);
57
60
61 using Superclass =
63
66
68 itkOverrideGetNameOfClassMacro(ImageToListSampleAdaptor);
69
71 itkNewMacro(Self);
72
74 using ImageType = TImage;
75 using ImagePointer = typename ImageType::Pointer;
76 using ImageConstPointer = typename ImageType::ConstPointer;
77 using IndexType = typename ImageType::IndexType;
78 using PixelType = typename ImageType::PixelType;
79 using PixelContainerConstPointer = typename ImageType::PixelContainerConstPointer;
80
85
86
91
94
98 using typename Superclass::InstanceIdentifier;
99
101
103 void
104 SetImage(const TImage * image);
105
107 const TImage *
108 GetImage() const;
109
112 Size() const override;
113
117
120 {
121 // some filter are expected that this method returns something even if the
122 // input is not set. This won't be the right value for a variable length vector
123 // but it's better than an exception.
124 if (m_Image.IsNull())
125 {
127 }
128
129 return m_Image->GetNumberOfComponentsPerPixel();
130 }
131
133 AbsoluteFrequencyType
135
138 GetTotalFrequency() const override;
139
145 {
147
148 public:
149 ConstIterator() = delete;
150
151 ConstIterator(const ImageToListSampleAdaptor * adaptor) { *this = adaptor->Begin(); }
152
157
160 {
161 m_Iter = iter.m_Iter;
163 return *this;
164 }
165
168 {
169 return 1;
170 }
171
178
181 {
183 }
184
187 {
188 ++m_Iter;
190 return *this;
191 }
192
193 bool
194 operator==(const ConstIterator & it) const
195 {
196 return (m_Iter == it.m_Iter);
197 }
198
200
201 protected:
202 // This method should only be available to the ListSample class
207
208 private:
212 };
213
218 class Iterator : public ConstIterator
219 {
221
222 public:
223 Iterator() = delete;
224 Iterator(const Self * adaptor) = delete;
226 Iterator(const ConstIterator & it) = delete;
228 operator=(const ConstIterator & it) = delete;
229
230 Iterator(Self * adaptor)
231 : ConstIterator(adaptor)
232 {}
233
234 Iterator(const Iterator & iter)
235 : ConstIterator(iter)
236 {}
237
238 Iterator &
239 operator=(const Iterator & iter)
240 {
241 this->ConstIterator::operator=(iter);
242 return *this;
243 }
244
245 protected:
247 : ConstIterator(iter, iid)
248 {}
249 };
250
252 Iterator
254 {
255 const ImagePointer nonConstImage = const_cast<ImageType *>(m_Image.GetPointer());
256 ImageIteratorType imageIterator(nonConstImage, nonConstImage->GetLargestPossibleRegion());
257 imageIterator.GoToBegin();
258 const Iterator iter(imageIterator, 0);
259 return iter;
260 }
261
263 Iterator
265 {
266 const ImagePointer nonConstImage = const_cast<ImageType *>(m_Image.GetPointer());
267 const typename ImageType::RegionType & largestRegion = nonConstImage->GetLargestPossibleRegion();
268 ImageIteratorType imageIterator(nonConstImage, largestRegion);
269 imageIterator.GoToEnd();
270 const Iterator iter(imageIterator, largestRegion.GetNumberOfPixels());
271
272 return iter;
273 }
274
276 ConstIterator
277 Begin() const
278 {
279 ImageConstIteratorType imageConstIterator(m_Image, m_Image->GetLargestPossibleRegion());
280 imageConstIterator.GoToBegin();
281 const ConstIterator iter(imageConstIterator, 0);
282
283 return iter;
284 }
285
287 ConstIterator
288 End() const
289 {
290 const typename ImageType::RegionType & largestRegion = m_Image->GetLargestPossibleRegion();
291 ImageConstIteratorType imageConstIterator(m_Image, largestRegion);
292 imageConstIterator.GoToEnd();
293 const ConstIterator iter(imageConstIterator, largestRegion.GetNumberOfPixels());
294
295 return iter;
296 }
297
298protected:
300 ~ImageToListSampleAdaptor() override = default;
301 void
302 PrintSelf(std::ostream & os, Indent indent) const override;
303
304private:
307
308}; // end of class ImageToListSampleAdaptor
309} // namespace itk::Statistics
310
311#ifndef ITK_MANUAL_INSTANTIATION
312# include "itkImageToListSampleAdaptor.hxx"
313#endif
314
315#endif
A multi-dimensional iterator templated over image type that walks a region of pixels.
A multi-dimensional iterator templated over image type that walks a region of pixels.
Control indentation during Print() invocation.
Definition itkIndent.h:50
Traits for a pixel that define the dimension and component type.
Implements transparent reference counting.
ConstIterator(ImageConstIteratorType iter, InstanceIdentifier iid)
Iterator(const ImageConstIteratorType &iter, InstanceIdentifier iid)=delete
Iterator(const ImageIteratorType &iter, InstanceIdentifier iid)
ConstIterator & operator=(const ConstIterator &it)=delete
const MeasurementVectorType & GetMeasurementVector(InstanceIdentifier id) const override
void SetImage(const TImage *image)
typename MeasurementVectorTraitsType::ValueType MeasurementType
typename MeasurementPixelTraitsType::MeasurementVectorType MeasurementVectorType
ImageRegionConstIterator< ImageType > ImageConstIteratorType
MeasurementVectorPixelTraits< PixelType > MeasurementPixelTraitsType
PixelTraits< typename TImage::PixelType > PixelTraitsType
void PrintSelf(std::ostream &os, Indent indent) const override
MeasurementVectorTraitsTypes< MeasurementVectorType > MeasurementVectorTraitsType
InstanceIdentifier Size() const override
MeasurementVectorSizeType GetMeasurementVectorSize() const override
TotalAbsoluteFrequencyType GetTotalFrequency() const override
ListSample< typename MeasurementVectorPixelTraits< typename TImage::PixelType >::MeasurementVectorType > Superclass
AbsoluteFrequencyType GetFrequency(InstanceIdentifier id) const override
typename ImageType::PixelContainerConstPointer PixelContainerConstPointer
unsigned int MeasurementVectorSizeType
Definition itkSample.h:92
typename MeasurementVectorTraits::InstanceIdentifier InstanceIdentifier
Definition itkSample.h:89
NumericTraits< AbsoluteFrequencyType >::AccumulateType TotalAbsoluteFrequencyType
Definition itkSample.h:85
MeasurementVectorTraits::AbsoluteFrequencyType AbsoluteFrequencyType
Definition itkSample.h:82
static void Assign(TArrayType &m, const TArrayType &v)
virtual MeasurementVectorSizeType GetMeasurementVectorSize() const
STL namespace.