18 #ifndef __otbConvolutionImageFilter_txx
19 #define __otbConvolutionImageFilter_txx
35 template <
class TInputImage,
class TOutputImage,
class TBoundaryCondition,
class TFilterPrecision>
40 m_Filter.SetSize(3 * 3);
42 m_NormalizeFilter =
false;
45 template <
class TInputImage,
class TOutputImage,
class TBoundaryCondition,
class TFilterPrecision>
51 Superclass::GenerateInputRequestedRegion();
55 const_cast<TInputImage *
>(this->GetInput());
58 if (!inputPtr || !outputPtr)
65 typename TInputImage::RegionType inputRequestedRegion;
66 inputRequestedRegion = inputPtr->GetRequestedRegion();
69 inputRequestedRegion.PadByRadius(m_Radius);
71 otbMsgDevMacro(<<
"Region is now " << inputRequestedRegion.GetIndex() <<
", " << inputRequestedRegion.GetSize());
74 if (inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()))
76 inputPtr->SetRequestedRegion(inputRequestedRegion);
85 inputPtr->SetRequestedRegion(inputRequestedRegion);
90 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region.");
96 template<
class TInputImage,
class TOutputImage,
class TBoundaryCondition,
class TFilterPrecision>
105 typename OutputImageType::Pointer output = this->GetOutput();
106 typename InputImageType::ConstPointer input = this->GetInput();
112 InputRealType norm = itk::NumericTraits<InputRealType>::Zero;
115 this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
121 unsigned int neighborhoodSize = inputIt.
Size();
124 if (m_NormalizeFilter)
126 norm = itk::NumericTraits<InputRealType>::Zero;
127 for (i = 0; i < neighborhoodSize; ++i)
135 sum = itk::NumericTraits<InputRealType>::Zero;
137 for (i = 0; i < neighborhoodSize; ++i)
143 if (m_NormalizeFilter)
145 outputIt.
Set(static_cast<OutputPixelType>(sum /
double(norm)));
149 outputIt.
Set(static_cast<OutputPixelType>(sum));
154 progress.CompletedPixel();
161 template <
class TInputImage,
class TOutput,
class TBoundaryCondition,
class TFilterPrecision>
166 Superclass::PrintSelf(os, indent);
167 os << indent <<
"Radius: " << m_Radius << std::endl;