Commit 42dbad6e authored by Aurélien Bricier's avatar Aurélien Bricier

ENH: added DSValidatedVectorDataFilter RoadDescriptionVectorData (work in progress)

parent 8d63c596
/*=========================================================================
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 __otbVectorDataToDSValidatedVectorDataFilter_h
#define __otbVectorDataToDSValidatedVectorDataFilter_h
#include "otbMassOfBelief.h"
#include "otbVectorDataToVectorDataFilter.h"
#include "itkPreOrderTreeIterator.h"
#include "otbVectorData.h"
#include "otbFuzzyVariable.h"
#include "otbJointMassOfBeliefFilter.h"
#include "otbParser.h"
namespace otb
{
/** \class VectorDataToVectorDataFilter
* \brief .
*
*
*
* \ingroup VectorDataFilter
* \sa VectorDataToRoadDescriptionFilter
* \sa VectorDataToBuildingDescriptionFilter
*/
template <class TVectorData, class TPrecision=float>
class ITK_EXPORT VectorDataToDSValidatedVectorDataFilter :
public otb::VectorDataToVectorDataFilter<TVectorData, TVectorData>
{
public:
/** Standard class typedefs. */
typedef VectorDataToDSValidatedVectorDataFilter Self;
typedef VectorDataToVectorDataFilter<TVectorData,
TVectorData> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(VectorDataToDSValidatedVectorDataFilter, VectorDataToVectorDataFilter);
/** Some typedefs. */
typedef TVectorData VectorDataType;
typedef typename VectorDataType::Pointer VectorDataPointer;
typedef typename VectorDataType::DataNodeType DataNodeType;
typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType>
TreeIteratorType;
typedef TPrecision PrecisionType;
typedef FuzzyVariable<std::string, PrecisionType> FuzzyVarType;
typedef MassOfBelief<std::string, PrecisionType>
MassOfBeliefFunctionType;
typedef typename MassOfBeliefFunctionType::LabelSetType
LabelSetType;
typedef JointMassOfBeliefFilter<MassOfBeliefFunctionType>
JointMassOfBeliefFilterType;
typedef Parser ParserType;
typedef itk::DataObject::Pointer DataObjectPointer;
typedef itk::DataObject DataObject;
/** Descriptor model accessors. */
virtual void AddDescriptor(std::string key, std::vector<double> model);
virtual void ClearDescriptors();
/** Parameter accessors. */
itkGetConstMacro(CriterionFormula, std::string);
itkSetMacro(CriterionFormula, std::string);
itkGetConstMacro(CriterionThreshold, double);
itkSetMacro(CriterionThreshold, double);
/*
itkGetConstMacro(Hypothesis, LabelSetType);
itkSetMacro(Hypothesis, LabelSetType);
*/
LabelSetType GetHypothesis()
{
return m_Hypothesis;
}
void SetHypothesis(LabelSetType hypothesis)
{
m_Hypothesis = hypothesis;
}
protected:
/** Triggers the Computation */
void GenerateData(void);
/** Constructor */
VectorDataToDSValidatedVectorDataFilter();
/** Destructor */
virtual ~VectorDataToDSValidatedVectorDataFilter() {}
/**PrintSelf method */
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
private:
VectorDataToDSValidatedVectorDataFilter(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
// Descriptor bench
std::vector< std::pair<std::string, std::vector<double> > >
m_DescriptorModels;
std::vector< typename FuzzyVarType::Pointer > m_FuzzyVars;
LabelSetType m_Universe, m_Hypothesis;
double m_Bel, m_Plau;
typename ParserType::Pointer m_Parser;
std::string m_CriterionFormula;
double m_CriterionThreshold;
};
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbVectorDataToDSValidatedVectorDataFilter.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 __otbVectorDataToDSValidatedVectorDataFilter_txx
#define __otbVectorDataToDSValidatedVectorDataFilter_txx
#include "otbVectorDataToDSValidatedVectorDataFilter.h"
#include "otbMassOfBelief.h"
#include <iostream>
namespace otb
{
// Constructor
template <class TVectorData, class TPrecision>
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::VectorDataToDSValidatedVectorDataFilter() :
m_CriterionFormula("(Belief + Plausibility)/2"),
m_CriterionThreshold(0.5)
{
this->SetNumberOfRequiredInputs(1);
//Default road descriptors
std::vector<double> ndvi, radiom, lsd, shadow;
ndvi.push_back(0.25); ndvi.push_back(0.5);ndvi.push_back(0.75); ndvi.push_back(0.99);
radiom.push_back(0.25); radiom.push_back(0.5); radiom.push_back(0.75); radiom.push_back(0.90);
lsd.push_back(0.25); lsd.push_back(0.5); lsd.push_back(0.75); lsd.push_back(0.96);
shadow.push_back(0.25); shadow.push_back(0.5); shadow.push_back(0.75); shadow.push_back(0.98);
AddDescriptor("NDVI", ndvi);
AddDescriptor("RADIOM", radiom);
AddDescriptor("LSD", lsd);
//AddDescriptor("SHADOW", shadow);
m_Parser = ParserType::New();
//m_Hypothesis.insert("NDVI");
}
template <class TVectorData, class TPrecision>
void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::AddDescriptor(std::string key, std::vector<double> model)
{
m_DescriptorModels.push_back(std::pair<std::string,std::vector<double> >(key, model));
}
template <class TVectorData, class TPrecision>
void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::ClearDescriptors()
{
m_DescriptorModels.clear();
}
template <class TVectorData, class TPrecision>
void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::GenerateData()
{
//Initialize Dempster Shafer tools
if( m_DescriptorModels.size() == 0 )
itkExceptionMacro(<< "No defined Descriptor. Please add a descriptor model.");
for (unsigned int i=0; i<m_DescriptorModels.size(); i++)
{
typename FuzzyVarType::Pointer fuz = FuzzyVarType::New();
std::string fuzName, fuzName_;
fuzName = m_DescriptorModels[i].first;
fuzName_ = m_DescriptorModels[i].first + "_";
fuz->SetMembership(fuzName,
0.0,
0.0,
m_DescriptorModels[i].second[0],
m_DescriptorModels[i].second[1],
0.0,
m_DescriptorModels[i].second[3]);
fuz->SetMembership(fuzName_,
m_DescriptorModels[i].second[1],
m_DescriptorModels[i].second[2],
1.0,
1.0,
0.0,
m_DescriptorModels[i].second[3]);
m_FuzzyVars.push_back(fuz);
m_Universe.insert(fuzName);
m_Universe.insert(fuzName_);
}
//Initialize parser
std::cout << m_CriterionFormula << std::endl;
m_Parser->SetExpr(m_CriterionFormula);
m_Parser->DefineVar("Belief", &m_Bel);
m_Parser->DefineVar("Plausibility", &m_Plau);
// Output
this->GetOutput(0)->SetMetaDataDictionary(this->GetInput()->GetMetaDataDictionary());
// Retrieving root node
typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get();
// Create the document node
typename DataNodeType::Pointer document = DataNodeType::New();
document->SetNodeType(otb::DOCUMENT);
// Adding the layer to the data tree
this->GetOutput(0)->GetDataTree()->Add(document, root);
// Create the folder node
typename DataNodeType::Pointer folder = DataNodeType::New();
folder->SetNodeType(otb::FOLDER);
// Adding the layer to the data tree
this->GetOutput(0)->GetDataTree()->Add(folder, document);
this->GetOutput(0)->SetProjectionRef(this->GetInput()->GetProjectionRef());
TreeIteratorType itVector(this->GetInput()->GetDataTree());
itVector.GoToBegin();
while (!itVector.IsAtEnd())
{
if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder())
{
typename DataNodeType::Pointer currentGeometry = itVector.Get();
typename JointMassOfBeliefFilterType::Pointer jointMassFilter = JointMassOfBeliefFilterType::New();
for (unsigned int i=0; i<m_DescriptorModels.size(); i++)
{
if (currentGeometry->HasField(m_DescriptorModels[i].first))
{
LabelSetType H, H_;
std::string fuzName, fuzName_;
fuzName = m_DescriptorModels[i].first;
fuzName_ = m_DescriptorModels[i].first + "_";
typename MassOfBeliefFunctionType::Pointer mass = MassOfBeliefFunctionType::New();
mass->InitializePowerSetMasses(m_Universe);
H.insert(fuzName);
H_.insert(fuzName_);
mass->SetMass(H, m_FuzzyVars[i]->GetMembership(fuzName,
(double)(currentGeometry->GetFieldAsInt(fuzName))/100.0));
mass->SetMass(H_, m_FuzzyVars[i]->GetMembership(fuzName_,
(double)(currentGeometry->GetFieldAsInt(fuzName))/100.0));
std::cout << fuzName << " : " << (double)(currentGeometry->GetFieldAsInt(fuzName))/100.
<< " " << m_FuzzyVars[i]->GetMembership(fuzName, (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0) << std::endl;
std::cout << fuzName_ << " : " << (double)(currentGeometry->GetFieldAsInt(fuzName))/100.
<< " " << m_FuzzyVars[i]->GetMembership(fuzName_, (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0) << std::endl;
mass->EstimateUncertainty();
jointMassFilter->PushBackInput(mass);
}
}
jointMassFilter->Update();
m_Bel = jointMassFilter->GetOutput()->GetBelief(m_Hypothesis);
m_Plau = jointMassFilter->GetOutput()->GetPlausibility(m_Hypothesis);
std::cout << "Bel : " << m_Bel << std::endl;
std::cout << "Plau: " << m_Plau << std::endl;
if (m_Parser->Eval() >= m_CriterionThreshold)
{
std::cout << "Feature Validated : " << m_Parser->Eval() << std::endl;
this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder);
}
else
{
std::cout << "Feature Rejected : " << m_Parser->Eval() << std::endl;
}
itVector.GoToEnd();//TEST ONLY###########################################
}
++itVector;
}
}
// PrintSelf Method
template <class TVectorData, class TPrecision>
void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::PrintSelf(std::ostream& os, itk::Indent indent) const
{
Superclass::PrintSelf(os, indent);
}
} // end namespace otb
#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 __otbVectorDataToRoadDescriptionFilter_h
#define __otbVectorDataToRoadDescriptionFilter_h
#include "otbVectorDataToSpecificDescriptionFilterBase.h"
#include "itkPreOrderTreeIterator.h"
#include "otbVectorData.h"
#include "otbNDVIDataNodeFeatureFunction.h"
#include "otbSpectralAngleDataNodeFeatureFunction.h"
namespace otb
{
/** \class VectorDataToRoadDescriptionFilter
* \brief VectorDataToRoadDescriptionFilter associates scores to each
* adapted input VectorData DataNode.
*
* VectorDataToRoadDescriptionFilter is dedicated to road description.
* Input and output are both VectorDatas in index coordinate.
* Each DataNode of the
* output VectorData contains its scores regarding to the associated
* descriptors.
* The support is an Optical Image and the descriptor are:
* -
*
*
* \ingroup VectorDataFilter
* \sa VectorDataToSpecificDescriptionFilterBase
* \sa VectorDataToBuildingDescriptionFilter
*/
template <class TVectorData, class TOpticalImage, class TNDVIImage>
class ITK_EXPORT VectorDataToRoadDescriptionFilter :
public otb::VectorDataToSpecificDescriptionFilterBase<TVectorData>
{
public:
/** Standard class typedefs. */
typedef VectorDataToRoadDescriptionFilter Self;
typedef otb::VectorDataToSpecificDescriptionFilterBase<TVectorData>
Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(VectorDataToRoadDescriptionFilter, VectorDataToSpecificDescriptionFilterBase);
/** Some typedefs. */
typedef TVectorData VectorDataType;
typedef typename TVectorData::Pointer VectorDataPointer;
typedef typename VectorDataType::DataNodeType DataNodeType;
typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType>
TreeIteratorType;
typedef typename DataNodeType::ValuePrecisionType
PrecisionType;
typedef typename DataNodeType::PrecisionType
CoordRepType;
typedef TOpticalImage OpticalImageType;
typedef typename TOpticalImage::Pointer OpticalImageTypePointer;
typedef otb::NDVIDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType>
NDVIFeatureFunctionType;
typedef otb::SpectralAngleDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType>
SpectralAngleFeatureFunctionType;
typedef itk::DataObject::Pointer DataObjectPointer;
typedef itk::DataObject DataObject;
virtual void AddOpticalImage(const OpticalImageType * support);
const OpticalImageType * GetOpticalImage();
/*
virtual void AddNDVIImage(const NDVIImageType * support);
const NDVIImageType * GetNDVIImage();
virtual void AddLSDVectorData(const VectorDataType * support);
const VectorDataType * GetLSDVectorData();
*/
protected:
/** Constructor */
VectorDataToRoadDescriptionFilter();
/** Destructor */
virtual ~VectorDataToRoadDescriptionFilter() {}
/**PrintSelf method */
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
/** Triggers the Computation of the Descriptors */
void GenerateData(void);
private:
VectorDataToRoadDescriptionFilter(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
typename NDVIFeatureFunctionType::Pointer m_NDVIFeatureFunction;
typename SpectralAngleFeatureFunctionType::Pointer m_SpectralAngleFeatureFunction;
};
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbVectorDataToRoadDescriptionFilter.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 __otbVectorDataToRoadDescriptionFilter_txx
#define __otbVectorDataToRoadDescriptionFilter_txx
#include "otbVectorDataToRoadDescriptionFilter.h"
namespace otb
{
// Constructor
template <class TVectorData, class TOpticalImage, class TNDVIImage>
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::VectorDataToRoadDescriptionFilter()
{
this->SetNumberOfRequiredInputs(2);
m_NDVIFeatureFunction = NDVIFeatureFunctionType::New();
m_SpectralAngleFeatureFunction = SpectralAngleFeatureFunctionType::New();
}
template <class TVectorData, class TOpticalImage, class TNDVIImage>
void
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::AddOpticalImage(const OpticalImageType * support)
{
this->AddSupport(const_cast<OpticalImageType *>(support), 0);
}
template <class TVectorData, class TOpticalImage, class TNDVIImage>
const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::OpticalImageType *
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::GetOpticalImage()
{
return static_cast<const OpticalImageType *>
(this->GetSupport(0));
}
/*
template <class TVectorData, class TOpticalImage, class TNDVIImage>
void
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::AddNDVIImage(const NDVIImageType * support)
{
this->AddSupport(const_cast<NDVIImageType *>(support), 1);
}
template <class TVectorData, class TOpticalImage, class TNDVIImage>
const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::NDVIImageType *
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::GetNDVIImage()
{
return static_cast<const NDVIImageType *>
(this->GetSupport(1));
}
template <class TVectorData, class TOpticalImage, class TNDVIImage>
void
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::AddLSDVectorData(const VectorDataType * support)
{
this->AddSupport(const_cast<VectorDataType *>(support), 2);
}
template <class TVectorData, class TOpticalImage, class TNDVIImage>
const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::VectorDataType *
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::GetLSDVectorData()
{
return static_cast<const VectorDataType *>
(this->GetSupport(2));
}
*/
template <class TVectorData, class TOpticalImage, class TNDVIImage>
void
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::GenerateData()
{
m_NDVIFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage()));
m_SpectralAngleFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage()));
// Retrieving root node
typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get();
// Create the document node
typename DataNodeType::Pointer document = DataNodeType::New();
document->SetNodeType(otb::DOCUMENT);
// Adding the layer to the data tree
this->GetOutput(0)->GetDataTree()->Add(document, root);
// Create the folder node
typename DataNodeType::Pointer folder = DataNodeType::New();
folder->SetNodeType(otb::FOLDER);
// Adding the layer to the data tree
this->GetOutput(0)->GetDataTree()->Add(folder, document);
this->GetOutput(0)->SetProjectionRef(this->GetInput()->GetProjectionRef());
TreeIteratorType itVector(this->GetInput()->GetDataTree());
itVector.GoToBegin();
while (!itVector.IsAtEnd())
{
if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder())
{
typename DataNodeType::Pointer currentGeometry = itVector.Get();
currentGeometry->SetFieldAsDouble("NDVI", (double)(m_NDVIFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0]));
currentGeometry->SetFieldAsDouble("RADIOM", (double)(m_SpectralAngleFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0]));
//currentGeometry->SetFieldAsInt("LSD", 80);
//currentGeometry->SetFieldAsInt("SHADOW", 80);
this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder);
}
++itVector;
}
}
// PrintSelf Method
template <class TVectorData, class TOpticalImage, class TNDVIImage>
void
VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage, TNDVIImage>
::PrintSelf(std::ostream& os, itk::Indent indent) const
{
Superclass::PrintSelf(os, indent);
}
} // end namespace otb
#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 __otbVectorDataToSpecificDescriptionFilterBase_h
#define __otbVectorDataToSpecificDescriptionFilterBase_h
#include "otbVectorDataToVectorDataFilter.h"
//#include "otbDataNodeDescriptorBase.h" #include "otbDataNodeFunctionBase.h"
namespace otb
{
/** \class VectorDataToSpecificDescriptionFilterBase
* \brief Base class for VectorDataToSpecificDescriptionFilters.
*
* VectorDataToSpecificDescriptionFilterBase is a base class, it is
* suposed to be used through a derivated class.
* Input and output are both VectorDatas. Each data node of the
* output VectorData contains its score regarding to the associated
* descriptors.
*
*
* \ingroup VectorDataFilter
* \sa VectorDataToRoadDescriptionFilter
* \sa VectorDataToBuildingDescriptionFilter
*/
template <class TVectorData>
class ITK_EXPORT VectorDataToSpecificDescriptionFilterBase :
public otb::VectorDataToVectorDataFilter<TVectorData, TVectorData>
{
public:
/** Standard class typedefs. */
typedef VectorDataToSpecificDescriptionFilterBase Self;
typedef otb::VectorDataToVectorDataFilter<TVectorData,
TVectorData> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(VectorDataToSpecificDescriptionFilterBase, VectorDataToVectorDataFilter);
/** Some typedefs. */
typedef TVectorData VectorDataType;
typedef typename VectorDataType::Pointer VectorDataPointer;
typedef typename VectorDataType::DataNodeType DataNodeType;
//typedef typename DataNodeDescriptorBase<VectorDataType>
// DescriptorType;
//typedef typename DescriptorType::Pointer DescriptorPointerType;
typedef itk::DataObject::Pointer DataObjectPointer;
typedef itk::DataObject DataObject;
/** Support accessors. */
virtual void AddSupport(const itk::DataObject * support, unsigned int idx);
const itk::DataObject * GetSupport(unsigned int idx);
/** Descriptor bench accessors. */
//virtual void ClearDescriptors();
//virtual void PushBackDescriptor(DescriptorType * descriptor);
protected:
/** Constructor */
VectorDataToSpecificDescriptionFilterBase();
/** Destructor */
virtual ~VectorDataToSpecificDescriptionFilterBase() {}
/**PrintSelf method */
virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
private:
VectorDataToSpecificDescriptionFilterBase(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
// Descriptor bench
//std::vector<DescriptorPointerType> m_Descriptors;
};
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbVectorDataToSpecificDescriptionFilterBase.txx"
#endif
#endif
/*=========================================================================