18 #ifndef itkCastImageFilter_hxx
19 #define itkCastImageFilter_hxx
22 #include "itkProgressReporter.h"
23 #include "itkImageAlgorithm.h"
29 template<
typename TInputImage,
typename TOutputImage >
33 this->SetNumberOfRequiredInputs(1);
35 this->DynamicMultiThreadingOn();
38 template<
typename TInputImage,
typename TOutputImage >
43 if ( this->GetInPlace() && this->CanRunInPlace() )
47 this->AllocateOutputs();
48 itk::ProgressReporter progress(
this, 0, 1);
52 Superclass::GenerateData();
56 template<
typename TInputImage,
typename TOutputImage >
65 TOutputImage *outputPtr = this->GetOutput();
66 const TInputImage *inputPtr = this->GetInput();
68 if ( !outputPtr || !inputPtr )
76 this->CallCopyInputRegionToOutputRegion( outputLargestPossibleRegion,
77 inputPtr->GetLargestPossibleRegion() );
78 outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion);
80 itk::ImageToImageFilterDetail::ImageInformationCopier<Superclass::OutputImageDimension,
81 Superclass::InputImageDimension>
83 informationCopier(outputPtr, inputPtr);
88 template<
typename TInputImage,
typename TOutputImage >
93 DynamicThreadedGenerateDataDispatched<InputPixelType>(outputRegionForThread,
94 std::is_convertible<InputPixelType, OutputPixelType>());
97 template<
typename TInputImage,
typename TOutputImage >
98 template<
typename TInputPixelType>
103 const TInputImage *inputPtr = this->GetInput();
104 TOutputImage *outputPtr = this->GetOutput(0);
109 typename TInputImage::RegionType inputRegionForThread;
111 this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
113 itk::ImageAlgorithm::Copy( inputPtr, outputPtr, inputRegionForThread, outputRegionForThread );
117 template<
typename TInputImage,
typename TOutputImage >
118 template<
typename TInputPixelType>
127 static_assert( std::is_convertible<typename InputPixelType::ValueType, typename OutputPixelType::ValueType>::value,
"Component types are required to be convertible." );
129 const typename OutputImageRegionType::SizeType ®ionSize = outputRegionForThread.GetSize();
131 if( regionSize[0] == 0 )
135 const TInputImage *inputPtr = this->GetInput();
136 TOutputImage *outputPtr = this->GetOutput(0);
141 typename TInputImage::RegionType inputRegionForThread;
143 this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
146 itk::ImageScanlineConstIterator< TInputImage > inputIt(inputPtr, inputRegionForThread);
147 itk::ImageScanlineIterator< TOutputImage > outputIt(outputPtr, outputRegionForThread);
150 outputIt.GoToBegin();
153 while ( !inputIt.IsAtEnd() )
155 while ( !inputIt.IsAtEndOfLine() )
158 for (
unsigned int k = 0; k < OutputPixelType::Dimension; k++ )
160 value[k] =
static_cast< typename OutputPixelType::ValueType
>( inputPixel[k] );
162 outputIt.Set( value );
void DynamicThreadedGenerateDataDispatched(const OutputImageRegionType &outputRegionForThread, std::true_type isConvertible)
void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) override
typename Superclass::OutputImageRegionType OutputImageRegionType
typename TInputImage::PixelType InputPixelType
typename TOutputImage::PixelType OutputPixelType
void GenerateOutputInformation() override
void GenerateData() override
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.