Failed to fetch fork details. Try again later.
-
remi cresson authoredb5e0e6d8
Forked from
Cresson Remi / SimpleExtractionTools
Source project has a limited visibility.
/*
* otbStreamingGraphToImageFilter.h
*
* Created on: 6 nov. 2017
* Author: cresson
*/
#ifndef MODULES_REMOTE_LSGRM_INCLUDE_OTBSTREAMINGGRAPHTOIMAGEFILTER_H_
#define MODULES_REMOTE_LSGRM_INCLUDE_OTBSTREAMINGGRAPHTOIMAGEFILTER_H_
#include "itkImageSource.h"
#include "itkExceptionObject.h"
#include "itkImageRegion.h"
#include "itkGrayscaleFillholeImageFilter.h"
#include "grmGraphOperations.h"
// Boost R-Tree
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/index/rtree.hpp>
// to store queries results
#include <vector>
// just for output
#include <iostream>
#include <boost/foreach.hpp>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
namespace lsgrm
{
template <class TGraph, class TLabelImage>
class ITK_EXPORT StreamingGraphToImageFilter : public itk::ImageSource<TLabelImage>
{
public:
/** Standard class typedefs. */
typedef StreamingGraphToImageFilter Self;
typedef itk::ImageSource<TLabelImage> Superclass;
typedef itk::SmartPointer<Self> Pointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(StreamingGraphToImageFilter, ImageSource);
/** Typedefs for processing */
typedef typename TLabelImage::RegionType RegionType;
typedef typename TLabelImage::IndexType IndexType;
typedef typename TLabelImage::SizeType SizeType;
typedef typename TLabelImage::SpacingType SpacingType;
typedef typename TLabelImage::PointType PointType;
typedef typename TGraph::NodePointerType NodePointerType;
typedef itk::GrayscaleFillholeImageFilter<TLabelImage,TLabelImage> FillholeFilterType;
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef std::pair<box, unsigned> value;
/** Set the input graph and build the R-Tree */
void SetGraph(const TGraph graph);
/** Prepare image allocation at the first call of the pipeline processing */
virtual void GenerateOutputInformation(void);
7172737475767778798081828384858687888990919293949596979899100101102103
/** Does the real work. */
virtual void GenerateData();
itkSetMacro(OutputSize, SizeType);
itkSetMacro(OutputOrigin, PointType);
itkSetMacro(OutputSpacing, SpacingType);
itkSetMacro(OutputProjectionRef, std::string);
protected:
StreamingGraphToImageFilter(){};
virtual ~StreamingGraphToImageFilter(){};
private:
StreamingGraphToImageFilter(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
TGraph m_Graph;
bgi::rtree< value, bgi::quadratic<16> > rtree;
SizeType m_OutputSize;
SpacingType m_OutputSpacing;
PointType m_OutputOrigin;
std::string m_OutputProjectionRef;
};
} /* namespace lsgrm */
#ifndef OTB_MANUAL_INSTANTIATION
#include <otbStreamingGraphToImageFilter.txx>
#endif
#endif /* MODULES_REMOTE_LSGRM_INCLUDE_OTBSTREAMINGGRAPHTOIMAGEFILTER_H_ */