DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ImageContainerByITKImage.ih
1 
30 
31 #include <cstdlib>
33 
35 // IMPLEMENTATION of inline methods.
37 
39 // ----------------------- Standard services ------------------------------
40 
41 namespace DGtal
42 {
43  namespace experimental
44  {
45 
49  template<typename TDomain, typename TValue>
50  inline
52  {
53  }
54 
55  template <typename TDomain, typename TValue>
56  inline
58  const Point &aPointB)
59  : myITKImagePointer(ITKImage::New())
60  {
61  typename ITKImage::IndexType start;
62  typename ITKImage::SizeType size;
63 
64  if (aPointA < aPointB)
65  {
66  myLowerBound = aPointA;
67  myUpperBound = aPointB;
68  }
69  else
70  {
71  myLowerBound = aPointB;
72  myUpperBound = aPointA;
73  }
75 
76  //copy of domain information
77  for (Dimension k = 0; k < dimension; k++)
78  {
79  start[k] = myLowerBound[k];
80  size[k] = dec[k];
81  }
82 
83  myRegion.SetSize( size );
84  myRegion.SetIndex( start );
85 
86  myITKImagePointer->SetRegions(myRegion);
87  myITKImagePointer->Allocate();
88 
89  //ConstIterators
91  myConstItBegin.GoToBegin();
93  myConstItEnd.GoToEnd();
94 
95  //Iterators
97  myItBegin.GoToBegin();
99  myItEnd.GoToEnd();
100  }
101 
102  template <typename TDomain, typename TValue>
103  inline
105  const Point &aPointB, ITKImagePointer &aRef)
106  : myITKImagePointer(aRef)
107  {
108  typename ITKImage::IndexType start;
109  typename ITKImage::SizeType size;
110 
111  if (aPointA < aPointB)
112  {
113  myLowerBound = aPointA;
114  myUpperBound = aPointB;
115  }
116  else
117  {
118  myLowerBound = aPointB;
119  myUpperBound = aPointA;
120  }
122 
123  //copy of domain information
124  for (Dimension k = 0; k < dimension; k++)
125  {
126  start[k] = myLowerBound[k];
127  size[k] = dec[k];
128  }
129 
130  myRegion.SetSize( size );
131  myRegion.SetIndex( start );
132 
133  myITKImagePointer->SetRegions(myRegion);
134 
135  //ConstIterators
137  myConstItBegin.GoToBegin();
139  myConstItEnd.GoToEnd();
140 
141  //Iterators
143  myItBegin.GoToBegin();
145  myItEnd.GoToEnd();
146  }
147 
148 
150  // Interface - public :
151 
152 
159  template <typename TDomain, typename TValue>
160  inline
161  TValue
163  {
164  typename ITKImage::IndexType p;
165  for (Dimension k = 0; k < dimension; k++)
166  p[k] = aPoint[k];
167  return myITKImagePointer->GetPixel(p);
168  }
169 
176  template <typename TDomain, typename TValue>
177  inline
178  TValue
180  {
181  return it.Get();
182  }
183 
190  template <typename TDomain, typename TValue>
191  inline
192  TValue
194  {
195  return it.Get();
196  }
197 
198  template <typename Domain, typename T>
199  inline
200  void
201  ImageContainerByITKImage<Domain, T>::setValue(const Point &aPoint, const T &V)
202  {
203  typename ITKImage::IndexType p;
204  for (Dimension k = 0; k < dimension; k++)
205  p[k] = aPoint[k];
206  myITKImagePointer->SetPixel(p, V);
207  }
208 
209  template <typename Domain, typename T>
210  inline
211  void
212  ImageContainerByITKImage<Domain, T>::setValue(Iterator &it, const T &V)
213  {
214  it.Set(V);
215  }
216 
221  template<typename TDomain, typename TValue>
222  inline
223  void
225  {
226  out << "[ImageContainerByITKImage] valuetype=" << sizeof(TValue)
227  << "bytes lower=" << myLowerBound << " upper="
228  << myUpperBound;
229  }
230 
235  template<typename TDomain, typename TValue>
236  inline
237  bool
239  {
240  return true;
241  }
242 
243  }
244 
245 
247  // Implementation of inline functions //
248 
249  template<typename TDomain, typename TValue>
250  inline
251  std::ostream&
252  operator<< ( std::ostream & out,
254  {
255  object.selfDisplay( out );
256  return out;
257  }
258 }
259 // //
261 
262