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