Tomato
OxTestItkImagesFactory.hxx
1 
7 #ifndef Tomato_itkOxTestImage_HXX
8 #define Tomato_itkOxTestImage_HXX
9 
10 #include "CmakeConfigForTomato.h"
11 #ifdef USE_ITK
12 #ifdef USE_YAML
13 
14 namespace Ox {
15 
16  template< typename MeasureType >
17  TestItkImagesFactory< MeasureType >
18  ::TestItkImagesFactory(int nRows, int nCols, std::vector <std::string> filesPaths, std::vector<int> invTimesOrder){
19  _testImage = new TestImage< MeasureType >(nRows, nCols, filesPaths, invTimesOrder);
20  }
21 
22  template< typename MeasureType >
23  TestItkImagesFactory< MeasureType >
24  ::TestItkImagesFactory(int nRows, int nCols, std::vector <std::string> filesPaths){
25  _testImage = new TestImage< MeasureType >(nRows, nCols, filesPaths);
26  }
27 
28  template< typename MeasureType >
29  TestItkImagesFactory< MeasureType >
30  ::~TestItkImagesFactory(){
31  delete _testImage;
32  }
33 
34  template< typename MeasureType >
35  int
36  TestItkImagesFactory< MeasureType >
37  ::getNSamples() const {
38  return _testImage->getNSamples();
39  }
40 
41  template< typename MeasureType >
42  MeasureType*
43  TestItkImagesFactory< MeasureType >
44  ::getInvTimesPtr(){
45  return _testImage->getInvTimesPtr();
46  }
47 
48  template< typename MeasureType >
49  std::vector<MeasureType>
50  TestItkImagesFactory< MeasureType >
51  ::getInvTimes() const{
52  return _testImage->getInvTimes();
53  }
54 
55  template< typename MeasureType >
56  vnl_vector<MeasureType>
57  TestItkImagesFactory< MeasureType >
58  :: getInvTimesVnl() const{
59  return vnl_vector<MeasureType>(_testImage->getInvTimesPtr(), _testImage->getNSamples());
60  }
61 
62 
63  template< typename MeasureType >
64  typename itk::Image< MeasureType, 3 >::Pointer
65  TestItkImagesFactory< MeasureType >
66  ::generateImageMag(){
67  typename itk::Image< MeasureType, 3 >::Pointer image = generateImage3d();
68  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 3 > > imageIterator(image, image->GetLargestPossibleRegion());
69  copyBufferToImage3d(image, _testImage->getImageMagPtr());
70  return image;
71  };
72 
73  template< typename MeasureType >
74  typename itk::Image< MeasureType, 3 >::Pointer
75  TestItkImagesFactory< MeasureType >
76  ::generateImagePha(){
77  typename itk::Image< MeasureType, 3 >::Pointer image = generateImage3d();
78  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 3 > > imageIterator(image, image->GetLargestPossibleRegion());
79  copyBufferToImage3d(image, _testImage->getImagePhaPtr());
80  return image;
81  };
82 
83  template< typename MeasureType >
84  typename itk::Image< MeasureType, 2 >::Pointer
85  TestItkImagesFactory< MeasureType >
86  ::generateImageResultsMolliA(){
87  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
88  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
89  copyBufferToImage2d(image, _testImage->getImageResultsMolliPtr());
90  return image;
91  };
92 
93  template< typename MeasureType >
94  typename itk::Image< MeasureType, 2 >::Pointer
95  TestItkImagesFactory< MeasureType >
96  ::generateImageResultsMolliB(){
97  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
98  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
99  int nRows = _testImage->getNRows();
100  int nCols = _testImage->getNCols();
101  // shift pointer to point to 2rd element of the array
102  MeasureType *pointer = _testImage->getImageResultsMolliPtr() + nRows*nCols;
103  copyBufferToImage2d(image, pointer);
104  return image;
105  };
106 
107  template< typename MeasureType >
108  typename itk::Image< MeasureType, 2 >::Pointer
109  TestItkImagesFactory< MeasureType >
110  ::generateImageResultsMolliT1star(){
111  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
112  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
113  int nRows = _testImage->getNRows();
114  int nCols = _testImage->getNCols();
115  // shift pointer to point to 3rd element of the array
116  MeasureType *pointer = _testImage->getImageResultsMolliPtr() + 2*nRows*nCols;
117  copyBufferToImage2d(image, pointer);
118  return image;
119  };
120 
121  template< typename MeasureType >
122  typename itk::Image< MeasureType, 2 >::Pointer
123  TestItkImagesFactory< MeasureType >
124  ::generateImageResultsShmolliA(){
125  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
126  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
127  copyBufferToImage2d(image, _testImage->getImageResultsShmolliPtr());
128  return image;
129  };
130 
131  template< typename MeasureType >
132  typename itk::Image< MeasureType, 2 >::Pointer
133  TestItkImagesFactory< MeasureType >
134  ::generateImageResultsShmolliB(){
135  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
136  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
137  int nRows = _testImage->getNRows();
138  int nCols = _testImage->getNCols();
139  // shift pointer to point to 2rd element of the array
140  MeasureType *pointer = _testImage->getImageResultsShmolliPtr() + nRows*nCols;
141  copyBufferToImage2d(image, pointer);
142  return image;
143  };
144 
145  template< typename MeasureType >
146  typename itk::Image< MeasureType, 2 >::Pointer
147  TestItkImagesFactory< MeasureType >
148  ::generateImageResultsShmolliT1star(){
149  typename itk::Image< MeasureType, 2 >::Pointer image = generateImage2d();
150  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
151  int nRows = _testImage->getNRows();
152  int nCols = _testImage->getNCols();
153  // shift pointer to point to 3rd element of the array
154  MeasureType *pointer = _testImage->getImageResultsShmolliPtr() + 2*nRows*nCols;
155  copyBufferToImage2d(image, pointer);
156  return image;
157  };
158 
159  template< typename MeasureType >
160  typename itk::Image< MeasureType, 2 >::Pointer
161  TestItkImagesFactory< MeasureType >
162  ::generateImage2d(){
163 
164  typename itk::Image< MeasureType, 2 >::RegionType region;
165  typename itk::Image< MeasureType, 2 >::IndexType start;
166  start[0] = 0;
167  start[1] = 0;
168 
169  typename itk::Image< MeasureType, 2 >::SizeType size;
170  size[0] = _testImage->getNCols();
171  size[1] = _testImage->getNRows();
172 
173  region.SetSize(size);
174  region.SetIndex(start);
175 
176  typename itk::Image< MeasureType, 2 >::Pointer image = itk::Image< MeasureType, 2 >::New();
177  image->SetRegions(region);
178  image->Allocate();
179  image->FillBuffer(0);
180 
181  return image;
182  };
183 
184  template< typename MeasureType >
185  typename itk::Image< MeasureType, 3 >::Pointer
186  TestItkImagesFactory< MeasureType >
187  ::generateImage3d(){
188 
189  typename itk::Image< MeasureType, 3 >::RegionType region;
190  typename itk::Image< MeasureType, 3 >::IndexType start;
191  start[0] = 0;
192  start[1] = 0;
193  start[2] = 0;
194 
195  typename itk::Image< MeasureType, 3 >::SizeType size;
196  size[0] = _testImage->getNCols();
197  size[1] = _testImage->getNRows();
198  size[2] = _testImage->getNSamples();
199 
200  region.SetSize(size);
201  region.SetIndex(start);
202 
203  typename itk::Image< MeasureType, 3 >::Pointer image = itk::Image< MeasureType, 3 >::New();
204  image->SetRegions(region);
205  image->Allocate();
206  image->FillBuffer(0);
207 
208  return image;
209  };
210 
211  template< typename MeasureType >
212  void
213  TestItkImagesFactory< MeasureType >
214  ::copyBufferToImage2d(typename itk::Image< MeasureType, 2 >::Pointer image, MeasureType* buffer) {
215  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 2 > > imageIterator(image, image->GetLargestPossibleRegion());
216 
217  int nRows = _testImage->getNRows();
218  int nCols = _testImage->getNCols();
219  while(!imageIterator.IsAtEnd())
220  {
221  int iCol = imageIterator.GetIndex()[0];
222  int iRow = imageIterator.GetIndex()[1];
223  //imageIterator.Set(buffer[iCol * nRows + iRow]);
224  imageIterator.Set(buffer[iRow * nCols + iCol]);
225  ++imageIterator;
226  }
227  }
228 
229  template< typename MeasureType >
230  void
231  TestItkImagesFactory< MeasureType >
232  ::copyBufferToImage3d(typename itk::Image< MeasureType, 3 >::Pointer image, MeasureType* buffer) {
233  itk::ImageRegionIteratorWithIndex<itk::Image< MeasureType, 3 > > imageIterator(image, image->GetLargestPossibleRegion());
234 
235  int nRows = _testImage->getNRows();
236  int nCols = _testImage->getNCols();
237  while(!imageIterator.IsAtEnd())
238  {
239  int iCol = imageIterator.GetIndex()[0];
240  int iRow = imageIterator.GetIndex()[1];
241  int iSample = imageIterator.GetIndex()[2];
242  //imageIterator.Set(buffer[iSample * nRows * nCols+ iCol * nRows + iRow]);
243  imageIterator.Set(buffer[iSample * nRows * nCols+ iRow * nCols + iCol]);
244  ++imageIterator;
245  }
246  }
247 } // namespace Ox
248 
249 #endif // USE_YAML
250 #endif // USE_ITK
251 
252 #endif //Tomato_itkOxTestImage_HXX
Definition: OxCalculator.h:19