OTB  10.0.0
Orfeo Toolbox
otbMRFEnergyGaussianClassification.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2024 Centre National d'Etudes Spatiales (CNES)
3  *
4  * This file is part of Orfeo Toolbox
5  *
6  * https://www.orfeo-toolbox.org/
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 #ifndef otbMRFEnergyGaussianClassification_h
22 #define otbMRFEnergyGaussianClassification_h
23 
24 #include "otbMRFEnergy.h"
25 #include "otbMath.h"
26 #include "vcl_legacy_aliases.h"
27 
28 namespace otb
29 {
49 template <class TInput1, class TInput2>
50 class ITK_EXPORT MRFEnergyGaussianClassification : public MRFEnergy<TInput1, TInput2>
51 {
52 public:
55  typedef itk::SmartPointer<Self> Pointer;
56  typedef itk::SmartPointer<const Self> ConstPointer;
57 
58  typedef TInput1 InputImageType;
59  typedef TInput2 LabelledImageType;
60  typedef typename InputImageType::PixelType InputImagePixelType;
61  typedef typename LabelledImageType::PixelType LabelledImagePixelType;
62  typedef itk::Array<double> ParametersType;
63 
64  itkNewMacro(Self);
65 
67 
68  void SetNumberOfParameters(const unsigned int nParameters) override
69  {
70  Superclass::SetNumberOfParameters(nParameters);
71  this->m_Parameters.SetSize(nParameters);
72  this->Modified();
73  }
74 
75  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2) override
76  {
77  if ((unsigned int)value2 >= this->GetNumberOfParameters() / 2)
78  {
79  itkExceptionMacro(<< "Number of parameters does not correspond to number of classes");
80  }
81  double val1 = static_cast<double>(value1);
82 
83  double result =
84  vnl_math_sqr(val1 - this->m_Parameters[2 * static_cast<int>(value2)]) / (2 * vnl_math_sqr(this->m_Parameters[2 * static_cast<int>(value2) + 1])) +
85  std::log(std::sqrt(CONST_2PI) * this->m_Parameters[2 * static_cast<int>(value2) + 1]);
86 
87  return static_cast<double>(result);
88  }
89 
90 protected:
91  // The constructor and destructor.
94  {
95  }
96 };
97 }
98 
99 #endif
This is the implementation of the Gaussian model for Markov classification.
void SetNumberOfParameters(const unsigned int nParameters) override
double GetSingleValue(const InputImagePixelType &value1, const LabelledImagePixelType &value2) override
This is the base class for energy function used in the MRF framework.
Definition: otbMRFEnergy.h:44
InputImageType::PixelType InputImagePixelType
Definition: otbMRFEnergy.h:53
LabelledImageType::PixelType LabelledImagePixelType
Definition: otbMRFEnergy.h:54
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.
constexpr double CONST_2PI
Definition: otbMath.h:55