21 #ifndef otbAngularProjectionBinaryImageFilter_hxx
22 #define otbAngularProjectionBinaryImageFilter_hxx
25 #include <vnl/vnl_math.h>
27 #include "itkImageRegionIterator.h"
28 #include "itkProgressReporter.h"
33 template <
class TInputImage,
class TOutputImage,
class TPrecision>
36 this->SetNumberOfRequiredInputs(2);
37 this->DynamicMultiThreadingOn();
40 template <
class TInputImage,
class TOutputImage,
class TPrecision>
46 template <
class TInputImage,
class TOutputImage,
class TPrecision>
52 template <
class TInputImage,
class TOutputImage,
class TPrecision>
55 if (this->GetNumberOfInputs() < 1)
60 return static_cast<const TInputImage*
>(this->itk::ProcessObject::GetInput(0));
63 template <
class TInputImage,
class TOutputImage,
class TPrecision>
66 if (this->GetNumberOfInputs() < 2)
71 return static_cast<const TInputImage*
>(this->itk::ProcessObject::GetInput(1));
74 template <
class TInputImage,
class TOutputImage,
class TPrecision>
78 this->SetNumberOfRequiredOutputs(angle.size());
79 for (
unsigned int i = 0; i < this->GetNumberOfRequiredOutputs(); ++i)
81 this->SetNthOutput(i, OutputImageType::New());
86 template <
class TInputImage,
class TOutputImage,
class TPrecision>
89 Superclass::GenerateOutputInformation();
90 for (
unsigned int i = 0; i < this->GetNumberOfOutputs(); ++i)
92 this->GetOutput(i)->SetRegions(this->GetInput()->GetRequestedRegion());
96 template <
class TInputImage,
class TOutputImage,
class TPrecision>
101 this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
103 itk::ImageRegionConstIterator<InputImageType> iter1(this->GetInput1(), inputRegionForThread);
106 itk::ImageRegionConstIterator<InputImageType> iter2(this->GetInput2(), inputRegionForThread);
109 std::vector<itk::ImageRegionIterator<OutputImageType>> outIter(this->GetNumberOfOutputs());
110 for (
unsigned int i = 0; i < outIter.size(); ++i)
112 outIter[i] = itk::ImageRegionIterator<OutputImageType>(this->GetOutput(i), outputRegionForThread);
113 outIter[i].GoToBegin();
116 while (!iter1.IsAtEnd() && !iter2.IsAtEnd())
118 for (
unsigned int i = 0; i < outIter.size(); ++i)
120 outIter[i].Set(std::cos(m_AngleSet[i]) * iter1.Get() + std::sin(m_AngleSet[i]) * iter2.Get());
void SetAngleSet(std::vector< PrecisionType > &angle)
void SetInput2(const InputImageType *)
void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) override
TInputImage InputImageType
InputImageType::RegionType InputImageRegionType
void SetInput1(const InputImageType *)
const InputImageType * GetInput2() const
AngularProjectionBinaryImageFilter()
void GenerateOutputInformation() override
OutputImageType::RegionType OutputImageRegionType
const InputImageType * GetInput1() const
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.