Commit b323ae23 authored by Rashad Kanavath's avatar Rashad Kanavath

Merge branches 'app_domain_transform' and 'develop' of...

Merge branches 'app_domain_transform' and 'develop' of https://git.orfeo-toolbox.org/git/otb into develop
parents 2dc3ad09 aea415a3
project(OTBAppDomainTransform)
otb_module_impl()
otb_create_application(
NAME DomainTransform
SOURCES otbDomainTransform.cxx
LINK_LIBRARIES ${${otb-module}_LIBRARIES})
set(DOCUMENTATION "TODO")
otb_module(OTBAppDomainTransform
DEPENDS
OTBWavelet
OTBApplicationEngine
TEST_DEPENDS
OTBTestKernel
OTBCommandLine
DESCRIPTION
"${DOCUMENTATION}"
)
......@@ -83,7 +83,7 @@ SubsampleImageFilter<TInputImage, TOutputImage, TDirectionOfTransformation>
{
Superclass::CallCopyOutputRegionToInputRegion(destRegion, srcRegion);
if (static_cast<int>(DirectionOfTransformation) == Wavelet::INVERSE)
if (DirectionOfTransformation == Wavelet::INVERSE)
{
typename OutputImageRegionType::IndexType srcIndex = srcRegion.GetIndex();
typename OutputImageRegionType::SizeType srcSize = srcRegion.GetSize();
......@@ -112,7 +112,7 @@ SubsampleImageFilter<TInputImage, TOutputImage, TDirectionOfTransformation>
{
Superclass::CallCopyInputRegionToOutputRegion(destRegion, srcRegion);
if (static_cast<int>(DirectionOfTransformation) == Wavelet::INVERSE)
if (DirectionOfTransformation == Wavelet::INVERSE)
{
typename InputImageRegionType::IndexType srcIndex = srcRegion.GetIndex();
typename InputImageRegionType::SizeType srcSize = srcRegion.GetSize();
......@@ -161,8 +161,7 @@ SubsampleImageFilter<TInputImage, TOutputImage, TDirectionOfTransformation>
SubsampledImageRegionConstIterator<InputImageType> inputIter
(this->GetInput(), inputRegionForThread);
if (static_cast<int>(itkGetStaticConstMacro(DirectionOfTransformation))
== static_cast<int>(Wavelet::FORWARD))
if (DirectionOfTransformation == Wavelet::FORWARD)
{
inputIter.SetSubsampleFactor(GetSubsampleFactor());
inputIter.GoToBegin();
......
......@@ -399,6 +399,11 @@ protected:
WaveletFilterBank();
~WaveletFilterBank() ITK_OVERRIDE {}
void VerifyInputInformation() ITK_OVERRIDE
{
}
/** GenerateOutputInformation
* Set the size of the output image depending on the decimation factor
* Copy information from the input image if existing.
......
......@@ -27,9 +27,6 @@
#include "itkPeriodicBoundaryCondition.h"
// FIXME
#define __myDebug__ 0
namespace otb {
/**
......@@ -66,11 +63,9 @@ WaveletFilterBank<TInputImage, TOutputImage, TWaveletOperator, Wavelet::FORWARD>
if (GetSubsampleImageFactor() == 1) return;
#if __myDebug__
otbGenericMsgDebugMacro(<< " down sampling output regions by a factor of " << GetSubsampleImageFactor());
otbGenericMsgDebugMacro(<< "initial region " << this->GetInput()->GetLargestPossibleRegion().GetSize()[0]
<< "," << this->GetInput()->GetLargestPossibleRegion().GetSize()[1]);
#endif
OutputImageRegionType newRegion;
this->CallCopyInputRegionToOutputRegion(newRegion, this->GetInput()->GetLargestPossibleRegion());
......@@ -80,9 +75,8 @@ WaveletFilterBank<TInputImage, TOutputImage, TWaveletOperator, Wavelet::FORWARD>
this->GetOutput(i)->SetRegions(newRegion);
}
#if __myDebug__
otbGenericMsgDebugMacro(<< "new region output " << newRegion.GetSize()[0] << "," << newRegion.GetSize()[1]);
#endif
}
template <class TInputImage, class TOutputImage, class TWaveletOperator>
......@@ -642,21 +636,18 @@ WaveletFilterBank<TInputImage, TOutputImage, TWaveletOperator, Wavelet::INVERSE>
}
}
#if __myDebug__
otbGenericMsgDebugMacro(<< " up sampling output regions by a factor of " << GetSubsampleImageFactor());
otbGenericMsgDebugMacro(<< "initial region "
<< this->GetInput(0)->GetLargestPossibleRegion().GetSize()[0]
<< "," << this->GetInput(0)->GetLargestPossibleRegion().GetSize()[1]);
#endif
OutputImageRegionType newRegion;
this->CallCopyInputRegionToOutputRegion(newRegion, this->GetInput(0)->GetLargestPossibleRegion());
this->GetOutput()->SetRegions(newRegion);
#if __myDebug__
otbGenericMsgDebugMacro(<< "new region output " << newRegion.GetSize()[0] << "," << newRegion.GetSize()[1]);
#endif
}
template <class TInputImage, class TOutputImage, class TWaveletOperator>
......
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbWaveletImageFilter_h
#define otbWaveletImageFilter_h
#include "otbWaveletOperator.h"
#include "otbWaveletFilterBank.h"
#include "otbWaveletTransform.h"
#include "otbWaveletsBandsListToWaveletsSynopsisImageFilter.h"
namespace otb {
/** \class WaveletImageFilter
* \brief
*
* \ingroup OTBWavelet
* \sa WaveletInverseImageFilter
*/
template < class TInputImage,
class TOutputImage,
Wavelet::Wavelet TMotherWaveletOperator >
class WaveletImageFilter :
public itk::ImageToImageFilter< TInputImage, TOutputImage >
{
public:
/** Standard class typedefs. */
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
itkStaticConstMacro( ImageDimension, unsigned int, InputImageType::ImageDimension );
itkStaticConstMacro( MotherWaveletOperator, short, TMotherWaveletOperator );
itkStaticConstMacro( DirectionOfTransformation, short, otb::Wavelet::FORWARD );
typedef WaveletImageFilter<InputImageType,OutputImageType, TMotherWaveletOperator> Self;
typedef itk::ImageToImageFilter<InputImageType, OutputImageType> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef typename InputImageType::PixelType InputPixelType;
typedef otb::WaveletOperator< TMotherWaveletOperator, otb::Wavelet::FORWARD, InputPixelType, ImageDimension >
WaveletOperatorType;
typedef otb::WaveletFilterBank< InputImageType, InputImageType, WaveletOperatorType, otb::Wavelet::FORWARD >
FilterBankType;
typedef otb::WaveletTransform< InputImageType, InputImageType, FilterBankType, otb::Wavelet::FORWARD >
WaveletTransformFilterType;
typedef typename WaveletTransformFilterType::Pointer
WaveletTransformFilterPointerType;
typedef typename WaveletTransformFilterType::OutputImageListType
WaveletTransformFilterOutputImageListType;
typedef otb::WaveletsBandsListToWaveletsSynopsisImageFilter<WaveletTransformFilterOutputImageListType, OutputImageType>
WaveletBandsListToWaveletsSynopsisImageFilterType;
typedef typename WaveletBandsListToWaveletsSynopsisImageFilterType::Pointer
WaveletBandsListToWaveletsSynopsisImageFilterPointerType;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(WaveletImageFilter, ImageToImageFilter);
itkGetMacro(NumberOfDecompositions,unsigned int);
itkSetMacro(NumberOfDecompositions,unsigned int);
protected:
WaveletImageFilter();
virtual ~WaveletImageFilter();
virtual void GenerateInputRequestedRegion();
virtual void GenerateData();
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
private:
WaveletImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
WaveletTransformFilterPointerType m_WaveletTransform;
WaveletBandsListToWaveletsSynopsisImageFilterPointerType m_WaveletBandsListToWaveletsSynopsis;
unsigned int m_NumberOfDecompositions;
};
}
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbWaveletImageFilter.txx"
#endif
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbWaveletImageFilter_txx
#define otbWaveletImageFilter_txx
#include "otbWaveletImageFilter.h"
namespace otb
{
/** Constructor */
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
WaveletImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::WaveletImageFilter() : m_NumberOfDecompositions(2)
{
m_WaveletTransform = WaveletTransformFilterType::New();
m_WaveletTransform->SetSubsampleImageFactor(2);
m_WaveletBandsListToWaveletsSynopsis = WaveletBandsListToWaveletsSynopsisImageFilterType::New();
// Force to use a unique thread otherwise there is a bug on Mac
//m_WaveletBandsListToWaveletsSynopsis->SetNumberOfThreads(1);
m_WaveletBandsListToWaveletsSynopsis->SetInput( m_WaveletTransform->GetOutput() );
}
/** Destructor */
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
WaveletImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::~WaveletImageFilter()
{
}
/**
* GenerateInputRequestedRegion
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::GenerateInputRequestedRegion(void)
{
// call the superclass' implementation of this method
Superclass::GenerateInputRequestedRegion();
// get pointers to the inputs
typename InputImageType::Pointer input =
const_cast<InputImageType *> (this->GetInput());
if ( !input )
{
return;
}
input->SetRequestedRegionToLargestPossibleRegion();
}
/**
* Main computation method
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::GenerateData()
{
m_WaveletTransform->SetInput( this->GetInput() );
m_WaveletTransform->SetNumberOfDecompositions( m_NumberOfDecompositions );
m_WaveletBandsListToWaveletsSynopsis->GraftOutput( this->GetOutput() );
m_WaveletBandsListToWaveletsSynopsis->Update();
this->GraftOutput( m_WaveletBandsListToWaveletsSynopsis->GetOutput() );
}
/**
* PrintSelf Method
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::PrintSelf(std::ostream& os, itk::Indent indent) const
{
Superclass::PrintSelf(os, indent);
}
}
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbWaveletInverseImageFilter_h
#define otbWaveletInverseImageFilter_h
#include "otbWaveletOperator.h"
#include "otbWaveletFilterBank.h"
#include "otbWaveletTransform.h"
#include "otbWaveletsSynopsisImageToWaveletsBandsListFilter.h"
namespace otb {
/** \class WaveletInverseImageFilter
* \brief
*
* \ingroup OTBWavelet
* \sa WaveletImageFilter
*/
template < class TInputImage,
class TOutputImage,
Wavelet::Wavelet TMotherWaveletOperator >
class WaveletInverseImageFilter :
public itk::ImageToImageFilter< TInputImage, TOutputImage >
{
public:
/** Standard class typedefs. */
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
itkStaticConstMacro( ImageDimension, unsigned int, InputImageType::ImageDimension );
itkStaticConstMacro( MotherWaveletOperator, short, TMotherWaveletOperator );
itkStaticConstMacro( DirectionOfTransformation, short , otb::Wavelet::FORWARD );
typedef WaveletInverseImageFilter<InputImageType,OutputImageType, TMotherWaveletOperator> Self;
typedef itk::ImageToImageFilter<InputImageType, OutputImageType> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef typename InputImageType::PixelType InputPixelType;
typedef typename OutputImageType::PixelType OutputPixelType;
typedef otb::WaveletOperator< TMotherWaveletOperator, otb::Wavelet::INVERSE, OutputPixelType, ImageDimension >
WaveletOperatorType;
typedef otb::WaveletFilterBank< OutputImageType, OutputImageType, WaveletOperatorType, otb::Wavelet::INVERSE >
FilterBankType;
typedef otb::WaveletTransform< OutputImageType, OutputImageType, FilterBankType, otb::Wavelet::INVERSE >
WaveletInverseTransformFilterType;
typedef typename WaveletInverseTransformFilterType::Pointer
WaveletInverseTransformFilterPointerType;
typedef otb::WaveletsSynopsisImageToWaveletsBandsListFilter<InputImageType, typename WaveletInverseTransformFilterType::InputImageListType>
WaveletsSynopsisImageToWaveletsBandsListFilterType;
typedef typename WaveletsSynopsisImageToWaveletsBandsListFilterType::Pointer
WaveletsSynopsisImageToWaveletsBandsListFilterPointerType;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(WaveletInverseImageFilter, ImageToImageFilter);
itkGetMacro(NumberOfDecompositions,unsigned int);
itkSetMacro(NumberOfDecompositions,unsigned int);
/** If the filter is modified, the internal filters need to be modified too */
virtual void Modified() const;
protected:
WaveletInverseImageFilter();
virtual ~WaveletInverseImageFilter();
virtual void GenerateInputRequestedRegion();
virtual void GenerateData();
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
private:
WaveletInverseImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
WaveletsSynopsisImageToWaveletsBandsListFilterPointerType m_SynopsisImageToWaveletsBandsList;
WaveletInverseTransformFilterPointerType m_WaveletTransform;
unsigned int m_NumberOfDecompositions;
};
}
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbWaveletInverseImageFilter.txx"
#endif
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __otbWaveletInverseImageFilter_txx
#define __otbWaveletInverseImageFilter_txx
#include "otbWaveletInverseImageFilter.h"
namespace otb
{
/** Constructor */
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::WaveletInverseImageFilter() : m_NumberOfDecompositions(2)
{
m_SynopsisImageToWaveletsBandsList = WaveletsSynopsisImageToWaveletsBandsListFilterType::New();
//m_SynopsisImageToWaveletsBandsList->SetNumberOfThreads(1);
m_SynopsisImageToWaveletsBandsList->SetDecimationRatio(2);
m_WaveletTransform = WaveletInverseTransformFilterType::New();
m_WaveletTransform->SetSubsampleImageFactor(2);
m_WaveletTransform->SetInput( m_SynopsisImageToWaveletsBandsList->GetOutput() );
}
/** Destructor */
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::~WaveletInverseImageFilter()
{
}
/** Destructor */
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::Modified() const
{
Superclass::Modified();
m_SynopsisImageToWaveletsBandsList->Modified();
m_WaveletTransform->Modified();
}
/**
* GenerateInputRequestedRegion
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::GenerateInputRequestedRegion(void)
{
// call the superclass' implementation of this method
Superclass::GenerateInputRequestedRegion();
// get pointers to the inputs
typename InputImageType::Pointer input =
const_cast<InputImageType *> (this->GetInput());
if ( !input )
{
return;
}
input->SetRequestedRegionToLargestPossibleRegion();
}
/**
* Main computation method
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::GenerateData()
{
m_SynopsisImageToWaveletsBandsList->SetInput( this->GetInput() );
m_SynopsisImageToWaveletsBandsList->SetNumberOfLevels( m_NumberOfDecompositions );
m_WaveletTransform->GraftOutput( this->GetOutput() );
m_WaveletTransform->Update();
this->GraftOutput( m_WaveletTransform->GetOutput() );
}
/**
* PrintSelf Method
*/
template <class TInputImage, class TOutputImage, Wavelet::Wavelet TMotherWaveletOperator>
void
WaveletInverseImageFilter<TInputImage, TOutputImage, TMotherWaveletOperator>
::PrintSelf(std::ostream& os, itk::Indent indent) const
{
Superclass::PrintSelf(os, indent);
}
}
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbWaveletsBandsListToWaveletsSynopsisImageFilter_h
#define otbWaveletsBandsListToWaveletsSynopsisImageFilter_h
#include "otbImageListToImageFilter.h"
namespace otb
{
/** \class WaveletsBandsListToWaveletsSynopsisImageFilter
* \brief Converts a list of wavelets bands to the traditionnal multi-resolution wavelets view
*
* The decimation ratio is taken into account.
*
* \ingroup Streamed, Threaded
*/
template <class TImageList, class TImage>
class ITK_EXPORT WaveletsBandsListToWaveletsSynopsisImageFilter
: public ImageListToImageFilter<typename TImageList::ImageType, TImage>
{
public:
/** Standard typedefs */
typedef WaveletsBandsListToWaveletsSynopsisImageFilter Self;
typedef ImageListToImageFilter<
typename TImageList::ImageType,TImage> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Type macro */
itkNewMacro(Self);
/** Useful typedefs */
typedef TImageList InputImageListType;
typedef typename InputImageListType::ImageType InputImageType;
typedef TImage OutputImageType;
typedef typename OutputImageType::RegionType RegionType;
/** Creation through object factory macro */
itkTypeMacro(WaveletsBandsListToWaveletsSynopsisImageFilter,ImageToImageListFilter);
/** Set the decimation ratio */
itkSetMacro(DecimationRatio,unsigned int);
/** Get the decimation ratio */
itkGetMacro(DecimationRatio,unsigned int);
protected:
/** Main computation method */
virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
/** GenerateOutputInformation
* Set the number of bands of the output.
* Copy informations from the first image of the list if existing.
**/
virtual void GenerateOutputInformation(void);
/**
* GenerateInputRequestedRegion
* Set the requested region of each image in the list.
*/
virtual void GenerateInputRequestedRegion(void);
/** Constructor */
WaveletsBandsListToWaveletsSynopsisImageFilter();
/** Destructor */
virtual ~WaveletsBandsListToWaveletsSynopsisImageFilter();
/**PrintSelf method */
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
private:
WaveletsBandsListToWaveletsSynopsisImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
/** The decimation ratio used in the decomposition */
unsigned int m_DecimationRatio;
};
}// End namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbWaveletsBandsListToWaveletsSynopsisImageFilter.txx"
#endif
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbWaveletsBandsListToWaveletsSynopsisImageFilter_txx
#define otbWaveletsBandsListToWaveletsSynopsisImageFilter_txx
#include "otbWaveletsBandsListToWaveletsSynopsisImageFilter.h"
#include "itkImageRegionIterator.h"
#include "itkImageRegionConstIterator.h"
#include "otbMacro.h"
#include "itkProgressReporter.h"
namespace otb
{
/** Constructor */
template <class TImageList, class TImage>
WaveletsBandsListToWaveletsSynopsisImageFilter<TImageList,TImage>
::WaveletsBandsListToWaveletsSynopsisImageFilter() : m_DecimationRatio(2)
{}
/** Destructor */
template <class TImageList, class TImage>
WaveletsBandsListToWaveletsSynopsisImageFilter<TImageList,TImage>
::~WaveletsBandsListToWaveletsSynopsisImageFilter()
{}
/**
* GenerateOutputInformation
*/
template <class TImageList, class TImage>
void
WaveletsBandsListToWaveletsSynopsisImageFilter<TImageList,TImage>
::GenerateOutputInformation(void)
{
// We must set the size of the output image to be twice the size of the last image
// of the image list, which is the first band.
if(this->GetOutput())
{
if (this->GetInput()->Size()>0)
{
// Retrieve the largest band
typename InputImageType::Pointer lastBand = this->GetInput()->Back();
// Retrieve the region of the largest band
RegionType largestBandRegion = lastBand->GetLargestPossibleRegion();
// Retrieve the size of the largest region
typename RegionType::SizeType outputSize = largestBandRegion.GetSize();
// Multiply this size by two
outputSize[0]*=m_DecimationRatio;
outputSize[1]*=m_DecimationRatio;