From c630acb538125d374ab52b6d180eeeb0933beec6 Mon Sep 17 00:00:00 2001 From: Aurelien Bricier <aurelien.bricier@c-s.fr> Date: Tue, 9 Nov 2010 13:44:56 +0100 Subject: [PATCH] ENH: added Histogramm support to otbImageFunctionAdaptor --- .../Common/otbVariableLengthVectorConverter.h | 13 ++++++----- .../otbVariableLengthVectorConverter.txx | 23 ++++++++++++------- .../otbImageFunctionAdaptor.cxx | 4 ++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Code/Common/otbVariableLengthVectorConverter.h b/Code/Common/otbVariableLengthVectorConverter.h index fac00cf55e..f1a0c43f51 100644 --- a/Code/Common/otbVariableLengthVectorConverter.h +++ b/Code/Common/otbVariableLengthVectorConverter.h @@ -24,6 +24,7 @@ #include "itkExceptionObject.h" #include "itkFixedArray.h" #include "itkHistogram.h" +#include "itkSmartPointer.h" namespace otb @@ -207,9 +208,9 @@ private: //Histogram template< class TMeasurement, unsigned int VMeasurementVectorSize, class TFrequencyContainer, class TPrecisionType > -class ITK_EXPORT VariableLengthVectorConverter<itk::Statistics::Histogram<TMeasurement, - VMeasurementVectorSize, - TFrequencyContainer>, +class ITK_EXPORT VariableLengthVectorConverter<typename itk::SmartPointer< const itk::Statistics::Histogram<TMeasurement, + VMeasurementVectorSize, + TFrequencyContainer> >, TPrecisionType> : public itk::ProcessObject { @@ -228,9 +229,9 @@ public: typedef TPrecisionType OutputPrecisionType; typedef typename itk::VariableLengthVector<OutputPrecisionType> OutputType; - typedef typename itk::Statistics::Histogram<TMeasurement, - VMeasurementVectorSize, - TFrequencyContainer> InputType; + typedef typename itk::SmartPointer< const itk::Statistics::Histogram<TMeasurement, + VMeasurementVectorSize, + TFrequencyContainer> > InputType; OutputType Convert(InputType input); diff --git a/Code/Common/otbVariableLengthVectorConverter.txx b/Code/Common/otbVariableLengthVectorConverter.txx index 16a84fd82a..42931131a5 100644 --- a/Code/Common/otbVariableLengthVectorConverter.txx +++ b/Code/Common/otbVariableLengthVectorConverter.txx @@ -107,21 +107,28 @@ VariableLengthVectorConverter< itk::FixedArray<TInternalInputType, VArrayDimensi // Histogram template< class TMeasurement, unsigned int VMeasurementVectorSize, class TFrequencyContainer, class TPrecisionType > -typename VariableLengthVectorConverter< itk::Statistics::Histogram<TMeasurement, VMeasurementVectorSize, TFrequencyContainer>, TPrecisionType> +typename VariableLengthVectorConverter< itk::SmartPointer< const itk::Statistics::Histogram<TMeasurement, + VMeasurementVectorSize, + TFrequencyContainer> >, + TPrecisionType> ::OutputType -VariableLengthVectorConverter< itk::Statistics::Histogram<TMeasurement, VMeasurementVectorSize, TFrequencyContainer>, TPrecisionType> +VariableLengthVectorConverter< itk::SmartPointer<const itk::Statistics::Histogram<TMeasurement, + VMeasurementVectorSize, + TFrequencyContainer> >, + TPrecisionType> ::Convert(InputType input) { - unsigned int nbBins, rsltIdx = 0; + unsigned int rsltIdx = 0; + itk::Size<1> nbBins; OutputType result; - nbBins = input.GetSize(); - - result.SetSize(nbBins); + nbBins[0] = input->GetSize()[0]; + + result.SetSize(nbBins[0]); - for (unsigned int i=0; i<nbBins; i++) + for (unsigned int i=0; i<nbBins[0]; i++) { - result[rsltIdx] = static_cast<OutputPrecisionType>(input.GetFrequency(i)); + result[rsltIdx] = static_cast<OutputPrecisionType>(input->GetFrequency(i)); rsltIdx ++; } diff --git a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx index 2169f78968..2f7fc61774 100644 --- a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx +++ b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx @@ -266,7 +266,7 @@ int otbImageFunctionAdaptor(int argc, char * argv[]) << "\t - resultRaM : " << resultRaM[i] << std::endl; rsltIdx ++; } -/* + LHFunction->SetInputImage(reader->GetOutput()); LHFunction->SetNeighborhoodRadius(5); LHFunction->SetNumberOfHistogramBins(64); @@ -290,7 +290,7 @@ int otbImageFunctionAdaptor(int argc, char * argv[]) << "\t - resultLH : " << resultLH->GetFrequency(i) << std::endl; rsltIdx ++; } - */ + error = vcl_sqrt(error); std::cout << std::endl << "Error : " << error << std::endl << std::endl; -- GitLab