18 #ifndef __otbLocalRxDetectorFilter_txx
19 #define __otbLocalRxDetectorFilter_txx
29 template <
class TInputImage,
class TOutputImage>
32 : m_InternalRadius(1), m_ExternalRadius(2)
39 template <
class TInputImage,
class TOutputImage>
44 Superclass::PrintSelf(os, indent);
46 os << indent <<
"Internal Radius: " << m_InternalRadius << std::endl;
47 os << indent <<
"External Radius: " << m_ExternalRadius << std::endl;
53 template <
class TInputImage,
class TOutputImage>
62 outputPtr->FillBuffer(0);
68 template <
class TInputImage,
class TOutputImage>
82 typename TInputImage::RegionType inputRegionForThread;
83 inputRegionForThread = outputRegionForThread;
84 inputRegionForThread.PadByRadius(m_ExternalRadius);
85 inputRegionForThread.Crop(inputPtr->GetLargestPossibleRegion());
89 radius.
Fill(m_ExternalRadius);
93 typename VectorFaceCalculatorType::FaceListType::iterator vectorFit;
95 vectorFaceList = vectorFaceCalculator(inputPtr, inputRegionForThread, radius);
97 vectorFit = vectorFaceList.begin();
104 for (
int y = -m_ExternalRadius; y <= m_ExternalRadius; y++)
107 for (
int x = -m_ExternalRadius; x <= m_ExternalRadius; x++)
110 if ((abs(x) > m_InternalRadius) || (abs(y) > m_InternalRadius))
121 typename FaceCalculatorType::FaceListType::iterator fit;
123 faceList = faceCalculator(outputPtr, inputRegionForThread, radius);
124 fit = faceList.begin();
133 listSample->SetMeasurementVectorSize(inputPtr->GetNumberOfComponentsPerPixel());
140 listSample->PushBack(ci.
Get());
145 meanCalculator->SetInputSample(listSample);
146 meanCalculator->Update();
149 meanVector = meanCalculator->GetOutput();
153 covarianceCalculator->SetInputSample(listSample);
154 covarianceCalculator->SetMean(meanVector);
155 covarianceCalculator->Update();
164 testPixVec = inputPtr->GetPixel(inputIt.
GetIndex());
169 meanVec.SetElement(i, meanVector->
GetElement(i));
173 for (
unsigned int i = 0; i < centeredTestPixMat.rows(); ++i)
175 centeredTestPixMat.put(i, 0, (testPixVec.GetElement(i) - meanVector->
GetElement(i)));
180 outputIt.
Set(rxValue.get(0, 0));
187 template <
class TInputImage,
class TOutputImage>
193 Superclass::GenerateInputRequestedRegion();
200 if ( !inputPtr || !outputPtr )
207 typename TInputImage::RegionType inputRequestedRegion;
208 inputRequestedRegion = inputPtr->GetRequestedRegion();
211 inputRequestedRegion.PadByRadius( m_ExternalRadius );
214 if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) )
216 inputPtr->SetRequestedRegion( inputRequestedRegion );
225 inputPtr->SetRequestedRegion( inputRequestedRegion );
230 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region.");