From d70b03f371537463931c8dbee79abf795dad12ed Mon Sep 17 00:00:00 2001 From: remicres <remi.cresson@teledetection.fr> Date: Wed, 24 Aug 2016 12:24:20 +0000 Subject: [PATCH] ADD: lsgrm euclidean distance criterion --- include/lsgrmSpringSegmenter.h | 33 ++++++++++++++++++ include/lsgrmSpringSegmenter.txx | 59 ++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 include/lsgrmSpringSegmenter.h create mode 100644 include/lsgrmSpringSegmenter.txx diff --git a/include/lsgrmSpringSegmenter.h b/include/lsgrmSpringSegmenter.h new file mode 100644 index 0000000..8cf51a2 --- /dev/null +++ b/include/lsgrmSpringSegmenter.h @@ -0,0 +1,33 @@ +#ifndef __LSRM_Spring_SEGMENTER_H +#define __LSRM_Spring_SEGMENTER_H +#include "lsgrmSegmenter.h" +#include "grmSpringSegmenter.h" + +namespace lsgrm +{ + +template<class TImage> +class SpringSegmenter : public Segmenter<grm::SpringSegmenter<TImage> > +{ +public: + + /* Some convenient typedefs */ + typedef grm::SpringSegmenter<TImage> Superclass; + typedef typename Superclass::NodeType NodeType; + typedef typename Superclass::EdgeType EdgeType; + typedef typename Superclass::NodePointerType NodePointerType; + + + SpringSegmenter(){}; + + void WriteSpecificAttributes(NodePointerType node, FILE * nodeStream); + void ReadSpecificAttributes(NodePointerType node, FILE * nodeStream); + long long unsigned int GetNodeMemory(NodePointerType &node); +}; + +} // end of namespace lsrm +#include "lsgrmSpringSegmenter.txx" +#endif + + + diff --git a/include/lsgrmSpringSegmenter.txx b/include/lsgrmSpringSegmenter.txx new file mode 100644 index 0000000..91e47ef --- /dev/null +++ b/include/lsgrmSpringSegmenter.txx @@ -0,0 +1,59 @@ +#ifndef __LSRM_Spring_SEGMENTER_TXX +#define __LSRM_Spring_SEGMENTER_TXX +#include <otbImageFileReader.h> +#include <itkImageRegionIterator.h> + +namespace lsgrm +{ + + template<class TImage> + void + SpringSegmenter<TImage>::WriteSpecificAttributes(NodePointerType node, FILE * nodeStream) + { + std::size_t bands = node->m_Means.size(); + fwrite(&(bands), sizeof(bands), 1, nodeStream); + + for(unsigned int b = 0; b < node->m_Means.size(); b++) + { + fwrite(&(node->m_Means[b]), sizeof(node->m_Means[b]), 1, nodeStream); + } + } + + template<class TImage> + void + SpringSegmenter<TImage>::ReadSpecificAttributes(NodePointerType node, FILE * nodeStream) + { + std::size_t bands; + fread(&(bands), sizeof(bands), 1, nodeStream); + node->m_Means.assign(bands, 0); + + for(unsigned int b = 0; b < bands; b++) + { + fread(&(node->m_Means[b]), sizeof(node->m_Means[b]), 1, nodeStream); + } + } + + template<class TImage> + long long unsigned int + SpringSegmenter<TImage>::GetNodeMemory(NodePointerType &node) + { + + unsigned int nBands = node->m_Means.size(); //this->m_InputImage->GetNumberOfComponentsPerPixel(); + + long long unsigned int memory = 0; + memory += sizeof(NodePointerType); // size of the node pointer + memory += sizeof(NodeType); // size of the node (actually, size of the base node) + memory += 1 * nBands * sizeof(float); // size of the 1 attribute, multiplied by the nb. of bands + memory += node->m_Edges.size() * sizeof(EdgeType); // size of the edges + return memory; + } +} // end of namespace lsrm + +#endif + + + + + + + -- GitLab