18 #ifndef __otbBinaryFunctorNeighborhoodImageFilter_txx
19 #define __otbBinaryFunctorNeighborhoodImageFilter_txx
33 template <
class TInputImage1,
class TInputImage2,
34 class TOutputImage,
class TFunction>
38 this->SetNumberOfRequiredInputs(2);
45 template <
class TInputImage1,
class TInputImage2,
46 class TOutputImage,
class TFunction>
52 this->SetNthInput(0, const_cast<TInputImage1 *>(image1));
58 template <
class TInputImage1,
class TInputImage2,
59 class TOutputImage,
class TFunction>
65 this->SetNthInput(1, const_cast<TInputImage2 *>(image2));
68 template <
class TInputImage1,
class TInputImage2,
69 class TOutputImage,
class TFunction>
74 if (this->GetNumberOfInputs() < 1)
81 template <
class TInputImage1,
class TInputImage2,
82 class TOutputImage,
class TFunction>
87 if (this->GetNumberOfInputs() < 2)
94 template <
class TInputImage1,
class TInputImage2,
95 class TOutputImage,
class TFunction>
101 Superclass::GenerateInputRequestedRegion();
105 const_cast<TInputImage1 *
>(this->GetInput1());
107 const_cast<TInputImage2 *
>(this->GetInput2());
110 if (!inputPtr1 || !inputPtr2 || !outputPtr)
116 typename TInputImage1::RegionType inputRequestedRegion1, inputRequestedRegion2;
117 inputRequestedRegion1 = inputPtr1->GetRequestedRegion();
120 inputRequestedRegion1.PadByRadius(m_Radius);
121 inputRequestedRegion2 = inputRequestedRegion1;
124 if (inputRequestedRegion1.Crop(inputPtr1->GetLargestPossibleRegion()))
126 inputPtr1->SetRequestedRegion(inputRequestedRegion1);
134 inputPtr1->SetRequestedRegion(inputRequestedRegion1);
138 std::ostringstream msg;
139 msg << this->GetNameOfClass()
140 <<
"::GenerateInputRequestedRegion()";
142 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region of image 1.");
146 if (inputRequestedRegion2.Crop(inputPtr2->GetLargestPossibleRegion()))
148 inputPtr2->SetRequestedRegion(inputRequestedRegion2);
156 inputPtr2->SetRequestedRegion(inputRequestedRegion2);
160 std::ostringstream msg;
161 msg << this->GetNameOfClass()
162 <<
"::GenerateInputRequestedRegion()";
164 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region of image 1.");
174 template <
class TInputImage1,
class TInputImage2,
class TOutputImage,
class TFunction>
189 =
dynamic_cast<const TInputImage1*
>(ProcessObjectType::GetInput(0));
191 =
dynamic_cast<const TInputImage2*
>(ProcessObjectType::GetInput(1));
209 faceList1 = bC1(inputPtr1, outputRegionForThread, r1);
213 faceList2 = bC2(inputPtr2, outputRegionForThread, r2);
223 for (fit1 = faceList1.begin(), fit2 = faceList2.begin();
224 fit1 != faceList1.end() && fit2 != faceList2.end();
240 outputIt.Set(m_Functor(neighInputIt1, neighInputIt2));
245 progress.CompletedPixel();