18 #ifndef __otbUnaryFunctorNeighborhoodWithOffsetImageFilter_txx
19 #define __otbUnaryFunctorNeighborhoodWithOffsetImageFilter_txx
34 template <
class TInputImage,
class TOutputImage,
class TFunction>
38 this->SetNumberOfRequiredInputs(1);
41 m_FunctorList.clear();
44 template <
class TInputImage,
class TOutputImage,
class TFunction>
49 Superclass::BeforeThreadedGenerateData();
51 for (
int i = 0; i < this->GetNumberOfThreads(); ++i)
53 m_FunctorList.push_back(m_Functor);
57 template <
class TInputImage,
class TOutputImage,
class TFunction>
63 Superclass::GenerateInputRequestedRegion();
67 const_cast<TInputImage *
>(this->GetInput());
70 if (!inputPtr || !outputPtr)
76 typename TInputImage::RegionType inputRequestedRegion;
77 inputRequestedRegion = inputPtr->GetRequestedRegion();
81 maxRad[0] = m_Radius[0] + vcl_abs(m_Offset[0]);
82 maxRad[1] = m_Radius[1] + vcl_abs(m_Offset[1]);
83 inputRequestedRegion.PadByRadius(maxRad);
86 if (inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()))
88 inputPtr->SetRequestedRegion(inputRequestedRegion);
97 inputPtr->SetRequestedRegion(inputRequestedRegion);
101 std::ostringstream msg;
102 msg << this->GetNameOfClass()
103 <<
"::GenerateInputRequestedRegion()";
105 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region.");
114 template <
class TInputImage,
class TOutputImage,
class TFunction>
124 InputImagePointer inputPtr =
dynamic_cast<const TInputImage*
>(ProcessObjectType::GetInput(0));
131 rOff[0] = m_Radius[0] + vcl_abs(m_Offset[0]);
132 rOff[1] = m_Radius[1] + vcl_abs(m_Offset[1]);
137 faceListOff = bCOff(inputPtr, outputRegionForThread, rOff);
145 fitOff = faceListOff.begin();
147 while (fitOff != faceListOff.end())
163 progress.CompletedPixel();