18 #ifndef __otbDescriptorsListSampleGenerator_txx
19 #define __otbDescriptorsListSampleGenerator_txx
28 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
31 : m_NeighborhoodRadius(0)
34 this->SetNumberOfRequiredInputs(2);
38 this->SetNumberOfRequiredOutputs(3);
44 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
50 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
62 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
67 Superclass::GenerateOutputInformation();
70 this->GetOutput()->CopyInformation(this->GetInput());
71 this->GetOutput()->SetLargestPossibleRegion(this->GetInput()->GetLargestPossibleRegion());
73 if (this->GetOutput()->GetRequestedRegion().GetNumberOfPixels() == 0)
75 this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion());
80 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
85 this->SetNthInput(1, location);
88 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
97 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
102 return const_cast<ListSampleType*
>(this->GetListSampleObject()->Get());
105 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
113 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
121 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
129 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
134 return this->GetSamplesPositionsObject()->Get();
137 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
145 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
154 output =
static_cast<itk::DataObject*
>(InputImageType::New().GetPointer());
159 listSample->Set(ListSampleType::New());
166 labelListSample->Set(LabelListSampleType::New());
177 output =
static_cast<itk::DataObject*
>(InputImageType::New().GetPointer());
183 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
189 for (
int i = 0; i < this->GetNumberOfThreads(); ++i)
191 m_ThreadListSample[i] = ListSampleType::New();
195 for (
int i = 0; i < this->GetNumberOfThreads(); ++i)
197 m_ThreadLabelListSample[i] = LabelListSampleType::New();
202 this->GetListSample()->Clear();
203 this->GetLabelListSample()->Clear();
204 this->GetSamplesPositions().clear();
207 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
220 if( this->GetNumberOfThreads() > 1 )
226 for (
unsigned int i = 0; i < threadListSample->Size(); ++i)
228 listSample->PushBack( threadListSample->GetMeasurementVector(i) );
229 labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) );
230 samplesPosition.push_back( threadSamplesPosition[i] );
235 for (
int threadId = 1; threadId < this->GetNumberOfThreads(); ++threadId )
241 for (
unsigned int i = 0; i < threadListSample->Size(); ++i)
244 if( std::find(samplesPosition.begin(), samplesPosition.end(), curSamplesPosition) == samplesPosition.end() )
246 listSample->PushBack( threadListSample->GetMeasurementVector(i) );
247 labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) );
248 samplesPosition.push_back( curSamplesPosition );
254 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
259 Superclass::PrintSelf(os, indent);
262 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
267 Superclass::GenerateInputRequestedRegion();
271 const_cast< TInputImage *
>( this->GetInput() );
274 if ( !inputPtr || !outputPtr )
281 typename TInputImage::RegionType inputRequestedRegion;
282 inputRequestedRegion = inputPtr->GetRequestedRegion();
285 inputRequestedRegion.PadByRadius( m_NeighborhoodRadius + 5 );
288 if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) )
290 inputPtr->SetRequestedRegion( inputRequestedRegion );
299 inputPtr->SetRequestedRegion( inputRequestedRegion );
303 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
310 template <
class TInputImage,
class TVectorData,
class TFunctionType,
class TListSample,
class TLabelListSample>
324 if (vectorDataIt.
Get()->IsPointFeature())
328 this->GetInput()->TransformPhysicalPointToContinuousIndex(point, cidx);
334 RegionType paddedRegion = outputRegionForThread;
335 paddedRegion.PadByRadius(m_NeighborhoodRadius);
336 if (this->IsInsideWithNeighborhoodRadius(paddedRegion, cidx))
339 listSample->PushBack( sample );
343 labelListSample->PushBack( label );
345 samplesPosition.push_back(point);
352 template <
class TInputImage,
class TVectorData,
class TListSample,
class TLabelListSample,
class TOutputPrecision,
class TCoordRep>
359 template <
class TInputImage,
class TVectorData,
class TListSample,
class TLabelListSample,
class TOutputPrecision,
class TCoordRep>