23 #ifndef otbSubsampleImageFilter_hxx
24 #define otbSubsampleImageFilter_hxx
29 #include "itkImageRegionIterator.h"
34 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
37 Superclass::PrintSelf(os, indent);
38 os << indent <<
"SubsampleFactor = [" << m_SubsampleFactor[0];
39 for (
unsigned int i = 1; i < InputImageDimension; ++i)
41 os <<
", " << m_SubsampleFactor[i];
46 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
49 for (
unsigned int i = 0; i < InputImageDimension; ++i)
51 if (m_SubsampleFactor[i] != 1)
58 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
61 Superclass::GenerateOutputInformation();
63 if (!IsSubsampleFactorOne())
66 this->CallCopyInputRegionToOutputRegion(newRegion, this->GetInput()->GetLargestPossibleRegion());
67 this->GetOutput()->SetRegions(newRegion);
71 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
75 Superclass::CallCopyOutputRegionToInputRegion(destRegion, srcRegion);
79 typename OutputImageRegionType::IndexType srcIndex = srcRegion.GetIndex();
80 typename OutputImageRegionType::SizeType srcSize = srcRegion.GetSize();
82 typename InputImageRegionType::IndexType destIndex;
83 typename InputImageRegionType::SizeType destSize;
85 for (
unsigned int i = 0; i < InputImageDimension; ++i)
88 destIndex[i] = srcIndex[i] / m_SubsampleFactor[i];
89 destSize[i] = srcSize[i] / m_SubsampleFactor[i];
92 destRegion.SetIndex(destIndex);
93 destRegion.SetSize(destSize);
97 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
101 Superclass::CallCopyInputRegionToOutputRegion(destRegion, srcRegion);
105 typename InputImageRegionType::IndexType srcIndex = srcRegion.GetIndex();
106 typename InputImageRegionType::SizeType srcSize = srcRegion.GetSize();
108 typename OutputImageRegionType::IndexType destIndex;
109 typename OutputImageRegionType::SizeType destSize;
111 for (
unsigned int i = 0; i < InputImageDimension; ++i)
113 destIndex[i] = srcIndex[i] * m_SubsampleFactor[i];
114 destSize[i] = srcSize[i] * m_SubsampleFactor[i];
117 destRegion.SetIndex(destIndex);
118 destRegion.SetSize(destSize);
122 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
126 output->FillBuffer(0);
129 template <
class TInputImage,
class TOutputImage, Wavelet::WaveletDirection TDirectionOfTransformation>
139 this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
164 for (
unsigned int i = 0; i < OutputImageDimension; ++i)
166 outputIndex[i] = inputIndex[i] * m_SubsampleFactor[i];
OutputImageType::IndexType OutputImageIndexType
OutputImageType::RegionType OutputImageRegionType
void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) override
InputImageType::RegionType InputImageRegionType
InputImageType::IndexType InputImageIndexType
bool IsSubsampleFactorOne() const
void GenerateOutputInformation() override
void BeforeThreadedGenerateData() override
void PrintSelf(std::ostream &os, itk::Indent indent) const override
void CallCopyOutputRegionToInputRegion(InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) override
void CallCopyInputRegionToOutputRegion(OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) override
OutputImageType::PixelType OutputPixelType
OutputImageType::Pointer OutputImagePointerType
Regular subsample iterator over an image.
IndexType GetIndex() const
void SetIndex(const IndexType &ind) override
void SetOffset(const OffsetType &offset)
void SetSubsampleFactor(IndexValueType factor)
OffsetType GetOffset() const
Regular subsample iterator over an image.
Superclass::OffsetType OffsetType
void Set(const PixelType &value) const
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.