21 #ifndef __otbSimpleRcsPanSharpeningFusionImageFilter_txx
22 #define __otbSimpleRcsPanSharpeningFusionImageFilter_txx
28 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
29 SimpleRcsPanSharpeningFusionImageFilter
30 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
34 this->SetNumberOfRequiredInputs(2);
37 m_ConvolutionFilter = ConvolutionFilterType::New();
38 m_ConvolutionFilter->NormalizeFilterOn();
42 m_Filter.SetSize(7 * 7);
46 m_FusionFilter = FusionFilterType::New();
47 m_FusionFilter->SetInput2(m_ConvolutionFilter->GetOutput());
51 m_ProgressAccumulator->SetMiniPipelineFilter(
this);
52 m_ProgressAccumulator->RegisterInternalFilter(m_ConvolutionFilter, 0.9);
53 m_ProgressAccumulator->RegisterInternalFilter(m_FusionFilter, 0.1);
56 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
59 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
60 ::SetPanInput(
const TPanImageType *image)
66 const_cast<TPanImageType*>(image));
70 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
73 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
74 ::GetPanInput(
void)
const
76 if (this->GetNumberOfInputs() < 2)
81 return static_cast<const TPanImageType *
>
85 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
88 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
89 ::SetXsInput(
const TXsImageType *image)
95 const_cast<TXsImageType*>(image));
99 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
102 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
103 ::GetXsInput(
void)
const
105 if (this->GetNumberOfInputs() < 1)
110 return static_cast<const TXsImageType *
>
114 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
117 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
121 typename TPanImageType::SizeType sizePan;
122 typename TXsImageType::SizeType sizeXs;
123 sizePan = this->GetPanInput()->GetLargestPossibleRegion().GetSize();
124 sizeXs = this->GetXsInput()->GetLargestPossibleRegion().GetSize();
125 if ((sizePan[0] != sizeXs[0]) || (sizePan[1] != sizeXs[1]))
127 itkExceptionMacro(<<
"SimpleRcsPanSharpeningFusionImageFilter: Wrong Pan/Xs size");
131 m_ConvolutionFilter->SetInput(this->GetPanInput());
132 m_ConvolutionFilter->SetRadius(this->m_Radius);
133 m_ConvolutionFilter->SetFilter(this->m_Filter);
135 m_FusionFilter->SetInput1(this->GetXsInput());
136 m_FusionFilter->SetInput3(this->GetPanInput());
139 m_FusionFilter->GraftOutput(this->GetOutput());
140 m_FusionFilter->Update();
141 this->GraftOutput(m_FusionFilter->GetOutput());
144 template <
class TPanImageType,
class TXsImageType,
class TOutputImageType,
class TInternalPrecision>
147 <TPanImageType, TXsImageType, TOutputImageType, TInternalPrecision>
150 Superclass::PrintSelf(os, indent);
152 << indent <<
"Radius:" << this->m_Radius