otbFusionImageBase.h 4.77 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
 *
 * 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 otbFusionImageBase_h
#define otbFusionImageBase_h
23 24 25 26 27 28

#include "itkTernaryFunctorImageFilter.h"
#include "itkNumericTraits.h"

namespace otb
{
29 30 31
/** \class FusionImageBase
 * Basic class for every Fusion classes.
 * \sa TernaryFunctorImageFilter
32 33
 *
 * \ingroup OTBPanSharpening
34
 */
OTB Bot's avatar
OTB Bot committed
35
template <class TInputMultiSpectralImage, class TInputMultiSpectralInterpImage, class TInputPanchroImage,
OTB Bot's avatar
OTB Bot committed
36
    class TOutputImage, class TFunctor>
OTB Bot's avatar
OTB Bot committed
37
class ITK_EXPORT FusionImageBase :  public itk::TernaryFunctorImageFilter<TInputMultiSpectralImage,
OTB Bot's avatar
OTB Bot committed
38 39
      TInputMultiSpectralInterpImage,
      TInputPanchroImage, TOutputImage, TFunctor>
40 41 42
{
public:
  /**   Extract input and output images dimensions.*/
OTB Bot's avatar
OTB Bot committed
43 44
  itkStaticConstMacro(InputImageDimension, unsigned int, TInputMultiSpectralImage::ImageDimension);
  itkStaticConstMacro(OutputImageDimension, unsigned int, TOutputImage::ImageDimension);
45 46 47 48 49 50 51 52 53 54

  /** "typedef" to simplify the variables definition and the declaration. */
  typedef TInputMultiSpectralImage       InputMultiSpectralImageType;
  typedef TInputMultiSpectralInterpImage InputMultiSpectralInterpImageType;
  typedef TInputPanchroImage             InputPanchroImageType;
  typedef TOutputImage                   OutputImageType;
  typedef TFunctor                       FunctorType;

  /** "typedef" for standard classes. */
  typedef FusionImageBase Self;
OTB Bot's avatar
OTB Bot committed
55
  typedef itk::TernaryFunctorImageFilter<InputMultiSpectralImageType,
OTB Bot's avatar
OTB Bot committed
56 57 58 59
      InputMultiSpectralInterpImageType,
      InputPanchroImageType,
      OutputImageType,
      FunctorType> Superclass;
OTB Bot's avatar
OTB Bot committed
60 61
  typedef itk::SmartPointer<Self>       Pointer;
  typedef itk::SmartPointer<const Self> ConstPointer;
62 63 64 65 66 67 68 69 70 71 72 73 74

  /** object factory method. */
  itkNewMacro(Self);

  /** return class name. */
  itkTypeMacro(FusionImageBase, TernaryFunctorImageFilter);

  /** Supported images definition. */
  typedef typename InputMultiSpectralImageType::PixelType       InputMultiSpectralPixelType;
  typedef typename InputMultiSpectralInterpImageType::PixelType InputMultiSpectralInterpPixelType;
  typedef typename InputPanchroImageType::PixelType             InputPanchroPixelType;
  typedef typename OutputImageType::PixelType                   OutputPixelType;
  /** Real class typedef definition. */
OTB Bot's avatar
OTB Bot committed
75 76 77 78 79 80 81 82
  typedef typename itk::NumericTraits<InputMultiSpectralPixelType>::RealType       InputMultiSpectralRealType;
  typedef typename itk::NumericTraits<InputMultiSpectralInterpPixelType>::RealType InputMultiSpectralInterpRealType;
  typedef typename itk::NumericTraits<InputPanchroPixelType>::RealType             InputPanchroRealType;
  typedef typename InputMultiSpectralImageType::RegionType                         InputMultiSpectralImageRegionType;
  typedef typename InputMultiSpectralInterpImageType::RegionType
  InputMultiSpectralInterpImageRegionType;
  typedef typename InputPanchroImageType::RegionType InputPanchroImageRegionType;
  typedef typename OutputImageType::RegionType       OutputImageRegionType;
83 84 85 86 87 88

  /** Image size "typedef" definition. */
  typedef typename InputMultiSpectralImageType::SizeType SizeType;

  void SetMultiSpect(const InputMultiSpectralImageType *multiSpect)
  {
OTB Bot's avatar
OTB Bot committed
89 90
    this->SetInput1(multiSpect);
  }
91
  void SetMultiSpectInterp(const InputMultiSpectralInterpImageType *multiSpectInterp)
92
  {
OTB Bot's avatar
OTB Bot committed
93 94
    this->SetInput2(multiSpectInterp);
  }
95 96
  void SetPanchro(const InputPanchroImageType *panchro)
  {
OTB Bot's avatar
OTB Bot committed
97 98
    this->SetInput3(panchro);
  }
99 100 101

  const InputMultiSpectralImageType* GetMultiSpect()
  {
OTB Bot's avatar
OTB Bot committed
102 103
    if (this->GetNumberOfInputs() < 1)
      {
104
      return nullptr;
OTB Bot's avatar
OTB Bot committed
105 106
      }
    else return (static_cast<const InputMultiSpectralImageType *>(this->itk::ProcessObject::GetInput(0)));
107
  }
108

109
  const InputMultiSpectralInterpImageType* GetMultiSpectInterp()
110
  {
OTB Bot's avatar
OTB Bot committed
111 112
    if (this->GetNumberOfInputs() < 2)
      {
113
      return nullptr;
OTB Bot's avatar
OTB Bot committed
114 115
      }
    else return (static_cast<const InputMultiSpectralInterpImageType *>(this->itk::ProcessObject::GetInput(1)));
116
  }
117

118
  const InputPanchroImageType* GetPanchro()
119
  {
OTB Bot's avatar
OTB Bot committed
120 121
    if (this->GetNumberOfInputs() < 3)
      {
122
      return nullptr;
OTB Bot's avatar
OTB Bot committed
123 124
      }
    else return (static_cast<const InputPanchroImageType *>(this->itk::ProcessObject::GetInput(2)));
125
  }
126

127
};
128

129 130 131
} // end namespace otb

#endif