Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
itkNeighborhoodFunctorImageFilter.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef itkNeighborhoodFunctorImageFilter_h
14 #define itkNeighborhoodFunctorImageFilter_h
15 
16 #include <itkImageToImageFilter.h>
17 #include <itkZeroFluxNeumannBoundaryCondition.h>
18 #include <itkConstNeighborhoodIterator.h>
19 #include <itkImage.h>
20 #include <cstdio>
21 
22 #include <itkHistogramToTextureFeaturesFilter.h>
23 #include <itkHistogram.h>
24 
25 namespace itk
26 {
27 
39 template<typename TInputImageType, typename TFeatureImageType , class FunctorType>
40 class NeighborhoodFunctorImageFilter : public ImageToImageFilter< TInputImageType, TFeatureImageType>
41 {
42 public:
44  typedef ImageToImageFilter<TInputImageType, TFeatureImageType> Superclass;
47 
48  itkNewMacro(Self);
49 
50  itkTypeMacro(NeighborhoodFunctorImageFilter, ImageToImageFilter);
51 
54  itkStaticConstMacro(ImageDimension, unsigned int,
55  TFeatureImageType::ImageDimension);
56  itkStaticConstMacro(InputImageDimension, unsigned int,
57  TInputImageType::ImageDimension);
58 
59  typedef TInputImageType InputImageType;
60  typedef typename TInputImageType::PixelType InputImagePixelType;
61  typedef itk::Image<short, InputImageDimension> MaskImageType;
62  typedef typename MaskImageType::PixelType MaskImagePixelType;
63  typedef TFeatureImageType FeatureImageType;
64  typedef typename FeatureImageType::PixelType FeaturePixelType;
65  typedef itk::Size<InputImageDimension> SizeType;
66 
68  typedef ImageBoundaryCondition< InputImageType > * ImageBoundaryConditionPointerType;
69 
71  typedef ZeroFluxNeumannBoundaryCondition< InputImageType > DefaultBoundaryCondition;
72 
74  typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
75 
76  typedef Neighborhood< InputImagePixelType, InputImageDimension > NeighborhoodType;
77 
84  { m_BoundsCondition = i; }
85 
88  { return m_BoundsCondition; }
89 
90  void SetNeighborhoodSize(SizeType size){m_Size = size;}
91  void SetNeighborhoodSize(unsigned int size){m_Size.Fill(size);}
92  SizeType GetNeighborhoodSize(){return m_Size;}
93 
94  void SetMask(const typename MaskImageType::Pointer & ptr){m_MaskImage = ptr;}
95 
96  const FunctorType & GetFunctorReference() const
97  {
98  return m_Functor;
99  }
100 
101  FunctorType & GetFunctorReference()
102  {
103  return m_Functor;
104  }
105 
106  void SetFunctor(const FunctorType & func)
107  {
108  m_Functor = func;
109  }
110 
111 protected:
112 
114  {
115  this->DynamicMultiThreadingOff();
116  m_Size.Fill(0);
117  m_MaskImage = nullptr;
118  m_BoundsCondition = static_cast< ImageBoundaryConditionPointerType >( &m_DefaultBoundaryCondition );
119  this->SetNumberOfIndexedOutputs(FunctorType::OutputCount);
120  }
122 
123  void BeforeThreadedGenerateData() override;
124 
125  void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread,
126  ThreadIdType threadId) override;
127 
128 
137 
138 
139 private:
140  NeighborhoodFunctorImageFilter(const Self &); // purposely not implemented
141  void operator=(const Self &); // purposely not implemented
142 
145  ImageBoundaryConditionPointerType m_BoundsCondition;
146 
148  DefaultBoundaryCondition m_DefaultBoundaryCondition;
149 
151  FunctorType m_Functor;
152 
153  itk::Size<InputImageDimension> m_Size;
154 
155  typename MaskImageType::Pointer m_MaskImage;
156 
157 };
158 }
159 
160 #ifndef ITK_MANUAL_INSTANTIATION
161 #include "../src/Features/itkNeighborhoodFunctorImageFilter.cpp"
162 #endif
163 
164 #endif // itkFeatureImageFilter_h
Applies a user-supplied functor to each neighbourhood in an image and writes the results to feature i...
ImageBoundaryCondition< InputImageType > * ImageBoundaryConditionPointerType
Superclass::OutputImageRegionType OutputImageRegionType
void GenerateInputRequestedRegion() override
ImageBoundaryConditionPointerType GetBoundaryCondition()
void OverrideBoundaryCondition(const ImageBoundaryConditionPointerType i)
itk::Image< short, InputImageDimension > MaskImageType
itkStaticConstMacro(InputImageDimension, unsigned int, TInputImageType::ImageDimension)
void ThreadedGenerateData(const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId) override
void SetMask(const typename MaskImageType::Pointer &ptr)
ZeroFluxNeumannBoundaryCondition< InputImageType > DefaultBoundaryCondition
ImageToImageFilter< TInputImageType, TFeatureImageType > Superclass
Neighborhood< InputImagePixelType, InputImageDimension > NeighborhoodType
void BeforeThreadedGenerateData() override
itkStaticConstMacro(ImageDimension, unsigned int, TFeatureImageType::ImageDimension)