21 #ifndef otbVectorImageTo3DScalarImageFilter_hxx
22 #define otbVectorImageTo3DScalarImageFilter_hxx
25 #include "itkImageRegionConstIterator.h"
26 #include "itkImageSliceIteratorWithIndex.h"
33 template <
class TInputImage,
class TOutputImage>
37 this->DynamicMultiThreadingOn();
41 template <
class TInputImage,
class TOutputImage>
45 const InputImageType* inputPtr = this->GetInput();
46 OutputImageType* outputPtr = this->GetOutput();
48 InputImageRegionType inputLargestRegion = this->GetInput()->GetLargestPossibleRegion();
49 OutputImageSizeType size;
50 OutputImageIndexType index;
51 for (
unsigned int i = 0; i < InputImageType::ImageDimension; ++i)
53 size[i] = inputLargestRegion.GetSize()[i];
54 index[i] = inputLargestRegion.GetIndex()[i];
56 size[OutputImageType::ImageDimension - 1] = inputPtr->GetNumberOfComponentsPerPixel();
57 index[OutputImageType::ImageDimension - 1] = 0;
59 OutputImageRegionType outputRegion;
60 outputRegion.SetSize(size);
61 outputRegion.SetIndex(index);
62 outputPtr->SetLargestPossibleRegion(outputRegion);
65 template <
class TInputImage,
class TOutputImage>
68 InputImageType* inputPtr =
const_cast<InputImageType*
>(this->GetInput());
69 OutputImageType* outputPtr = this->GetOutput();
72 OutputImageRegionType requestedRegion = outputPtr->GetRequestedRegion();
73 InputImageRegionType inputRequestedRegion;
74 InputImageSizeType size;
75 InputImageIndexType index;
77 for (
unsigned int i = 0; i < InputImageType::ImageDimension; ++i)
79 size[i] = requestedRegion.GetSize()[i];
80 index[i] = requestedRegion.GetIndex()[i];
82 inputRequestedRegion.SetSize(size);
83 inputRequestedRegion.SetIndex(index);
84 inputPtr->SetRequestedRegion(inputRequestedRegion);
86 template <
class TInputImage,
class TOutputImage>
89 const InputImageType* inputPtr = this->GetInput();
90 OutputImageType* outputPtr = this->GetOutput();
92 typedef itk::ImageRegionConstIterator<InputImageType> InputIteratorType;
93 typedef itk::ImageSliceIteratorWithIndex<OutputImageType> OutputIteratorType;
95 InputImageRegionType inputRegion;
96 InputImageSizeType size;
97 InputImageIndexType index;
99 for (
unsigned int i = 0; i < InputImageType::ImageDimension; ++i)
101 size[i] = outputRegionForThread.GetSize()[i];
102 index[i] = outputRegionForThread.GetIndex()[i];
104 inputRegion.SetSize(size);
105 inputRegion.SetIndex(index);
107 InputIteratorType inIt(inputPtr, inputRegion);
109 OutputIteratorType outIt(outputPtr, outputRegionForThread);
110 outIt.SetFirstDirection(0);
111 outIt.SetSecondDirection(1);
116 while (!outIt.IsAtEnd())
118 outIt.Set(
static_cast<OutputPixelType
>(inIt.Get()[outIt.GetIndex()[InputImageType::ImageDimension]]));
125 if (outIt.IsAtEndOfLine())
129 if (outIt.IsAtEndOfSlice())
VectorImageTo3DScalarImageFilter()
void GenerateInputRequestedRegion(void) override
void GenerateOutputInformation(void) override
void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) override
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.