otbCloudDetectionFunctor.h 2.4 KB
Newer Older
1
/*
Julien Michel's avatar
Julien Michel committed
2
 * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 *
 * This file is part of Orfeo Toolbox
 *
 *     https://www.orfeo-toolbox.org/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
20

21 22
#ifndef otbCloudDetectionFunctor_h
#define otbCloudDetectionFunctor_h
23

24
#include "otbCloudEstimatorFunctor.h"
25 26 27

namespace otb
{
28 29 30
/** \class CloudDetectionFunctor
 *  \brief This functor first uses CloudEstimatorFunctor
 *  \brief And then binarise the image with two thresholds
31 32
 *
 * \ingroup OTBCloudDetection
33
 */
34 35
namespace Functor
{
OTB Bot's avatar
STYLE  
OTB Bot committed
36
template<class TInput, class TOutputValue>
37 38
class CloudDetectionFunctor
{
39
public:
40
  typedef CloudEstimatorFunctor<TInput, TOutputValue> CloudEstimatorFunctorType;
41 42

  CloudDetectionFunctor()
43 44 45
  {
    m_MinThreshold = 0.0;
    m_MaxThreshold = 1.0;
OTB Bot's avatar
STYLE  
OTB Bot committed
46
  }
47

OTB Bot's avatar
STYLE  
OTB Bot committed
48 49
  virtual ~CloudDetectionFunctor() {}
  inline TOutputValue operator ()(const TInput& inPix)
50
  {
OTB Bot's avatar
STYLE  
OTB Bot committed
51 52
    if ((m_CloudEstimatorFunctor(inPix) > m_MinThreshold) && (m_CloudEstimatorFunctor(inPix) <= m_MaxThreshold))
      {
53
      return 1;
OTB Bot's avatar
STYLE  
OTB Bot committed
54
      }
55
    else
OTB Bot's avatar
STYLE  
OTB Bot committed
56
      {
57
      return 0;
OTB Bot's avatar
STYLE  
OTB Bot committed
58
      }
59 60
  }

OTB Bot's avatar
STYLE  
OTB Bot committed
61
  void SetReferencePixel(TInput ref)
62 63
  {
    m_CloudEstimatorFunctor.SetReferencePixel(ref);
OTB Bot's avatar
STYLE  
OTB Bot committed
64
  }
65 66 67
  void SetVariance(double variance)
  {
    m_CloudEstimatorFunctor.SetVariance(variance);
OTB Bot's avatar
STYLE  
OTB Bot committed
68
  }
69 70 71
  void SetMinThreshold(double threshold)
  {
    m_MinThreshold = threshold;
OTB Bot's avatar
STYLE  
OTB Bot committed
72
  }
73 74 75
  void SetMaxThreshold(double threshold)
  {
    m_MaxThreshold = threshold;
OTB Bot's avatar
STYLE  
OTB Bot committed
76
  }
77 78 79
  double GetMinThreshold()
  {
    return m_MinThreshold;
OTB Bot's avatar
STYLE  
OTB Bot committed
80
  }
81 82 83
  double GetMaxThreshold()
  {
    return m_MaxThreshold;
OTB Bot's avatar
STYLE  
OTB Bot committed
84
  }
85 86 87
  double GetVariance()
  {
    return m_CloudEstimatorFunctor.GetVariance();
OTB Bot's avatar
STYLE  
OTB Bot committed
88
  }
89 90 91
  TInput GetReferencePixel()
  {
    return m_CloudEstimatorFunctor.GetReferencePixel();
OTB Bot's avatar
STYLE  
OTB Bot committed
92
  }
93 94

protected:
95
  CloudEstimatorFunctorType m_CloudEstimatorFunctor;
OTB Bot's avatar
STYLE  
OTB Bot committed
96 97
  double                    m_MinThreshold;
  double                    m_MaxThreshold;
98 99 100 101 102 103 104

};

} // end namespace functor
} // end namespace otb

#endif