From aa242cec9fefe02b23d778b8f65ce1e1bb9c74f3 Mon Sep 17 00:00:00 2001 From: Cyrille Valladeau <cyrille.valladeau@c-s.fr> Date: Thu, 13 Oct 2011 18:59:21 +0200 Subject: [PATCH] ENH: InputImageParameter::GetImage is templated. To be improved, code factorization :/ --- .../ApplicationEngine/otbWrapperApplication.h | 9 + .../otbWrapperApplication.txx | 18 +- .../otbWrapperInputImageParameter.cxx | 1610 ++++++++++++++++- .../otbWrapperInputImageParameter.h | 107 +- 4 files changed, 1709 insertions(+), 35 deletions(-) diff --git a/Code/ApplicationEngine/otbWrapperApplication.h b/Code/ApplicationEngine/otbWrapperApplication.h index d83260be3f..17806a3b75 100644 --- a/Code/ApplicationEngine/otbWrapperApplication.h +++ b/Code/ApplicationEngine/otbWrapperApplication.h @@ -284,6 +284,15 @@ public: */ FloatVectorImageType* GetParameterImage(std::string parameter); + /* Get an image value + * + * Can be called for types : + * \li ParameterType_InputImage + */ + template <class TImageType> + TImageType* GetParameterImage(std::string parameter); + + /* Get an image list value * * Can be called for types : diff --git a/Code/ApplicationEngine/otbWrapperApplication.txx b/Code/ApplicationEngine/otbWrapperApplication.txx index a6cc00a355..12d21fb4ef 100644 --- a/Code/ApplicationEngine/otbWrapperApplication.txx +++ b/Code/ApplicationEngine/otbWrapperApplication.txx @@ -18,7 +18,7 @@ #include "otbWrapperApplication.h" #include "otbWrapperOutputImageParameter.h" - +#include "otbWrapperInputImageParameter.h" //#include "otbWrapperParameterGroup.h" @@ -39,5 +39,21 @@ void Application::SetParameterOutputImage(std::string parameter, TImageType* val } } +template <class TImageType> +TImageType* Application::GetParameterImage(std::string parameter) +{ + typename TImageType::Pointer ret; + Parameter* param = GetParameterByKey(parameter); + + if (dynamic_cast<InputImageParameter*>(param)) + { + InputImageParameter* paramDown = dynamic_cast<InputImageParameter*>(param); + ret = paramDown->GetImage<TImageType>(); + } + + //TODO: exception if not found ? + return ret; +} + } } diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx index 91eb8bbe96..34ad90c4e3 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx +++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx @@ -17,6 +17,10 @@ =========================================================================*/ #include "otbWrapperInputImageParameter.h" #include "itksys/SystemTools.hxx" +#include "otbImageFileReader.h" +#include "itkCastImageFilter.h" +#include "otbImageToVectorImageCastFilter.h" +#include "otbWrapperTypes.h" namespace otb { @@ -27,6 +31,8 @@ InputImageParameter::InputImageParameter() { this->SetName("Input Image"); this->SetKey("in"); + m_FileName=""; + this->ClearValue(); } InputImageParameter::~InputImageParameter() @@ -44,7 +50,7 @@ InputImageParameter::SetFromFileName(const std::string& filename) if (!filename.empty() && itksys::SystemTools::FileExists(filename.c_str())) { - ImageFileReaderType::Pointer reader = ImageFileReaderType::New(); + FloatVectorReaderType::Pointer reader = FloatVectorReaderType::New(); reader->SetFileName(filename); try { @@ -55,51 +61,1601 @@ InputImageParameter::SetFromFileName(const std::string& filename) this->ClearValue(); } - // everything went fine, store the object references - m_Reader = reader; - m_Image = reader->GetOutput(); + // the specified filename is valid => store the value + m_FileName = filename; SetActive(true); } } -std::string -InputImageParameter::GetFileName() const + +FloatVectorImageType* +InputImageParameter::GetImage() +{ + return this->GetImage<FloatVectorImageType>(); +} + + +template <class TOutputImage> +TOutputImage * +InputImageParameter::GetImage() { - if (m_Reader) + // 2 cases : the user set a filename vs. the user set an image + //////////////////////// Filename case: + if( !m_FileName.empty() ) { - return m_Reader->GetFileName(); + typedef otb::ImageFileReader<TOutputImage> ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(m_FileName); + try + { + reader->UpdateOutputInformation(); + } + catch(itk::ExceptionObject & err) + { + this->ClearValue(); + } + + m_Image = reader->GetOutput(); + m_Reader = reader; + + // Pay attention, don't return m_Image because it is a ImageBase... + return reader->GetOutput(); + } + //////////////////////// Image case: + else + { + if( m_Image.IsNull()) + { + itkExceptionMacro("No input image or filename detected..."); + } + else + { + if (dynamic_cast<Int8ImageType*>(m_Image.GetPointer())) + { + return CastImage<Int8ImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt8ImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt8ImageType, TOutputImage>(); + } + else if (dynamic_cast<Int16ImageType*>(m_Image.GetPointer())) + { + return CastImage<Int16ImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt16ImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt16ImageType, TOutputImage>(); + } + else if (dynamic_cast<Int32ImageType*>(m_Image.GetPointer())) + { + return CastImage<Int32ImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt32ImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt32ImageType, TOutputImage>(); + } + else if (dynamic_cast<FloatImageType*>(m_Image.GetPointer())) + { + return CastImage<FloatImageType, TOutputImage>(); + } + else if (dynamic_cast<DoubleImageType*>(m_Image.GetPointer())) + { + return CastImage<DoubleImageType, TOutputImage>(); + } + else if (dynamic_cast<Int8VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<Int8VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt8VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt8VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<Int16VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<Int16VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt16VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt16VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<Int32VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<Int32VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt32VectorImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt32VectorImageType, TOutputImage>(); + } + else if (dynamic_cast<FloatVectorImageType*>(m_Image.GetPointer())) + { + return CastImage<FloatVectorImageType, TOutputImage>(); + } + else if (dynamic_cast<DoubleVectorImageType*>(m_Image.GetPointer())) + { + return CastImage<DoubleVectorImageType, TOutputImage>(); + } + else if (dynamic_cast<Int8RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<Int8RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt8RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt8RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<Int16RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<Int16RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt16RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt16RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<Int32RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<Int32RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<UInt32RGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<UInt32RGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<FloatRGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<FloatRGBAImageType, TOutputImage>(); + } + else if (dynamic_cast<DoubleRGBAImageType*>(m_Image.GetPointer())) + { + return CastImage<DoubleRGBAImageType, TOutputImage>(); + } + else + { + itkExceptionMacro("Unknown image type"); + } + + } } - - itkExceptionMacro(<< "No filename value"); } -FloatVectorImageType* -InputImageParameter::GetImage() const +template <class TInputImage, class TOutputImage> +TOutputImage* +InputImageParameter::SimpleCastImage() { - return m_Image; + TInputImage* realInputImage = dynamic_cast<TInputImage*>(m_Image.GetPointer()); + + typedef itk::CastImageFilter<TInputImage, TOutputImage> CasterType; + typename CasterType::Pointer caster = CasterType::New(); + + caster->SetInput(realInputImage); + caster->UpdateOutputInformation(); + + m_Image = caster->GetOutput(); + m_Caster = caster; + + return caster->GetOutput(); } - -void -InputImageParameter::SetImage(FloatVectorImageType* image) + + +template <class TInputImage, class TOutputImage> +TOutputImage* +InputImageParameter::CastVectorImageFromImage() { - m_Image = image; - m_Reader = ImageFileReaderType::Pointer(); + TInputImage* realInputImage = dynamic_cast<TInputImage*>(m_Image.GetPointer()); + + typedef ImageToVectorImageCastFilter<TInputImage, TOutputImage> CasterType; + typename CasterType::Pointer caster = CasterType::New(); + + caster->SetInput(realInputImage); + caster->UpdateOutputInformation(); + + m_Image = caster->GetOutput(); + m_Caster = caster; + + return caster->GetOutput(); } -bool -InputImageParameter::HasValue() const -{ - return m_Image.IsNotNull(); +/********************************************************************* +********************** Image -> Image +**********************************************************************/ +/////////// Int8ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<Int8ImageType, Int8ImageType>(){ + return this->SimpleCastImage<Int8ImageType, Int8ImageType>(); } -void -InputImageParameter::ClearValue() -{ - m_Image = FloatVectorImageType::Pointer(); - m_Reader = ImageFileReaderType::Pointer(); +template <> UInt8ImageType * +InputImageParameter::CastImage<Int8ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<Int8ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<Int8ImageType, Int16ImageType>(){ + return this->SimpleCastImage<Int8ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<Int8ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<Int8ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<Int8ImageType, Int32ImageType>(){ + return this->SimpleCastImage<Int8ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<Int8ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<Int8ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<Int8ImageType, FloatImageType>(){ + return this->SimpleCastImage<Int8ImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<Int8ImageType, DoubleImageType>(){ + return this->SimpleCastImage<Int8ImageType, DoubleImageType>(); +} + + +/////////// UInt8ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<UInt8ImageType, Int8ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<UInt8ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<UInt8ImageType, Int16ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<UInt8ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<UInt8ImageType, Int32ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<UInt8ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<UInt8ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<UInt8ImageType, FloatImageType>(){ + return this->SimpleCastImage<UInt8ImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<UInt8ImageType, DoubleImageType>(){ + return this->SimpleCastImage<UInt8ImageType, DoubleImageType>(); +} + +/////////// Int16ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<Int16ImageType, Int8ImageType>(){ + return this->SimpleCastImage<Int16ImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<Int16ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<Int16ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<Int16ImageType, Int16ImageType>(){ + return this->SimpleCastImage<Int16ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<Int16ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<Int16ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<Int16ImageType, Int32ImageType>(){ + return this->SimpleCastImage<Int16ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<Int16ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<Int16ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<Int16ImageType, FloatImageType>(){ + return this->SimpleCastImage<Int16ImageType, FloatImageType>(); } +template <> DoubleImageType * +InputImageParameter::CastImage<Int16ImageType, DoubleImageType>(){ + return this->SimpleCastImage<Int16ImageType, DoubleImageType>(); +} + +/////////// UInt16ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<UInt16ImageType, Int8ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<UInt16ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<UInt16ImageType, Int16ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<UInt16ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<UInt16ImageType, Int32ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<UInt16ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<UInt16ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<UInt16ImageType, FloatImageType>(){ + return this->SimpleCastImage<UInt16ImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<UInt16ImageType, DoubleImageType>(){ + return this->SimpleCastImage<UInt16ImageType, DoubleImageType>(); +} + +/////////// Int32ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<Int32ImageType, Int8ImageType>(){ + return this->SimpleCastImage<Int32ImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<Int32ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<Int32ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<Int32ImageType, Int16ImageType>(){ + return this->SimpleCastImage<Int32ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<Int32ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<Int32ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<Int32ImageType, Int32ImageType>(){ + return this->SimpleCastImage<Int32ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<Int32ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<Int32ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<Int32ImageType, FloatImageType>(){ + return this->SimpleCastImage<Int32ImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<Int32ImageType, DoubleImageType>(){ + return this->SimpleCastImage<Int32ImageType, DoubleImageType>(); +} + + +/////////// UInt32ImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<UInt32ImageType, Int8ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<UInt32ImageType, UInt8ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<UInt32ImageType, Int16ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<UInt32ImageType, UInt16ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<UInt32ImageType, Int32ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<UInt32ImageType, UInt32ImageType>(){ + return this->SimpleCastImage<UInt32ImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<UInt32ImageType, FloatImageType>(){ + return this->SimpleCastImage<UInt32ImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<UInt32ImageType, DoubleImageType>(){ + return this->SimpleCastImage<UInt32ImageType, DoubleImageType>(); +} + +/////////// FloatImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<FloatImageType, Int8ImageType>(){ + return this->SimpleCastImage<FloatImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<FloatImageType, UInt8ImageType>(){ + return this->SimpleCastImage<FloatImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<FloatImageType, Int16ImageType>(){ + return this->SimpleCastImage<FloatImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<FloatImageType, UInt16ImageType>(){ + return this->SimpleCastImage<FloatImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<FloatImageType, Int32ImageType>(){ + return this->SimpleCastImage<FloatImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<FloatImageType, UInt32ImageType>(){ + return this->SimpleCastImage<FloatImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<FloatImageType, FloatImageType>(){ + return this->SimpleCastImage<FloatImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<FloatImageType, DoubleImageType>(){ + return this->SimpleCastImage<FloatImageType, DoubleImageType>(); +} + +/////////// DoubleImageType->... +template <> Int8ImageType * +InputImageParameter::CastImage<DoubleImageType, Int8ImageType>(){ + return this->SimpleCastImage<DoubleImageType, Int8ImageType>(); +} + +template <> UInt8ImageType * +InputImageParameter::CastImage<DoubleImageType, UInt8ImageType>(){ + return this->SimpleCastImage<DoubleImageType, UInt8ImageType>(); +} + +template <> Int16ImageType* +InputImageParameter::CastImage<DoubleImageType, Int16ImageType>(){ + return this->SimpleCastImage<DoubleImageType, Int16ImageType>(); +} + +template <> UInt16ImageType* +InputImageParameter::CastImage<DoubleImageType, UInt16ImageType>(){ + return this->SimpleCastImage<DoubleImageType, UInt16ImageType>(); +} + +template <> Int32ImageType* +InputImageParameter::CastImage<DoubleImageType, Int32ImageType>(){ + return this->SimpleCastImage<DoubleImageType, Int32ImageType>(); +} + + +template <> UInt32ImageType* +InputImageParameter::CastImage<DoubleImageType, UInt32ImageType>(){ + return this->SimpleCastImage<DoubleImageType, UInt32ImageType>(); +} + +template <> FloatImageType * +InputImageParameter::CastImage<DoubleImageType, FloatImageType>(){ + return this->SimpleCastImage<DoubleImageType, FloatImageType>(); +} + +template <> DoubleImageType * +InputImageParameter::CastImage<DoubleImageType, DoubleImageType>(){ + return this->SimpleCastImage<DoubleImageType, DoubleImageType>(); +} + + + +/********************************************************************* +********************** VectorImage -> VectorImage +**********************************************************************/ +/////////// Int8VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int8VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int8VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int8VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int8VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int8VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int8VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int8VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int8VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<Int8VectorImageType, DoubleVectorImageType>(); +} + + +/////////// UInt8VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt8VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt8VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt8VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt8VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt8VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt8VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt8VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt8VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<UInt8VectorImageType, DoubleVectorImageType>(); +} + +/////////// Int16VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int16VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int16VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int16VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int16VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int16VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int16VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int16VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int16VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<Int16VectorImageType, DoubleVectorImageType>(); +} + +/////////// UInt16VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt16VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt16VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt16VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt16VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt16VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt16VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt16VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt16VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<UInt16VectorImageType, DoubleVectorImageType>(); +} + +/////////// Int32VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int32VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int32VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int32VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int32VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int32VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int32VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int32VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int32VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<Int32VectorImageType, DoubleVectorImageType>(); +} + + +/////////// UInt32VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt32VectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt32VectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt32VectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt32VectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt32VectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt32VectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt32VectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt32VectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<UInt32VectorImageType, DoubleVectorImageType>(); +} + +/////////// FloatVectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<FloatVectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<FloatVectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<FloatVectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<FloatVectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<FloatVectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<FloatVectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<FloatVectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<FloatVectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<FloatVectorImageType, DoubleVectorImageType>(); +} + +/////////// DoubleVectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<DoubleVectorImageType, Int8VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<DoubleVectorImageType, UInt8VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<DoubleVectorImageType, Int16VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<DoubleVectorImageType, UInt16VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<DoubleVectorImageType, Int32VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<DoubleVectorImageType, UInt32VectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<DoubleVectorImageType, FloatVectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<DoubleVectorImageType, DoubleVectorImageType>(){ + return this->SimpleCastImage<DoubleVectorImageType, DoubleVectorImageType>(); +} + + +/********************************************************************* +********************** RGBAImage -> RGBAImage +**********************************************************************/ +/////////// Int8RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<Int8RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<Int8RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<Int8RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<Int8RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<Int8RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<Int8RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<Int8RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<Int8RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<Int8RGBAImageType, DoubleRGBAImageType>(); +} + + +/////////// UInt8RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<UInt8RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<UInt8RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<UInt8RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<UInt8RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<UInt8RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<UInt8RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<UInt8RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<UInt8RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<UInt8RGBAImageType, DoubleRGBAImageType>(); +} + +/////////// Int16RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<Int16RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<Int16RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<Int16RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<Int16RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<Int16RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<Int16RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<Int16RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<Int16RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<Int16RGBAImageType, DoubleRGBAImageType>(); +} + +/////////// UInt16RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<UInt16RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<UInt16RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<UInt16RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<UInt16RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<UInt16RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<UInt16RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<UInt16RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<UInt16RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<UInt16RGBAImageType, DoubleRGBAImageType>(); +} + +/////////// Int32RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<Int32RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<Int32RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<Int32RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<Int32RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<Int32RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<Int32RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<Int32RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<Int32RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<Int32RGBAImageType, DoubleRGBAImageType>(); +} + + +/////////// UInt32RGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<UInt32RGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<UInt32RGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<UInt32RGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<UInt32RGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<UInt32RGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<UInt32RGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<UInt32RGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<UInt32RGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<UInt32RGBAImageType, DoubleRGBAImageType>(); +} + +/////////// FloatRGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<FloatRGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<FloatRGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<FloatRGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<FloatRGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<FloatRGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<FloatRGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<FloatRGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<FloatRGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<FloatRGBAImageType, DoubleRGBAImageType>(); +} + +/////////// DoubleRGBAImageType->... +template <> Int8RGBAImageType * +InputImageParameter::CastImage<DoubleRGBAImageType, Int8RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, Int8RGBAImageType>(); +} + +template <> UInt8RGBAImageType * +InputImageParameter::CastImage<DoubleRGBAImageType, UInt8RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, UInt8RGBAImageType>(); +} + +template <> Int16RGBAImageType* +InputImageParameter::CastImage<DoubleRGBAImageType, Int16RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, Int16RGBAImageType>(); +} + +template <> UInt16RGBAImageType* +InputImageParameter::CastImage<DoubleRGBAImageType, UInt16RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, UInt16RGBAImageType>(); +} + +template <> Int32RGBAImageType* +InputImageParameter::CastImage<DoubleRGBAImageType, Int32RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, Int32RGBAImageType>(); +} + + +template <> UInt32RGBAImageType* +InputImageParameter::CastImage<DoubleRGBAImageType, UInt32RGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, UInt32RGBAImageType>(); +} + +template <> FloatRGBAImageType * +InputImageParameter::CastImage<DoubleRGBAImageType, FloatRGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, FloatRGBAImageType>(); +} + +template <> DoubleRGBAImageType * +InputImageParameter::CastImage<DoubleRGBAImageType, DoubleRGBAImageType>(){ + return this->SimpleCastImage<DoubleRGBAImageType, DoubleRGBAImageType>(); +} + + +/********************************************************************* +********************** Image -> VectorImage +**********************************************************************/ +/////////// Int8ImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int8ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int8ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int8ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int8ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int8ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int8ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int8ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int8ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<Int8ImageType, DoubleVectorImageType>(); +} + + +/////////// UInt8ImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt8ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt8ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt8ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt8ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt8ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt8ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt8ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt8ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<UInt8ImageType, DoubleVectorImageType>(); +} + +/////////// Int16ImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int16ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int16ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int16ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int16ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int16ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int16ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int16ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int16ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<Int16ImageType, DoubleVectorImageType>(); +} + +/////////// UInt16VectorImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt16ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt16ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt16ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt16ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt16ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt16ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt16ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt16ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<UInt16ImageType, DoubleVectorImageType>(); +} + +/////////// Int32ImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<Int32ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<Int32ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<Int32ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<Int32ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<Int32ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<Int32ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<Int32ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<Int32ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<Int32ImageType, DoubleVectorImageType>(); +} + + +/////////// UInt32ImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<UInt32ImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<UInt32ImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<UInt32ImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<UInt32ImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<UInt32ImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<UInt32ImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<UInt32ImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<UInt32ImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<UInt32ImageType, DoubleVectorImageType>(); +} + +/////////// FloatImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<FloatImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<FloatImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<FloatImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<FloatImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<FloatImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<FloatImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<FloatImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<FloatImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<FloatImageType, DoubleVectorImageType>(); +} + +/////////// DoubleImageType->... +template <> Int8VectorImageType * +InputImageParameter::CastImage<DoubleImageType, Int8VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, Int8VectorImageType>(); +} + +template <> UInt8VectorImageType * +InputImageParameter::CastImage<DoubleImageType, UInt8VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, UInt8VectorImageType>(); +} + +template <> Int16VectorImageType* +InputImageParameter::CastImage<DoubleImageType, Int16VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, Int16VectorImageType>(); +} + +template <> UInt16VectorImageType* +InputImageParameter::CastImage<DoubleImageType, UInt16VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, UInt16VectorImageType>(); +} + +template <> Int32VectorImageType* +InputImageParameter::CastImage<DoubleImageType, Int32VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, Int32VectorImageType>(); +} + + +template <> UInt32VectorImageType* +InputImageParameter::CastImage<DoubleImageType, UInt32VectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, UInt32VectorImageType>(); +} + +template <> FloatVectorImageType * +InputImageParameter::CastImage<DoubleImageType, FloatVectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, FloatVectorImageType>(); +} + +template <> DoubleVectorImageType * +InputImageParameter::CastImage<DoubleImageType, DoubleVectorImageType>(){ + return this->CastVectorImageFromImage<DoubleImageType, DoubleVectorImageType>(); +} + + + +void +InputImageParameter::SetImage(FloatVectorImageType* image) +{ + this->SetImage<FloatVectorImageType>( image ); +} + + +template <class TInputImage> +void +InputImageParameter::SetImage(TInputImage* image) +{ + m_Image = image; +} + + +bool +InputImageParameter::HasValue() const +{ + if( m_FileName.empty() && m_Image.IsNull() ) + return false; + else + return true; +} + +void +InputImageParameter::ClearValue() +{ + m_Image = ImageBaseType::New(); + m_Reader = NULL; + m_Caster = NULL; +} + + } } diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.h b/Code/ApplicationEngine/otbWrapperInputImageParameter.h index 5d06c8198e..6aa709047f 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageParameter.h +++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.h @@ -19,7 +19,7 @@ #define __otbWrapperInputImageParameter_h #include "otbImageFileReader.h" - +#include "itkImageBase.h" #include "otbWrapperParameter.h" namespace otb @@ -39,6 +39,8 @@ public: typedef itk::SmartPointer<Self> Pointer; typedef itk::SmartPointer<const Self> ConstPointer; + typedef itk::ImageBase<2> ImageBaseType; + /** Defining ::New() static method */ itkNewMacro(Self); @@ -47,17 +49,49 @@ public: /** Set value from filename */ void SetFromFileName(const std::string& filename); + itkGetConstMacro(FileName, std::string); - std::string GetFileName() const; + /** Get the input image as FloatVectorImageType */ + FloatVectorImageType* GetImage(); + + /** Get the input image as templated image type. */ + template <class TImageType> + TImageType* GetImage(); - FloatVectorImageType* GetImage() const; + template <class TOutputImage> + TOutputImage* GetImage(unsigned int typeIn); + /** Set a FloatVectorImageType image.*/ void SetImage(FloatVectorImageType* image); + /** Set a templated image.*/ + template <class TImageType> + void SetImage(TImageType* image); + + + /** Generic cast method that will be specified for each image type. */ + template <class TInputImage, class TOutputImage> + TOutputImage* CastImage() + { + itkExceptionMacro("Cast from "<<typeid(TInputImage).name()<<" to "<<typeid(TInputImage).name()<<" not authorized."); + } + + /** Cast an image to an image of the same type + * Image to Image, VectorImage to VectorImage, RGBAImage to RGBAImage. */ + template <class TInputImage, class TOutputImage> + TOutputImage* SimpleCastImage(); + + + /** Cast an image to a vector image. */ + template <class TInputImage, class TOutputImage> + TOutputImage* CastVectorImageFromImage(); + + bool HasValue() const; void ClearValue(); + protected: /** Constructor */ InputImageParameter(); @@ -65,10 +99,69 @@ protected: /** Destructor */ virtual ~InputImageParameter(); - FloatVectorImageType::Pointer m_Image; - - typedef otb::ImageFileReader<FloatVectorImageType> ImageFileReaderType; - ImageFileReaderType::Pointer m_Reader; + ImageBaseType::Pointer m_Image; + std::string m_FileName; + + + /** Readers typedefs */ + + typedef otb::ImageFileReader<Int8ImageType> Int8ReaderType; + typedef otb::ImageFileReader<UInt8ImageType> UInt8ReaderType; + typedef otb::ImageFileReader<Int16ImageType> Int16ReaderType; + typedef otb::ImageFileReader<UInt16ImageType> UInt16ReaderType; + typedef otb::ImageFileReader<Int32ImageType> Int32ReaderType; + typedef otb::ImageFileReader<UInt32ImageType> UInt32ReaderType; + typedef otb::ImageFileReader<FloatImageType> FloatReaderType; + typedef otb::ImageFileReader<DoubleImageType> DoubleReaderType; + + typedef otb::ImageFileReader<Int8VectorImageType> Int8VectorReaderType; + typedef otb::ImageFileReader<UInt8VectorImageType> UInt8VectorReaderType; + typedef otb::ImageFileReader<Int16VectorImageType> Int16VectorReaderType; + typedef otb::ImageFileReader<UInt16VectorImageType> UInt16VectorReaderType; + typedef otb::ImageFileReader<Int32VectorImageType> Int32VectorReaderType; + typedef otb::ImageFileReader<UInt32VectorImageType> UInt32VectorReaderType; + typedef otb::ImageFileReader<FloatVectorImageType> FloatVectorReaderType; + typedef otb::ImageFileReader<DoubleVectorImageType> DoubleVectorReaderType; + + typedef otb::ImageFileReader<Int8RGBAImageType> Int8RGBAReaderType; + typedef otb::ImageFileReader<UInt8RGBAImageType> UInt8RGBAReaderType; + typedef otb::ImageFileReader<Int16RGBAImageType> Int16RGBAReaderType; + typedef otb::ImageFileReader<UInt16RGBAImageType> UInt16RGBAReaderType; + typedef otb::ImageFileReader<Int32RGBAImageType> Int32RGBAReaderType; + typedef otb::ImageFileReader<UInt32RGBAImageType> UInt32RGBAReaderType; + typedef otb::ImageFileReader<FloatRGBAImageType> FloatRGBAReaderType; + typedef otb::ImageFileReader<DoubleRGBAImageType> DoubleRGBAReaderType; + +/* + Int8ReaderType::Pointer m_Int8Reader; + UInt8ReaderType::Pointer m_UInt8Reader; + Int16ReaderType::Pointer m_Int16Reader; + UInt16ReaderType::Pointer m_UInt16Reader; + Int32ReaderType::Pointer m_Int32Reader; + UInt32ReaderType::Pointer m_UInt32Reader; + FloatReaderType::Pointer m_FloatReader; + DoubleReaderType::Pointer m_DoubleReader; + + VectorInt8ReaderType::Pointer m_VectorInt8Reader; + VectorUInt8ReaderType::Pointer m_VectorUInt8Reader; + VectorInt16ReaderType::Pointer m_VectorInt16Reader; + VectorUInt16ReaderType::Pointer m_VectorUInt16Reader; + VectorInt32ReaderType::Pointer m_VectorInt32Reader; + VectorUInt32ReaderType::Pointer m_VectorUInt32Reader; + VectorFloatReaderType::Pointer m_VectorFloatReader; + VectorDoubleReaderType::Pointer m_VectorDoubleReader; + + RGBAInt8ReaderType::Pointer m_RGBAInt8Reader; + RGBAUInt8ReaderType::Pointer m_RGBAUInt8Reader; + RGBAInt16ReaderType::Pointer m_RGBAInt16Reader; + RGBAUInt16ReaderType::Pointer m_RGBAUInt16Reader; + RGBAInt32ReaderType::Pointer m_RGBAInt32Reader; + RGBAUInt32ReaderType::Pointer m_RGBAUInt32Reader; + RGBAFloatReaderType::Pointer m_RGBAFloatReader; + RGBADoubleReaderType::Pointer m_RGBADoubleReader; +*/ + itk::ProcessObject * m_Reader; + itk::ProcessObject * m_Caster; private: InputImageParameter(const Parameter &); //purposely not implemented -- GitLab