Skip to content
Snippets Groups Projects
SOMModel.h 4.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef SOMModel_h
    #define SOMModel_h
    
    #include "DimensionalityReductionModel.h"
    #include "otbSOMMap.h"
    
    #include "otbSOM.h"
    
    #include "itkEuclideanDistanceMetric.h" // the distance function
    
    #include "otbCzihoSOMLearningBehaviorFunctor.h"
    #include "otbCzihoSOMNeighborhoodBehaviorFunctor.h"
    
    
    
    namespace otb
    {
    
    template <class TInputValue, unsigned int MapDimension>
    
    class ITK_EXPORT SOMModel: public  DimensionalityReductionModel<TInputValue,TInputValue>   
    {
    
    public:
    	
    	typedef SOMModel Self;
    	typedef DimensionalityReductionModel<TInputValue,TInputValue> Superclass;
    	typedef itk::SmartPointer<Self> Pointer;
    	typedef itk::SmartPointer<const Self> ConstPointer;
    
    	typedef typename Superclass::InputValueType InputValueType;
    	typedef typename Superclass::InputSampleType InputSampleType;
    	typedef typename Superclass::InputListSampleType InputListSampleType;
    	typedef typename InputListSampleType::Pointer ListSamplePointerType;
    	typedef typename Superclass::TargetValueType TargetValueType;
    	typedef typename Superclass::TargetSampleType TargetSampleType;
    	typedef typename Superclass::TargetListSampleType TargetListSampleType;
    
    
    	typedef SOMMap<itk::VariableLengthVector<TInputValue>,itk::Statistics::EuclideanDistanceMetric<itk::VariableLengthVector<TInputValue>>, MapDimension> MapType;
    
    	typedef typename MapType::SizeType       SizeType;
    
    	typedef typename MapType::SpacingType       SpacingType;
    
    	
    	typedef otb::SOM<InputListSampleType, MapType> EstimatorType;
    
    	
    	typedef Functor::CzihoSOMLearningBehaviorFunctor    SOMLearningBehaviorFunctorType;
    	typedef Functor::CzihoSOMNeighborhoodBehaviorFunctor SOMNeighborhoodBehaviorFunctorType;
    
    	itkNewMacro(Self);
    	itkTypeMacro(SOMModel, DimensionalityReductionModel);
    	 
    	/** Accessors */
    	itkSetMacro(NumberOfIterations, unsigned int);
    	itkGetMacro(NumberOfIterations, unsigned int);
        itkSetMacro(BetaInit, double);
    	itkGetMacro(BetaInit, double);
    	itkSetMacro(BetaEnd, double);
    	itkGetMacro(BetaEnd, double);
    	itkSetMacro(MinWeight, InputValueType);
    	itkGetMacro(MinWeight, InputValueType);
    	itkSetMacro(MaxWeight, InputValueType);
    	itkGetMacro(MaxWeight, InputValueType);
    	itkSetMacro(MapSize, SizeType);
    	itkGetMacro(MapSize, SizeType);
    	itkSetMacro(NeighborhoodSizeInit, SizeType);
    	itkGetMacro(NeighborhoodSizeInit, SizeType);
    	itkSetMacro(RandomInit, bool);
    	itkGetMacro(RandomInit, bool);
    	itkSetMacro(Seed, unsigned int);
    	itkGetMacro(Seed, unsigned int);
    	itkGetObjectMacro(ListSample, InputListSampleType);
    	itkSetObjectMacro(ListSample, InputListSampleType);
    
    	bool CanReadFile(const std::string & filename);
    	bool CanWriteFile(const std::string & filename);
    
    	void Save(const std::string & filename, const std::string & name="")  ITK_OVERRIDE;
    	void Load(const std::string & filename, const std::string & name="")  ITK_OVERRIDE;
    
    	void Train() ITK_OVERRIDE;
    	//void Dimensionality_reduction()  {}; // Dimensionality reduction is done by DoPredict
    	 
    	unsigned int GetDimension() { return MapType::ImageDimension;};
    protected:
    	SOMModel();	
    	~SOMModel() ITK_OVERRIDE;
     
    
    Cédric Traizet's avatar
    Cédric Traizet committed
    	virtual TargetSampleType DoPredict(const InputSampleType& input) const ITK_OVERRIDE;
    
    	
    private:
    	typename MapType::Pointer m_SOMMap;
    
    
    	/** Map Parameters used for training */
      
    	SizeType m_MapSize;
    	/** Number of iterations */
    	unsigned int m_NumberOfIterations;
    	/** Initial learning coefficient */
    	double m_BetaInit;
    	/** Final learning coefficient */
    	double m_BetaEnd;
    	/** Initial neighborhood size */
    	SizeType m_NeighborhoodSizeInit;
    	/** Minimum initial neuron weights */
    	InputValueType m_MinWeight;
    	/** Maximum initial neuron weights */
    	InputValueType m_MaxWeight;
    	/** Random initialization bool */
    	bool m_RandomInit;
    	/** Seed for random initialization */
    	unsigned int m_Seed;
    	/** The input list sample */
    	ListSamplePointerType m_ListSample;
    	/** Behavior of the Learning weightening (link to the beta coefficient) */
    	SOMLearningBehaviorFunctorType m_BetaFunctor;
    	/** Behavior of the Neighborhood extent */
    	SOMNeighborhoodBehaviorFunctorType m_NeighborhoodSizeFunctor;
    
    };
    
    
    } // end namespace otb
    
    
    #ifndef OTB_MANUAL_INSTANTIATION
    #include "SOMModel.txx"
    #endif
    
    
    #endif