]> Creatis software - clitk.git/blob - tools/clitkImageConvertGenericFilter.h
support for multiple vector image conversions
[clitk.git] / tools / clitkImageConvertGenericFilter.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #ifndef CLITKIMAGECONVERTGENERICFILTER_H
19 #define CLITKIMAGECONVERTGENERICFILTER_H
20 /**
21  ===================================================================
22  * @file   clitkImageConvertGenericFilter.h
23  * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
24  * @date   05 May 2008 10:40:24
25
26  * @brief  
27
28  ===================================================================*/
29
30 // clitk include
31 #include "clitkImageToImageGenericFilter.h"
32
33
34 namespace clitk {
35   
36   class ImageConvertGenericFilter: 
37     public clitk::ImageToImageGenericFilter<ImageConvertGenericFilter> {
38     
39   public: 
40     // constructor - destructor
41     ImageConvertGenericFilter();
42
43     // Types
44     typedef ImageConvertGenericFilter     Self;
45     typedef itk::SmartPointer<Self>       Pointer;
46     typedef itk::SmartPointer<const Self> ConstPointer;
47
48     // New
49     itkNewMacro(Self);
50     
51     // Members functions
52     void SetOutputPixelType(std::string p) { mOutputPixelTypeName = p; }
53     bool IsWarningOccur() { return mWarningOccur; }
54     std::string & GetWarning() { return mWarning; }
55     void EnableDisplayWarning(bool b) { mDisplayWarning = b; }
56
57     //--------------------------------------------------------------------
58     // Main function called each time the filter is updated
59     template<class InputImageType>  
60     void UpdateWithInputImageType();
61
62   protected:
63     template<unsigned int Dim> void InitializeImageType();
64     std::string mOutputPixelTypeName;
65     std::string mWarning;
66     bool mWarningOccur;
67     bool mDisplayWarning;
68
69     template<class InputImageType, class OutputPixelType> void UpdateWithOutputType();
70     template<class InputImageType, class OutputPixelType> void UpdateWithOutputVectorType();
71
72   }; // end class ImageConvertGenericFilter
73
74 #define VEC_UPDATE_DECL(TYPE_IN, COMP, DIM, TYPE_OUT) \
75   template<> void ImageConvertGenericFilter::UpdateWithOutputType<itk::Image<itk::Vector<TYPE_IN, COMP>, DIM>, TYPE_OUT>()
76   
77 VEC_UPDATE_DECL(char, 2, 2, unsigned char);
78 VEC_UPDATE_DECL(char, 2, 3, unsigned char);
79 VEC_UPDATE_DECL(char, 2, 4, unsigned char);
80 VEC_UPDATE_DECL(char, 2, 2, char);
81 VEC_UPDATE_DECL(char, 2, 3, char);
82 VEC_UPDATE_DECL(char, 2, 4, char);
83 VEC_UPDATE_DECL(char, 2, 2, unsigned short);
84 VEC_UPDATE_DECL(char, 2, 3, unsigned short);
85 VEC_UPDATE_DECL(char, 2, 4, unsigned short);
86 VEC_UPDATE_DECL(char, 2, 2, short);
87 VEC_UPDATE_DECL(char, 2, 3, short);
88 VEC_UPDATE_DECL(char, 2, 4, short);
89 VEC_UPDATE_DECL(char, 2, 2, int);
90 VEC_UPDATE_DECL(char, 2, 3, int);
91 VEC_UPDATE_DECL(char, 2, 4, int);
92 VEC_UPDATE_DECL(char, 2, 2, float);
93 VEC_UPDATE_DECL(char, 2, 3, float);
94 VEC_UPDATE_DECL(char, 2, 4, float);
95 VEC_UPDATE_DECL(char, 2, 2, double);
96 VEC_UPDATE_DECL(char, 2, 3, double);
97 VEC_UPDATE_DECL(char, 2, 4, double);
98
99 VEC_UPDATE_DECL(char, 3, 2, unsigned char);
100 VEC_UPDATE_DECL(char, 3, 3, unsigned char);
101 VEC_UPDATE_DECL(char, 3, 4, unsigned char);
102 VEC_UPDATE_DECL(char, 3, 2, char);
103 VEC_UPDATE_DECL(char, 3, 3, char);
104 VEC_UPDATE_DECL(char, 3, 4, char);
105 VEC_UPDATE_DECL(char, 3, 2, unsigned short);
106 VEC_UPDATE_DECL(char, 3, 3, unsigned short);
107 VEC_UPDATE_DECL(char, 3, 4, unsigned short);
108 VEC_UPDATE_DECL(char, 3, 2, short);
109 VEC_UPDATE_DECL(char, 3, 3, short);
110 VEC_UPDATE_DECL(char, 3, 4, short);
111 VEC_UPDATE_DECL(char, 3, 2, int);
112 VEC_UPDATE_DECL(char, 3, 3, int);
113 VEC_UPDATE_DECL(char, 3, 4, int);
114 VEC_UPDATE_DECL(char, 3, 2, float);
115 VEC_UPDATE_DECL(char, 3, 3, float);
116 VEC_UPDATE_DECL(char, 3, 4, float);
117 VEC_UPDATE_DECL(char, 3, 2, double);
118 VEC_UPDATE_DECL(char, 3, 3, double);
119 VEC_UPDATE_DECL(char, 3, 4, double);
120
121 VEC_UPDATE_DECL(unsigned char, 2, 2, unsigned char);
122 VEC_UPDATE_DECL(unsigned char, 2, 3, unsigned char);
123 VEC_UPDATE_DECL(unsigned char, 2, 4, unsigned char);
124 VEC_UPDATE_DECL(unsigned char, 2, 2, char);
125 VEC_UPDATE_DECL(unsigned char, 2, 3, char);
126 VEC_UPDATE_DECL(unsigned char, 2, 4, char);
127 VEC_UPDATE_DECL(unsigned char, 2, 2, unsigned short);
128 VEC_UPDATE_DECL(unsigned char, 2, 3, unsigned short);
129 VEC_UPDATE_DECL(unsigned char, 2, 4, unsigned short);
130 VEC_UPDATE_DECL(unsigned char, 2, 2, short);
131 VEC_UPDATE_DECL(unsigned char, 2, 3, short);
132 VEC_UPDATE_DECL(unsigned char, 2, 4, short);
133 VEC_UPDATE_DECL(unsigned char, 2, 2, int);
134 VEC_UPDATE_DECL(unsigned char, 2, 3, int);
135 VEC_UPDATE_DECL(unsigned char, 2, 4, int);
136 VEC_UPDATE_DECL(unsigned char, 2, 2, float);
137 VEC_UPDATE_DECL(unsigned char, 2, 3, float);
138 VEC_UPDATE_DECL(unsigned char, 2, 4, float);
139 VEC_UPDATE_DECL(unsigned char, 2, 2, double);
140 VEC_UPDATE_DECL(unsigned char, 2, 3, double);
141 VEC_UPDATE_DECL(unsigned char, 2, 4, double);
142
143 VEC_UPDATE_DECL(unsigned char, 3, 2, unsigned char);
144 VEC_UPDATE_DECL(unsigned char, 3, 3, unsigned char);
145 VEC_UPDATE_DECL(unsigned char, 3, 4, unsigned char);
146 VEC_UPDATE_DECL(unsigned char, 3, 2, char);
147 VEC_UPDATE_DECL(unsigned char, 3, 3, char);
148 VEC_UPDATE_DECL(unsigned char, 3, 4, char);
149 VEC_UPDATE_DECL(unsigned char, 3, 2, unsigned short);
150 VEC_UPDATE_DECL(unsigned char, 3, 3, unsigned short);
151 VEC_UPDATE_DECL(unsigned char, 3, 4, unsigned short);
152 VEC_UPDATE_DECL(unsigned char, 3, 2, short);
153 VEC_UPDATE_DECL(unsigned char, 3, 3, short);
154 VEC_UPDATE_DECL(unsigned char, 3, 4, short);
155 VEC_UPDATE_DECL(unsigned char, 3, 2, int);
156 VEC_UPDATE_DECL(unsigned char, 3, 3, int);
157 VEC_UPDATE_DECL(unsigned char, 3, 4, int);
158 VEC_UPDATE_DECL(unsigned char, 3, 2, float);
159 VEC_UPDATE_DECL(unsigned char, 3, 3, float);
160 VEC_UPDATE_DECL(unsigned char, 3, 4, float);
161 VEC_UPDATE_DECL(unsigned char, 3, 2, double);
162 VEC_UPDATE_DECL(unsigned char, 3, 3, double);
163 VEC_UPDATE_DECL(unsigned char, 3, 4, double);
164
165 VEC_UPDATE_DECL(short, 2, 2, unsigned char);
166 VEC_UPDATE_DECL(short, 2, 3, unsigned char);
167 VEC_UPDATE_DECL(short, 2, 4, unsigned char);
168 VEC_UPDATE_DECL(short, 2, 2, char);
169 VEC_UPDATE_DECL(short, 2, 3, char);
170 VEC_UPDATE_DECL(short, 2, 4, char);
171 VEC_UPDATE_DECL(short, 2, 2, unsigned short);
172 VEC_UPDATE_DECL(short, 2, 3, unsigned short);
173 VEC_UPDATE_DECL(short, 2, 4, unsigned short);
174 VEC_UPDATE_DECL(short, 2, 2, short);
175 VEC_UPDATE_DECL(short, 2, 3, short);
176 VEC_UPDATE_DECL(short, 2, 4, short);
177 VEC_UPDATE_DECL(short, 2, 2, int);
178 VEC_UPDATE_DECL(short, 2, 3, int);
179 VEC_UPDATE_DECL(short, 2, 4, int);
180 VEC_UPDATE_DECL(short, 2, 2, float);
181 VEC_UPDATE_DECL(short, 2, 3, float);
182 VEC_UPDATE_DECL(short, 2, 4, float);
183 VEC_UPDATE_DECL(short, 2, 2, double);
184 VEC_UPDATE_DECL(short, 2, 3, double);
185 VEC_UPDATE_DECL(short, 2, 4, double);
186
187 VEC_UPDATE_DECL(short, 3, 2, unsigned char);
188 VEC_UPDATE_DECL(short, 3, 3, unsigned char);
189 VEC_UPDATE_DECL(short, 3, 4, unsigned char);
190 VEC_UPDATE_DECL(short, 3, 2, char);
191 VEC_UPDATE_DECL(short, 3, 3, char);
192 VEC_UPDATE_DECL(short, 3, 4, char);
193 VEC_UPDATE_DECL(short, 3, 2, unsigned short);
194 VEC_UPDATE_DECL(short, 3, 3, unsigned short);
195 VEC_UPDATE_DECL(short, 3, 4, unsigned short);
196 VEC_UPDATE_DECL(short, 3, 2, short);
197 VEC_UPDATE_DECL(short, 3, 3, short);
198 VEC_UPDATE_DECL(short, 3, 4, short);
199 VEC_UPDATE_DECL(short, 3, 2, int);
200 VEC_UPDATE_DECL(short, 3, 3, int);
201 VEC_UPDATE_DECL(short, 3, 4, int);
202 VEC_UPDATE_DECL(short, 3, 2, float);
203 VEC_UPDATE_DECL(short, 3, 3, float);
204 VEC_UPDATE_DECL(short, 3, 4, float);
205 VEC_UPDATE_DECL(short, 3, 2, double);
206 VEC_UPDATE_DECL(short, 3, 3, double);
207 VEC_UPDATE_DECL(short, 3, 4, double);
208
209 VEC_UPDATE_DECL(unsigned short, 2, 2, unsigned char);
210 VEC_UPDATE_DECL(unsigned short, 2, 3, unsigned char);
211 VEC_UPDATE_DECL(unsigned short, 2, 4, unsigned char);
212 VEC_UPDATE_DECL(unsigned short, 2, 2, char);
213 VEC_UPDATE_DECL(unsigned short, 2, 3, char);
214 VEC_UPDATE_DECL(unsigned short, 2, 4, char);
215 VEC_UPDATE_DECL(unsigned short, 2, 2, unsigned short);
216 VEC_UPDATE_DECL(unsigned short, 2, 3, unsigned short);
217 VEC_UPDATE_DECL(unsigned short, 2, 4, unsigned short);
218 VEC_UPDATE_DECL(unsigned short, 2, 2, short);
219 VEC_UPDATE_DECL(unsigned short, 2, 3, short);
220 VEC_UPDATE_DECL(unsigned short, 2, 4, short);
221 VEC_UPDATE_DECL(unsigned short, 2, 2, int);
222 VEC_UPDATE_DECL(unsigned short, 2, 3, int);
223 VEC_UPDATE_DECL(unsigned short, 2, 4, int);
224 VEC_UPDATE_DECL(unsigned short, 2, 2, float);
225 VEC_UPDATE_DECL(unsigned short, 2, 3, float);
226 VEC_UPDATE_DECL(unsigned short, 2, 4, float);
227 VEC_UPDATE_DECL(unsigned short, 2, 2, double);
228 VEC_UPDATE_DECL(unsigned short, 2, 3, double);
229 VEC_UPDATE_DECL(unsigned short, 2, 4, double);
230
231 VEC_UPDATE_DECL(unsigned short, 3, 2, unsigned char);
232 VEC_UPDATE_DECL(unsigned short, 3, 3, unsigned char);
233 VEC_UPDATE_DECL(unsigned short, 3, 4, unsigned char);
234 VEC_UPDATE_DECL(unsigned short, 3, 2, char);
235 VEC_UPDATE_DECL(unsigned short, 3, 3, char);
236 VEC_UPDATE_DECL(unsigned short, 3, 4, char);
237 VEC_UPDATE_DECL(unsigned short, 3, 2, unsigned short);
238 VEC_UPDATE_DECL(unsigned short, 3, 3, unsigned short);
239 VEC_UPDATE_DECL(unsigned short, 3, 4, unsigned short);
240 VEC_UPDATE_DECL(unsigned short, 3, 2, short);
241 VEC_UPDATE_DECL(unsigned short, 3, 3, short);
242 VEC_UPDATE_DECL(unsigned short, 3, 4, short);
243 VEC_UPDATE_DECL(unsigned short, 3, 2, int);
244 VEC_UPDATE_DECL(unsigned short, 3, 3, int);
245 VEC_UPDATE_DECL(unsigned short, 3, 4, int);
246 VEC_UPDATE_DECL(unsigned short, 3, 2, float);
247 VEC_UPDATE_DECL(unsigned short, 3, 3, float);
248 VEC_UPDATE_DECL(unsigned short, 3, 4, float);
249 VEC_UPDATE_DECL(unsigned short, 3, 2, double);
250 VEC_UPDATE_DECL(unsigned short, 3, 3, double);
251 VEC_UPDATE_DECL(unsigned short, 3, 4, double);
252
253 VEC_UPDATE_DECL(int, 2, 2, unsigned char);
254 VEC_UPDATE_DECL(int, 2, 3, unsigned char);
255 VEC_UPDATE_DECL(int, 2, 4, unsigned char);
256 VEC_UPDATE_DECL(int, 2, 2, char);
257 VEC_UPDATE_DECL(int, 2, 3, char);
258 VEC_UPDATE_DECL(int, 2, 4, char);
259 VEC_UPDATE_DECL(int, 2, 2, unsigned short);
260 VEC_UPDATE_DECL(int, 2, 3, unsigned short);
261 VEC_UPDATE_DECL(int, 2, 4, unsigned short);
262 VEC_UPDATE_DECL(int, 2, 2, short);
263 VEC_UPDATE_DECL(int, 2, 3, short);
264 VEC_UPDATE_DECL(int, 2, 4, short);
265 VEC_UPDATE_DECL(int, 2, 2, int);
266 VEC_UPDATE_DECL(int, 2, 3, int);
267 VEC_UPDATE_DECL(int, 2, 4, int);
268 VEC_UPDATE_DECL(int, 2, 2, float);
269 VEC_UPDATE_DECL(int, 2, 3, float);
270 VEC_UPDATE_DECL(int, 2, 4, float);
271 VEC_UPDATE_DECL(int, 2, 2, double);
272 VEC_UPDATE_DECL(int, 2, 3, double);
273 VEC_UPDATE_DECL(int, 2, 4, double);
274
275 VEC_UPDATE_DECL(int, 3, 2, unsigned char);
276 VEC_UPDATE_DECL(int, 3, 3, unsigned char);
277 VEC_UPDATE_DECL(int, 3, 4, unsigned char);
278 VEC_UPDATE_DECL(int, 3, 2, char);
279 VEC_UPDATE_DECL(int, 3, 3, char);
280 VEC_UPDATE_DECL(int, 3, 4, char);
281 VEC_UPDATE_DECL(int, 3, 2, unsigned short);
282 VEC_UPDATE_DECL(int, 3, 3, unsigned short);
283 VEC_UPDATE_DECL(int, 3, 4, unsigned short);
284 VEC_UPDATE_DECL(int, 3, 2, short);
285 VEC_UPDATE_DECL(int, 3, 3, short);
286 VEC_UPDATE_DECL(int, 3, 4, short);
287 VEC_UPDATE_DECL(int, 3, 2, int);
288 VEC_UPDATE_DECL(int, 3, 3, int);
289 VEC_UPDATE_DECL(int, 3, 4, int);
290 VEC_UPDATE_DECL(int, 3, 2, float);
291 VEC_UPDATE_DECL(int, 3, 3, float);
292 VEC_UPDATE_DECL(int, 3, 4, float);
293 VEC_UPDATE_DECL(int, 3, 2, double);
294 VEC_UPDATE_DECL(int, 3, 3, double);
295 VEC_UPDATE_DECL(int, 3, 4, double);
296
297 VEC_UPDATE_DECL(float, 2, 2, unsigned char);
298 VEC_UPDATE_DECL(float, 2, 3, unsigned char);
299 VEC_UPDATE_DECL(float, 2, 4, unsigned char);
300 VEC_UPDATE_DECL(float, 2, 2, char);
301 VEC_UPDATE_DECL(float, 2, 3, char);
302 VEC_UPDATE_DECL(float, 2, 4, char);
303 VEC_UPDATE_DECL(float, 2, 2, unsigned short);
304 VEC_UPDATE_DECL(float, 2, 3, unsigned short);
305 VEC_UPDATE_DECL(float, 2, 4, unsigned short);
306 VEC_UPDATE_DECL(float, 2, 2, short);
307 VEC_UPDATE_DECL(float, 2, 3, short);
308 VEC_UPDATE_DECL(float, 2, 4, short);
309 VEC_UPDATE_DECL(float, 2, 2, int);
310 VEC_UPDATE_DECL(float, 2, 3, int);
311 VEC_UPDATE_DECL(float, 2, 4, int);
312 VEC_UPDATE_DECL(float, 2, 2, float);
313 VEC_UPDATE_DECL(float, 2, 3, float);
314 VEC_UPDATE_DECL(float, 2, 4, float);
315 VEC_UPDATE_DECL(float, 2, 2, double);
316 VEC_UPDATE_DECL(float, 2, 3, double);
317 VEC_UPDATE_DECL(float, 2, 4, double);
318
319 VEC_UPDATE_DECL(float, 3, 2, unsigned char);
320 VEC_UPDATE_DECL(float, 3, 3, unsigned char);
321 VEC_UPDATE_DECL(float, 3, 4, unsigned char);
322 VEC_UPDATE_DECL(float, 3, 2, char);
323 VEC_UPDATE_DECL(float, 3, 3, char);
324 VEC_UPDATE_DECL(float, 3, 4, char);
325 VEC_UPDATE_DECL(float, 3, 2, unsigned short);
326 VEC_UPDATE_DECL(float, 3, 3, unsigned short);
327 VEC_UPDATE_DECL(float, 3, 4, unsigned short);
328 VEC_UPDATE_DECL(float, 3, 2, short);
329 VEC_UPDATE_DECL(float, 3, 3, short);
330 VEC_UPDATE_DECL(float, 3, 4, short);
331 VEC_UPDATE_DECL(float, 3, 2, int);
332 VEC_UPDATE_DECL(float, 3, 3, int);
333 VEC_UPDATE_DECL(float, 3, 4, int);
334 VEC_UPDATE_DECL(float, 3, 2, float);
335 VEC_UPDATE_DECL(float, 3, 3, float);
336 VEC_UPDATE_DECL(float, 3, 4, float);
337 VEC_UPDATE_DECL(float, 3, 2, double);
338 VEC_UPDATE_DECL(float, 3, 3, double);
339 VEC_UPDATE_DECL(float, 3, 4, double);
340   
341 VEC_UPDATE_DECL(double, 2, 2, unsigned char);
342 VEC_UPDATE_DECL(double, 2, 3, unsigned char);
343 VEC_UPDATE_DECL(double, 2, 4, unsigned char);
344 VEC_UPDATE_DECL(double, 2, 2, char);
345 VEC_UPDATE_DECL(double, 2, 3, char);
346 VEC_UPDATE_DECL(double, 2, 4, char);
347 VEC_UPDATE_DECL(double, 2, 2, unsigned short);
348 VEC_UPDATE_DECL(double, 2, 3, unsigned short);
349 VEC_UPDATE_DECL(double, 2, 4, unsigned short);
350 VEC_UPDATE_DECL(double, 2, 2, short);
351 VEC_UPDATE_DECL(double, 2, 3, short);
352 VEC_UPDATE_DECL(double, 2, 4, short);
353 VEC_UPDATE_DECL(double, 2, 2, int);
354 VEC_UPDATE_DECL(double, 2, 3, int);
355 VEC_UPDATE_DECL(double, 2, 4, int);
356 VEC_UPDATE_DECL(double, 2, 2, float);
357 VEC_UPDATE_DECL(double, 2, 3, float);
358 VEC_UPDATE_DECL(double, 2, 4, float);
359 VEC_UPDATE_DECL(double, 2, 2, double);
360 VEC_UPDATE_DECL(double, 2, 3, double);
361 VEC_UPDATE_DECL(double, 2, 4, double);
362
363 VEC_UPDATE_DECL(double, 3, 2, unsigned char);
364 VEC_UPDATE_DECL(double, 3, 3, unsigned char);
365 VEC_UPDATE_DECL(double, 3, 4, unsigned char);
366 VEC_UPDATE_DECL(double, 3, 2, char);
367 VEC_UPDATE_DECL(double, 3, 3, char);
368 VEC_UPDATE_DECL(double, 3, 4, char);
369 VEC_UPDATE_DECL(double, 3, 2, unsigned short);
370 VEC_UPDATE_DECL(double, 3, 3, unsigned short);
371 VEC_UPDATE_DECL(double, 3, 4, unsigned short);
372 VEC_UPDATE_DECL(double, 3, 2, short);
373 VEC_UPDATE_DECL(double, 3, 3, short);
374 VEC_UPDATE_DECL(double, 3, 4, short);
375 VEC_UPDATE_DECL(double, 3, 2, int);
376 VEC_UPDATE_DECL(double, 3, 3, int);
377 VEC_UPDATE_DECL(double, 3, 4, int);
378 VEC_UPDATE_DECL(double, 3, 2, float);
379 VEC_UPDATE_DECL(double, 3, 3, float);
380 VEC_UPDATE_DECL(double, 3, 4, float);
381 VEC_UPDATE_DECL(double, 3, 2, double);
382 VEC_UPDATE_DECL(double, 3, 3, double);
383 VEC_UPDATE_DECL(double, 3, 4, double);  
384
385 //#include "clitkImageConvertGenericFilter.txx"
386
387 } // end namespace
388
389 #endif /* end #define CLITKIMAGECONVERTGENERICFILTER_H */
390