ITK  5.3.0
Insight Toolkit
itkRGBGibbsPriorFilter.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 itkRGBGibbsPriorFilter_h
19 #define itkRGBGibbsPriorFilter_h
20 
21 #include "vnl/vnl_vector.h"
22 #include "vnl/vnl_matrix.h"
23 
24 #include "itkMRFImageFilter.h"
25 
26 #include <memory> // For unique_ptr.
27 
28 namespace itk
29 {
49 template <typename TInputImage, typename TClassifiedImage>
50 class ITK_TEMPLATE_EXPORT RGBGibbsPriorFilter : public MRFImageFilter<TInputImage, TClassifiedImage>
51 {
52 public:
53  ITK_DISALLOW_COPY_AND_MOVE(RGBGibbsPriorFilter);
61 
63  itkNewMacro(Self);
64 
66  itkTypeMacro(RGBGibbsPriorFilter, MRFImageFilter);
67 
69  using typename Superclass::InputImagePixelType;
70  using typename Superclass::InputImageRegionConstIterator;
71  using typename Superclass::InputImageRegionIterator;
72  using typename Superclass::LabelledImageRegionIterator;
73  using typename Superclass::LabelledImagePixelType;
74  using typename Superclass::IndexValueType;
75 
77  using InputImageType = TInputImage;
80 
82  using InputPixelType = typename TInputImage::PixelType;
83 
85  using ClassifiedImageType = TClassifiedImage;
87 
91 
94 
98  using LabelType = unsigned int;
99 
102 
104  using InputImageVecType = typename TInputImage::PixelType;
106 
108  void
109  SetTrainingImage(TrainingImageType image);
110 
112  void
113  SetLabelledImage(LabelledImageType image);
114 
118  {
119  return m_LabelledImage;
120  }
121 
123  void
124  SetClassifier(typename ClassifierType::Pointer ptrToClassifier);
125 
127  void
128  SetNumberOfClasses(const unsigned int numberOfClasses) override
129  {
130  itkDebugMacro("setting NumberOfClasses to " << numberOfClasses);
131  if (this->m_NumberOfClasses != numberOfClasses)
132  {
133  this->m_NumberOfClasses = numberOfClasses;
134  this->Modified();
135  }
136  }
140  unsigned int
141  GetNumberOfClasses() const override
142  {
143  return this->m_NumberOfClasses;
144  }
145 
148  void
149  SetMaximumNumberOfIterations(const unsigned int numberOfIterations) override
150  {
151  itkDebugMacro("setting MaximumNumberOfIterations to " << numberOfIterations);
152  if (this->m_MaximumNumberOfIterations != numberOfIterations)
153  {
154  this->m_MaximumNumberOfIterations = numberOfIterations;
155  this->Modified();
156  }
157  }
162  unsigned int
164  {
165  return this->m_MaximumNumberOfIterations;
166  }
167 
169  itkSetMacro(ClusterSize, unsigned int);
170 
172  itkSetMacro(ObjectLabel, LabelType);
173 
175  static constexpr unsigned int ImageDimension = TInputImage::ImageDimension;
176 
177  itkSetMacro(StartPoint, IndexType);
178 
179  itkSetMacro(BoundaryGradient, unsigned int);
180 
181  itkSetMacro(ObjectThreshold, double);
182 
184  itkSetMacro(CliqueWeight_1, double);
185  itkGetConstMacro(CliqueWeight_1, double);
186  itkSetMacro(CliqueWeight_2, double);
187  itkGetConstMacro(CliqueWeight_2, double);
188  itkSetMacro(CliqueWeight_3, double);
189  itkGetConstMacro(CliqueWeight_3, double);
190  itkSetMacro(CliqueWeight_4, double);
191  itkGetConstMacro(CliqueWeight_4, double);
192  itkSetMacro(CliqueWeight_5, double);
193  itkGetConstMacro(CliqueWeight_5, double);
194  itkSetMacro(CliqueWeight_6, double);
195  itkGetConstMacro(CliqueWeight_6, double);
199  using MatrixType = vnl_matrix<double>;
200 
201 protected:
203  ~RGBGibbsPriorFilter() override = default;
204  void
205  PrintSelf(std::ostream & os, Indent indent) const override;
206 
207  void
210  void
211  MinimizeFunctional() override;
212 
213  void
214  GenerateData() override;
215 
216  virtual void
217  ApplyGibbsLabeller();
218 
219  virtual void
220  ApplyGPImageFilter();
221 
222 #ifdef ITK_USE_CONCEPT_CHECKING
223  // Begin concept checking
225  SameDimension,
228  // End concept checking
229 #endif
230 
231 private:
233 
249 
271  unsigned int m_ImageHeight{ 0 };
272  unsigned int m_ImageDepth{ 0 };
273 
306  void
307  GibbsTotalEnergy(int i);
308 
310  double
311  GibbsEnergy(unsigned int i, unsigned int k, unsigned int k1);
312 
313  int
316  unsigned int
320  void
323  void
327  void
331  double m_ObjectThreshold{ 5.0 };
332 };
333 } // end namespace itk
334 #ifndef ITK_MANUAL_INSTANTIATION
335 # include "itkRGBGibbsPriorFilter.hxx"
336 #endif
337 #endif
itk::RGBGibbsPriorFilter::ClassifiedImageType
TClassifiedImage ClassifiedImageType
Definition: itkRGBGibbsPriorFilter.h:85
Pointer
SmartPointer< Self > Pointer
Definition: itkAddImageFilter.h:92
ConstPointer
SmartPointer< const Self > ConstPointer
Definition: itkAddImageFilter.h:93
itk::RGBGibbsPriorFilter::TrainingImageType
typename TClassifiedImage::Pointer TrainingImageType
Definition: itkRGBGibbsPriorFilter.h:86
itk::RGBGibbsPriorFilter::SetMaximumNumberOfIterations
void SetMaximumNumberOfIterations(const unsigned int numberOfIterations) override
Definition: itkRGBGibbsPriorFilter.h:149
itk::MRFImageFilter
Implementation of a labeller object that uses Markov Random Fields to classify pixels in an image dat...
Definition: itkMRFImageFilter.h:149
itk::MRFImageFilter::InputImageConstPointer
typename TInputImage::ConstPointer InputImageConstPointer
Definition: itkMRFImageFilter.h:171
itk::RGBGibbsPriorFilter::LabelType
unsigned int LabelType
Definition: itkRGBGibbsPriorFilter.h:98
itk::RGBGibbsPriorFilter::GetNumberOfClasses
unsigned int GetNumberOfClasses() const override
Definition: itkRGBGibbsPriorFilter.h:141
itk::GTest::TypedefsAndConstructors::Dimension2::SizeType
ImageBaseType::SizeType SizeType
Definition: itkGTestTypedefsAndConstructors.h:49
itk::RGBGibbsPriorFilter::LabelledImageType
typename TClassifiedImage::Pointer LabelledImageType
Definition: itkRGBGibbsPriorFilter.h:90
itk::SmartPointer< Self >
itk::RGBGibbsPriorFilter::InputPixelType
typename TInputImage::PixelType InputPixelType
Definition: itkRGBGibbsPriorFilter.h:82
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::RGBGibbsPriorFilter::m_ClassifierPtr
ClassifierType::Pointer m_ClassifierPtr
Definition: itkRGBGibbsPriorFilter.h:248
itk::RGBGibbsPriorFilter
The RGBGibbsPriorFilter applies Gibbs Prior model for the segmentation of MRF images.
Definition: itkRGBGibbsPriorFilter.h:50
itk::IndexValueType
long IndexValueType
Definition: itkIntTypes.h:90
itk::Concept::SameDimension
Definition: itkConceptChecking.h:694
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:55
itk::MRFImageFilter::LabelledImageIndexType
typename TClassifiedImage::IndexType LabelledImageIndexType
Definition: itkMRFImageFilter.h:205
itk::RGBGibbsPriorFilter::GetMaximumNumberOfIterations
unsigned int GetMaximumNumberOfIterations() const override
Definition: itkRGBGibbsPriorFilter.h:163
itk::ImageClassifierBase
Base class for the ImageClassifierBase object.
Definition: itkImageClassifierBase.h:71
itk::MRFImageFilter::InputImageSizeType
typename TInputImage::SizeType InputImageSizeType
Definition: itkMRFImageFilter.h:392
itk::RGBGibbsPriorFilter::IndexType
typename TInputImage::IndexType IndexType
Definition: itkRGBGibbsPriorFilter.h:105
itkMRFImageFilter.h
itk::MRFImageFilter::InputImagePointer
typename TInputImage::Pointer InputImagePointer
Definition: itkMRFImageFilter.h:170
itk::RGBGibbsPriorFilter::SetNumberOfClasses
void SetNumberOfClasses(const unsigned int numberOfClasses) override
Definition: itkRGBGibbsPriorFilter.h:128
itk::MRFImageFilter::InputImageType
TInputImage InputImageType
Definition: itkMRFImageFilter.h:169
itk::RGBGibbsPriorFilter::InputImageVecType
typename TInputImage::PixelType InputImageVecType
Definition: itkRGBGibbsPriorFilter.h:104
itkConceptMacro
#define itkConceptMacro(name, concept)
Definition: itkConceptChecking.h:65
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::RGBGibbsPriorFilter::MatrixType
vnl_matrix< double > MatrixType
Definition: itkRGBGibbsPriorFilter.h:199
itk::RGBGibbsPriorFilter::GetLabelledImage
LabelledImageType GetLabelledImage()
Definition: itkRGBGibbsPriorFilter.h:117