brainrat-private 6.0.4
border.h
Go to the documentation of this file.
1/* Copyright (C) 2000-2013 CEA
2 *
3 * This software and supporting documentation were developed by
4 * bioPICSEL
5 * CEA/DSV/I²BM/MIRCen/LMN, Batiment 61,
6 * 18, route du Panorama
7 * 92265 Fontenay-aux-Roses
8 * France
9 */
10
11#ifndef BRAINRAT_UTILITY_BORDER_H
12#define BRAINRAT_UTILITY_BORDER_H
13
14#include <vector>
15#include <cartobase/smart/rcptr.h>
16#include <aims/data/data_g.h>
17#include <aims/data/data_g.h>
18
19#define DEFAULT_BORDER 10 // Around
20
21namespace brainrat
22{
23
24 class BorderIterator : public carto::RCObject
25 {
26 public:
27 virtual inline ~BorderIterator() {}
28
29 // Returns the current point in border
30 virtual const Point3d & value() const = 0;
31 virtual void next() = 0;
32 virtual bool isValid() const = 0;
33 virtual void restart() = 0;
34
35 // Check if a point (in voxel referential) belongs to the border
36 virtual bool contains( const Point3d & ) const = 0;
37 virtual Point3d & width() = 0;
38 };
39
40 //---------------------------------------------------------------------------
41 template <class T>
43 {
44 };
45
46 //---------------------------------------------------------------------------
47 template< class T >
48 class Border3dIteratorOf<carto::VolumeRef<T> > : public BorderIterator
49 {
50 public:
51 Border3dIteratorOf(const carto::VolumeRef<T> & data, const Point3d & width);
52 Border3dIteratorOf(const carto::VolumeRef<T> & data, const int32_t width);
53 virtual inline ~Border3dIteratorOf() {}
54
55 // Returns the current point in border
56 virtual const Point3d & value() const;
57 virtual void next();
58 virtual bool isValid() const;
59 virtual void restart();
60
61 // Check if a point (in voxel referential) belongs to the border
62 virtual bool contains( const Point3d & ) const;
63 virtual Point3d & width();
64
65 private:
66 carto::VolumeRef<T> _data;
67 Point3d _width;
68 Point3d _current;
69 Point3d _lastPoint;
70 };
71
72 // Border extraction
73 template< class T >
74 inline carto::VolumeRef< T > border( carto::VolumeRef< T > &data, Point3d border )
75 {
76 std::vector< Point3d > v;
77
79 while(b.isValid())
80 {
81 v.push_back(b.value());
82 b.next();
83 }
84
85 carto::VolumeRef<T > r(v.size());
86
87 //std::cout << "border size : " << carto::toString(v.size()) << std::endl << std::flush;
88 for ( int32_t i = 0; i < v.size(); i++ )
89 r(i) = data(v[i]);
90
91 return r;
92 }
93
94 template< class T >
95 inline carto::VolumeRef< T > border( carto::VolumeRef< T > &data, uint32_t width )
96 {
97 return border(data, Point3d(width, width, width));
98 }
99}
100
101#endif
Border3dIteratorOf(const carto::VolumeRef< T > &data, const int32_t width)
Border3dIteratorOf(const carto::VolumeRef< T > &data, const Point3d &width)
virtual bool contains(const Point3d &) const
virtual const Point3d & value() const =0
virtual Point3d & width()=0
virtual bool isValid() const =0
virtual ~BorderIterator()
Definition border.h:27
virtual bool contains(const Point3d &) const =0
virtual void restart()=0
virtual void next()=0
carto::VolumeRef< T > border(carto::VolumeRef< T > &data, Point3d border)
Definition border.h:74