From db841d161f0eb039b6bf7488ef235bcd7c02e2d5 Mon Sep 17 00:00:00 2001 From: Julien Michel <julien.michel@orfeo-toolbox.org> Date: Mon, 14 Jun 2010 17:18:17 +0200 Subject: [PATCH] BUG: Adding a TFilterPrecision template parameter so that the type of the convolution filter does not depend on the type of the input pixel real numeric traits --- Code/BasicFilters/otbConvolutionImageFilter.h | 6 ++++-- Code/BasicFilters/otbConvolutionImageFilter.txx | 16 ++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Code/BasicFilters/otbConvolutionImageFilter.h b/Code/BasicFilters/otbConvolutionImageFilter.h index da0db56ed9..8fb1048698 100644 --- a/Code/BasicFilters/otbConvolutionImageFilter.h +++ b/Code/BasicFilters/otbConvolutionImageFilter.h @@ -59,7 +59,8 @@ namespace otb * \ingroup MultiThreaded */ template <class TInputImage, class TOutputImage, class TBoundaryCondition = - itk::ZeroFluxNeumannBoundaryCondition<TInputImage> > + itk::ZeroFluxNeumannBoundaryCondition<TInputImage>, + class TFilterPrecision = typename itk::NumericTraits<typename TInputImage::InternalPixelType>::RealType > class ITK_EXPORT ConvolutionImageFilter : public itk::ImageToImageFilter<TInputImage, TOutputImage> { @@ -93,7 +94,8 @@ public: typedef typename InputImageType::RegionType InputImageRegionType; typedef typename OutputImageType::RegionType OutputImageRegionType; typedef typename InputImageType::SizeType InputSizeType; - typedef typename itk::Array<InputRealType> ArrayType; + typedef TFilterPrecision FilterPrecisionType; + typedef typename itk::Array<FilterPrecisionType> ArrayType; typedef TBoundaryCondition BoundaryConditionType; /** Set the radius of the neighborhood of the filter */ diff --git a/Code/BasicFilters/otbConvolutionImageFilter.txx b/Code/BasicFilters/otbConvolutionImageFilter.txx index 122d991136..85c1fe94f1 100644 --- a/Code/BasicFilters/otbConvolutionImageFilter.txx +++ b/Code/BasicFilters/otbConvolutionImageFilter.txx @@ -32,8 +32,8 @@ namespace otb { -template <class TInputImage, class TOutputImage, class TBoundaryCondition> -ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> +template <class TInputImage, class TOutputImage, class TBoundaryCondition, class TFilterPrecision> +ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition, TFilterPrecision> ::ConvolutionImageFilter() { m_Radius.Fill(1); @@ -42,9 +42,9 @@ ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> m_NormalizeFilter = false; } -template <class TInputImage, class TOutputImage, class TBoundaryCondition> +template <class TInputImage, class TOutputImage, class TBoundaryCondition, class TFilterPrecision> void -ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> +ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition, TFilterPrecision> ::GenerateInputRequestedRegion() throw (itk::InvalidRequestedRegionError) { // call the superclass' implementation of this method @@ -93,9 +93,9 @@ ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> } } -template<class TInputImage, class TOutputImage, class TBoundaryCondition> +template<class TInputImage, class TOutputImage, class TBoundaryCondition, class TFilterPrecision> void -ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> +ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition, TFilterPrecision> ::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId) { @@ -158,9 +158,9 @@ ConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition> /** * Standard "PrintSelf" method */ -template <class TInputImage, class TOutput, class TBoundaryCondition> +template <class TInputImage, class TOutput, class TBoundaryCondition, class TFilterPrecision> void -ConvolutionImageFilter<TInputImage, TOutput, TBoundaryCondition> +ConvolutionImageFilter<TInputImage, TOutput, TBoundaryCondition, TFilterPrecision> ::PrintSelf(std::ostream& os, itk::Indent indent) const { Superclass::PrintSelf(os, indent); -- GitLab