]> Creatis software - bbtk.git/blob - packages/itk/src/bbitkImage.h
#3480 Bug typeid in Macos
[bbtk.git] / packages / itk / src / bbitkImage.h
1 /*
2  # ---------------------------------------------------------------------
3  #
4  # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5  #                        pour la SantÈ)
6  # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7  # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8  # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9  #
10  #  This software is governed by the CeCILL-B license under French law and
11  #  abiding by the rules of distribution of free software. You can  use,
12  #  modify and/ or redistribute the software under the terms of the CeCILL-B
13  #  license as circulated by CEA, CNRS and INRIA at the following URL
14  #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15  #  or in the file LICENSE.txt.
16  #
17  #  As a counterpart to the access to the source code and  rights to copy,
18  #  modify and redistribute granted by the license, users are provided only
19  #  with a limited warranty  and the software's author,  the holder of the
20  #  economic rights,  and the successive licensors  have only  limited
21  #  liability.
22  #
23  #  The fact that you are presently reading this means that you have had
24  #  knowledge of the CeCILL-B license and that you accept its terms.
25  # ------------------------------------------------------------------------ */
26
27
28 /*=========================================================================
29   Program:   bbtk
30   Module:    $RCSfile: bbitkImage.h,v $
31   Language:  C++
32   Date:      $Date: 2012/11/16 08:50:39 $
33   Version:   $Revision: 1.9 $
34 =========================================================================*/
35
36
37
38
39 #ifdef _USE_ITK_
40
41 #ifndef __BBITKIMAGE_H_INCLUDED__
42 #define __BBITKIMAGE_H_INCLUDED__
43
44 #include "itkImage.h"
45 #include "bbtkAny.h"
46 #include "bbtkSystem.h"
47
48 namespace bbitk
49 {
50
51   // bbtk typedefs for itk images
52 #define BBTK_TYPEDEF_ITK_IMAGE(TYPE,DIM)                                \
53   typedef itk::Image<TYPE,DIM> Image_##TYPE##_##DIM;                    \
54     typedef const Image_##TYPE##_##DIM Image_##TYPE##_##DIM##_c;        \
55   typedef Image_##TYPE##_##DIM * Image_##TYPE##_##DIM##_ptr;            \
56   typedef Image_##TYPE##_##DIM##_c * Image_##TYPE##_##DIM##_cptr;
57
58
59 #define BBTK_TYPEDEF_ITK_IMAGES_DIM(DIM)        \
60   BBTK_TYPEDEF_ITK_IMAGE(int8_t,DIM);           \
61     BBTK_TYPEDEF_ITK_IMAGE(uint8_t,DIM);        \
62     BBTK_TYPEDEF_ITK_IMAGE(int16_t,DIM);        \
63     BBTK_TYPEDEF_ITK_IMAGE(uint16_t,DIM);       \
64     BBTK_TYPEDEF_ITK_IMAGE(int32_t,DIM);        \
65     BBTK_TYPEDEF_ITK_IMAGE(uint32_t,DIM);       \
66     BBTK_TYPEDEF_ITK_IMAGE(float,DIM);          \
67     BBTK_TYPEDEF_ITK_IMAGE(double,DIM)
68  
69   BBTK_TYPEDEF_ITK_IMAGES_DIM(2);
70   BBTK_TYPEDEF_ITK_IMAGES_DIM(3);
71   BBTK_TYPEDEF_ITK_IMAGES_DIM(4);
72   //BBTK_TYPEDEF_ITK_IMAGES_DIM(5)
73
74
75 //  printf("EEDitk TYPE_INFO=%s  %s\n", TYPE_INFO.name(),  typeid(bbitk::Image_int8_t_3_##CONST##ptr).name()  ); \
76
77 #define BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO)  \
78 if ( TYPE_INFO == typeid(bbitk::Image_uint16_t_3_ptr) )  { printf ("Yes\n"); }else{  printf ("No\n"); } \
79 if ( strcmp(TYPE_INFO.name()  , typeid(bbitk::Image_uint16_t_3_ptr).name() ) ==0 )  { printf ("Yes\n"); }else{  printf ("No\n"); } \
80   printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint8_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint8_t_3_ptr).name()  ); \
81   printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint16_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint16_t_3_ptr).name()  ); \
82   printf("EEDitk TYPE_INFO=<%s> <%s> <%s>\n", TYPE_INFO.name(), bbtk::demangle_type_name(typeid(bbitk::Image_uint32_t_3_ptr).name()).c_str() , typeid(bbitk::Image_uint32_t_3_ptr).name()  ); \
83 if (false) {}
84
85 #define BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) else { bbtkError("bbtk was not built for itk images of type <"<< bbtk::demangle_type_name(TYPE_INFO.name())<<">"); }
86
87 #define BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,MESSAGE) else { bbtkError(MESSAGE); }
88
89   /// Generic macro which calls a TEMPLATE_FUNCTION instanciated 
90   /// on TEMPLATE_TYPE iff TYPE_INFO == typeid(TEST_TYPE).
91   /// This macro must be used (maybe several times) between a pair of BEGIN_TEMPLATE_SWITCH and END_TEMPLATE_SWITCH macros
92
93
94 // 2021-12-15
95 // else if (TYPE_INFO == typeid(bbitk::TEST_TYPE))                                       \
96
97 #define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE)            \
98     else if ( strcmp(TYPE_INFO.name()  , typeid(bbitk::TEST_TYPE).name() ) ==0 )        \
99     { TEMPLATE_FUNCTION<bbitk::TEMPLATE_TYPE>(); }
100
101
102 // DIMENSION 2
103 #ifdef BBTK_ITK_IMAGE_DIM_2
104 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t
105 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST)                 \
106   TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_2_##CONST##ptr,FUN,Image_int8_t_2)
107 #  else
108 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST)
109 #  endif
110 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t
111 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST)                \
112   TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_2_##CONST##ptr,FUN,Image_int16_t_2)
113 #  else
114 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST)
115 #  endif
116 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t
117 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_2(TYPE_INFO,FUN,CONST)                \
118   TEMPLATE_SWITCH(TYPE_INFO,Image_int32_t_2_##CONST##ptr,FUN,Image_int32_t_2)
119 #  else
120 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_2(TYPE_INFO,FUN,CONST)
121 #  endif
122 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
123 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,CONST)                \
124   TEMPLATE_SWITCH(TYPE_INFO,Image_uint8_t_2_##CONST##ptr,FUN,Image_uint8_t_2)
125 #  else
126 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,CONST)
127 #  endif
128 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t
129 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST)               \
130   TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_2_##CONST##ptr,FUN,Image_uint16_t_2)
131 #  else
132 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST)
133 #  endif
134 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t
135 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,CONST)               \
136   TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_2_##CONST##ptr,FUN,Image_uint32_t_2)
137 #  else
138 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,CONST)
139 #  endif
140 #  ifdef BBTK_ITK_IMAGE_TYPE_float
141 #    define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST)                  \
142   TEMPLATE_SWITCH(TYPE_INFO,Image_float_2_##CONST##ptr,FUN,Image_float_2)
143 #  else
144 #    define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST)
145 #  endif
146 #  ifdef BBTK_ITK_IMAGE_TYPE_double
147 #    define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST)                 \
148   TEMPLATE_SWITCH(TYPE_INFO,Image_double_2_##CONST##ptr,FUN,Image_double_2)
149 #  else
150 #    define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST)
151 #  endif
152 #else
153 #  define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) 
154 #  define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST)
155 #  define BBTK_SWITCH_ITK_IMAGE_int32_t_2(TYPE_INFO,FUN,CONST)
156 #  define BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,CONST)
157 #  define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST)
158 #  define BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,CONST)
159 #  define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST)
160 #  define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST)
161 #endif
162
163 // DIMENSION 3
164 #ifdef BBTK_ITK_IMAGE_DIM_3
165 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
166 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)                 \
167   TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_3_##CONST##ptr,FUN,Image_int8_t_3)
168 #  else
169 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
170 #  endif
171 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t
172 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)                \
173   TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_3_##CONST##ptr,FUN,Image_int16_t_3)
174 #  else
175 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
176 #  endif
177 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t
178 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)                \
179   TEMPLATE_SWITCH(TYPE_INFO,Image_int32_t_3_##CONST##ptr,FUN,Image_int32_t_3)
180 #  else
181 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
182 #  endif
183 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
184 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)                \
185   TEMPLATE_SWITCH(TYPE_INFO,Image_uint8_t_3_##CONST##ptr,FUN,Image_uint8_t_3)
186 #  else
187 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
188 #  endif
189 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t
190 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)               \
191   TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_3_##CONST##ptr,FUN,Image_uint16_t_3)
192 #  else
193 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
194 #  endif
195 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t
196 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)               \
197   TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_3_##CONST##ptr,FUN,Image_uint32_t_3)
198 #  else
199 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
200 #  endif
201 #  ifdef BBTK_ITK_IMAGE_TYPE_float
202 #    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)                  \
203   TEMPLATE_SWITCH(TYPE_INFO,Image_float_3_##CONST##ptr,FUN,Image_float_3)
204 #  else
205 #    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
206 #  endif
207 #  ifdef BBTK_ITK_IMAGE_TYPE_double
208 #    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)                 \
209   TEMPLATE_SWITCH(TYPE_INFO,Image_double_3_##CONST##ptr,FUN,Image_double_3)
210 #  else
211 #    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
212 #  endif
213 #else
214 #  define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
215 #  define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
216 #  define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
217 #  define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
218 #  define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
219 #  define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
220 #  define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
221 #  define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
222 #endif
223
224
225 /* EED
226 // DIMENSION 3
227 #ifdef BBTK_ITK_IMAGE_DIM_3
228 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t
229 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)                 \
230   TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_3_ptr,FUN,Image_int8_t_3)
231 #  else
232 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
233 #  endif
234 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t
235 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)        \
236   TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_3_ptr,FUN,Image_int16_t_3)
237 #  else
238 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
239 #  endif
240 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t
241 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)        \
242   TEMPLATE_SWITCH(TYPE_INFO,Image_int32_t_3_ptr,FUN,Image_int32_t_3)
243 #  else
244 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
245 #  endif
246 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t
247 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)        \
248   TEMPLATE_SWITCH(TYPE_INFO,Image_uint8_t_3_ptr,FUN,Image_uint8_t_3)
249 #  else
250 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
251 #  endif
252 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t
253 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)        \
254   TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_3_,FUN,Image_uint16_t_3)
255 #  else
256 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
257 #  endif
258 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t
259 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)        \
260   TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_3_ptr,FUN,Image_uint32_t_3)
261 #  else
262 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
263 #  endif
264 #  ifdef BBTK_ITK_IMAGE_TYPE_float
265 #    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)                  \
266   TEMPLATE_SWITCH(TYPE_INFO,Image_float_3_ptr,FUN,Image_float_3)
267 #  else
268 #    define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
269 #  endif
270 #  ifdef BBTK_ITK_IMAGE_TYPE_double
271 #    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)                 \
272   TEMPLATE_SWITCH(TYPE_INFO,Image_double_3_ptr,FUN,Image_double_3)
273 #  else
274 #    define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
275 #  endif
276 #else
277 #  define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST)
278 #  define BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,CONST)
279 #  define BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,CONST)
280 #  define BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,CONST)
281 #  define BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,CONST)
282 #  define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST)
283 #  define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST)
284 #  define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST)
285 #endif
286 */
287
288
289
290   // DIMENSION 4
291 #ifdef BBTK_ITK_IMAGE_DIM_4
292 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
293 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST)                 \
294   TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_4_##CONST##ptr,FUN,Image_int8_t_4)
295 #  else
296 #    define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST)
297 #  endif
298 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t
299 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_4(TYPE_INFO,FUN,CONST)                \
300   TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_4_##CONST##ptr,FUN,Image_int16_t_4)
301 #  else
302 #    define BBTK_SWITCH_ITK_IMAGE_int16_t_4(TYPE_INFO,FUN,CONST)
303 #  endif
304 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t
305 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_4(TYPE_INFO,FUN,CONST)                \
306   TEMPLATE_SWITCH(TYPE_INFO,Image_int32_t_4_##CONST##ptr,FUN,Image_int32_t_4)
307 #  else
308 #    define BBTK_SWITCH_ITK_IMAGE_int32_t_4(TYPE_INFO,FUN,CONST)
309 #  endif
310 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
311 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_4(TYPE_INFO,FUN,CONST)                \
312   TEMPLATE_SWITCH(TYPE_INFO,Image_uint8_t_4_##CONST##ptr,FUN,Image_uint8_t_4)
313 #  else
314 #    define BBTK_SWITCH_ITK_IMAGE_uint8_t_4(TYPE_INFO,FUN,CONST)
315 #  endif
316 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t
317 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,CONST)               \
318   TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_4_##CONST##ptr,FUN,Image_uint16_t_4)
319 #  else
320 #    define BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,CONST)
321 #  endif
322 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t
323 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST)               \
324   TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_4_##CONST##ptr,FUN,Image_uint32_t_4)
325 #  else
326 #    define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST)
327 #  endif
328 #  ifdef BBTK_ITK_IMAGE_TYPE_float
329 #    define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST)                  \
330   TEMPLATE_SWITCH(TYPE_INFO,Image_float_4_##CONST##ptr,FUN,Image_float_4)
331 #  else
332 #    define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST)
333 #  endif
334 #  ifdef BBTK_ITK_IMAGE_TYPE_double
335 #    define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST)                 \
336   TEMPLATE_SWITCH(TYPE_INFO,Image_double_4_##CONST##ptr,FUN,Image_double_4)
337 #  else
338 #    define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST)
339 #  endif
340 #else
341 #  define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) 
342 #  define BBTK_SWITCH_ITK_IMAGE_int16_t_4(TYPE_INFO,FUN,CONST)
343 #  define BBTK_SWITCH_ITK_IMAGE_int32_t_4(TYPE_INFO,FUN,CONST)
344 #  define BBTK_SWITCH_ITK_IMAGE_uint8_t_4(TYPE_INFO,FUN,CONST)
345 #  define BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,CONST)
346 #  define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST)
347 #  define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST)
348 #  define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST)
349 #endif
350
351
352   /// General macro which calls the template function FUN instanciated 
353   /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). 
354 #define BBTK_TEMPLATE_ITK_IMAGE_SWITCH(TYPE_INFO,FUN)   \
355   BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO)                 \
356     BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,)      \
357     BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,)     \
358     BBTK_SWITCH_ITK_IMAGE_int32_t_2(TYPE_INFO,FUN,)     \
359     BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,)     \
360     BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,)    \
361     BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,)    \
362     BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,)       \
363     BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,)      \
364     BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,)      \
365     BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,)     \
366     BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,)     \
367     BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,)     \
368     BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,)    \
369     BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,)    \
370     BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,)       \
371     BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,)      \
372     BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,)      \
373     BBTK_SWITCH_ITK_IMAGE_int16_t_4(TYPE_INFO,FUN,)     \
374     BBTK_SWITCH_ITK_IMAGE_int32_t_4(TYPE_INFO,FUN,)     \
375     BBTK_SWITCH_ITK_IMAGE_uint8_t_4(TYPE_INFO,FUN,)     \
376     BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,)    \
377     BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,)    \
378     BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,)       \
379     BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,)      \
380   BBTK_END_TEMPLATE_SWITCH(TYPE_INFO)
381
382
383
384   /// General macro which calls the template function FUN instanciated 
385   /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). 
386 #define BBTK_TEMPLATE_ITK_IMAGE_DIM_3_SWITCH(TYPE_INFO,FUN,ERROR_MESSAGE) \
387   BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO)                 \
388     BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,)      \
389     BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,)     \
390     BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,)     \
391     BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,)     \
392     BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,)    \
393     BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,)    \
394     BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,)       \
395     BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,)      \
396   BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,ERROR_MESSAGE)
397
398
399   /// General macro which calls the template function FUN instanciated 
400   /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). 
401
402 #define BBTK_TEMPLATE_CONST_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \
403   BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO)                 \
404     BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,c)     \
405     BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,c)    \
406     BBTK_SWITCH_ITK_IMAGE_int32_t_2(TYPE_INFO,FUN,c)    \
407     BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,c)    \
408     BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,c)   \
409     BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,c)   \
410     BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,c)      \
411     BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,c)     \
412     BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,c)     \
413     BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,c)    \
414     BBTK_SWITCH_ITK_IMAGE_int32_t_3(TYPE_INFO,FUN,c)    \
415     BBTK_SWITCH_ITK_IMAGE_uint8_t_3(TYPE_INFO,FUN,c)    \
416     BBTK_SWITCH_ITK_IMAGE_uint16_t_3(TYPE_INFO,FUN,c)   \
417     BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,c)   \
418     BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,c)      \
419     BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,c)     \
420     BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,c)     \
421     BBTK_SWITCH_ITK_IMAGE_int16_t_4(TYPE_INFO,FUN,c)    \
422     BBTK_SWITCH_ITK_IMAGE_int32_t_4(TYPE_INFO,FUN,c)    \
423     BBTK_SWITCH_ITK_IMAGE_uint8_t_4(TYPE_INFO,FUN,c)    \
424     BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,c)   \
425     BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,c)   \
426     BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,c)      \
427     BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,c)     \
428   BBTK_END_TEMPLATE_SWITCH(TYPE_INFO)      
429
430 #define BBTK_GITIFPTI_DIM(DIM)                          \
431   if (pti == typeid(unsigned char))                     \
432     return typeid(itk::Image<unsigned char,DIM>*);      \
433     if (pti == typeid(unsigned short))                  \
434       return typeid(itk::Image<unsigned short,DIM>*);   \
435     if (pti == typeid(unsigned int))                    \
436       return typeid(itk::Image<unsigned int,DIM>*);     \
437     if (pti == typeid(unsigned long))                   \
438       return typeid(itk::Image<unsigned long,DIM>*);    \
439     if (pti == typeid(signed char))                     \
440       return typeid(itk::Image<signed char,DIM>*);      \
441     if (pti == typeid(signed short))                    \
442       return typeid(itk::Image<signed short,DIM>*);     \
443     if (pti == typeid(signed int))                      \
444       return typeid(itk::Image<signed int,DIM>*);       \
445     if (pti == typeid(signed long))                     \
446       return typeid(itk::Image<signed long,DIM>*);      \
447     if (pti == typeid(float))                           \
448       return typeid(itk::Image<float,DIM>*);            \
449     if (pti == typeid(double))                          \
450       return typeid(itk::Image<double,DIM>*);
451
452
453   inline bbtk::TypeInfo GetITKImagePtrTypeInfoFromPixelTypeInfoAndDimension( 
454                                                                             bbtk::TypeInfo pti,
455                                                                             unsigned int dim )
456   {
457     if      (dim==2) { BBTK_GITIFPTI_DIM(2); }
458     else if (dim==3) { BBTK_GITIFPTI_DIM(3); }
459     else if (dim==4) { BBTK_GITIFPTI_DIM(4); }
460     else 
461       {
462         //bbtkGlobalError("GetImageTypeInfoFromPixelTypeInfo : itk::Images not compiled for dim "<<dim);
463         return typeid(void);
464       }
465     return typeid(void);
466   }
467
468
469 #undef BBTK_GITIFPTI_DIM
470
471
472 ///
473 template <typename ValueType>
474 class TypeMapping
475 {
476 public:
477   TypeMapping() {}
478
479   template <typename T>
480   ValueType& value()
481   {
482     return m_map[ (void*)typeid(T).name() ];
483   }
484   template <typename T>
485   ValueType& operator[]( const T& )
486   {
487     return m_map[ (void*)typeid(T).name() ];
488   }
489
490   ValueType& operator[]( const std::type_info& t)
491   {
492     return m_map[ (void*)t.name() ];
493   }
494   
495   unsigned int size() const { return m_map.size(); }
496
497   typedef typename std::map<void*, ValueType>::const_iterator const_iterator;
498
499   const_iterator begin() const { return m_map.begin(); }
500   const_iterator end() const { return m_map.end(); }
501
502 protected:
503   std::map<void*, ValueType> m_map;
504 };
505
506 #define BBTK_BUILD_ITK_IMAGE_FUNCTION_MAPPING(MAP,FUN)                         \
507     MAP.value<bbtk::Image_int8_t_2_ptr>() = FUN<bbtk::Image_int8_t_2_ptr>;     \
508     MAP.value<bbtk::Image_int16_t_2_ptr>() = FUN<bbtk::Image_int16_t_2_ptr>;   \
509     MAP.value<bbtk::Image_int32_t_2_ptr>() = FUN<bbtk::Image_int32_t_2_ptr>;   \
510     MAP.value<bbtk::Image_uint8_t_2_ptr>() = FUN<bbtk::Image_uint8_t_2_ptr>;   \
511     MAP.value<bbtk::Image_uint16_t_2_ptr>() = FUN<bbtk::Image_uint16_t_2_ptr>; \
512     MAP.value<bbtk::Image_uint32_t_2_ptr>() = FUN<bbtk::Image_uint32_t_2_ptr>; \
513     MAP.value<bbtk::Image_float_2_ptr>() = FUN<bbtk::Image_float_2_ptr>;       \
514     MAP.value<bbtk::Image_double_2_ptr>() = FUN<bbtk::Image_double_2_ptr>;     \
515     MAP.value<bbtk::Image_int8_t_3_ptr>() = FUN<bbtk::Image_int8_t_3_ptr>;     \
516     MAP.value<bbtk::Image_int16_t_3_ptr>() = FUN<bbtk::Image_int16_t_3_ptr>;   \
517     MAP.value<bbtk::Image_int32_t_3_ptr>() = FUN<bbtk::Image_int32_t_3_ptr>;   \
518     MAP.value<bbtk::Image_uint8_t_3_ptr>() = FUN<bbtk::Image_uint8_t_3_ptr>;   \
519     MAP.value<bbtk::Image_uint16_t_3_ptr>() = FUN<bbtk::Image_uint16_t_3_ptr>; \
520     MAP.value<bbtk::Image_uint32_t_3_ptr>() = FUN<bbtk::Image_uint32_t_3_ptr>; \
521     MAP.value<bbtk::Image_float_3_ptr>() = FUN<bbtk::Image_float_3_ptr>;       \
522     MAP.value<bbtk::Image_double_3_ptr>() = FUN<bbtk::Image_double_3_ptr>;     \
523     MAP.value<bbtk::Image_int8_t_4_ptr>() = FUN<bbtk::Image_int8_t_4_ptr>;     \
524     MAP.value<bbtk::Image_int16_t_4_ptr>() = FUN<bbtk::Image_int16_t_4_ptr>;   \
525     MAP.value<bbtk::Image_int32_t_4_ptr>() = FUN<bbtk::Image_int32_t_4_ptr>;   \
526     MAP.value<bbtk::Image_uint8_t_4_ptr>() = FUN<bbtk::Image_uint8_t_4_ptr>;   \
527     MAP.value<bbtk::Image_uint16_t_4_ptr>() = FUN<bbtk::Image_uint16_t_4_ptr>; \
528     MAP.value<bbtk::Image_uint32_t_4_ptr>() = FUN<bbtk::Image_uint32_t_4_ptr>; \
529     MAP.value<bbtk::Image_float_4_ptr>() = FUN<bbtk::Image_float_4_ptr>;       \
530     MAP.value<bbtk::Image_double_4_ptr>() = FUN<bbtk::Image_double_4_ptr>; 
531
532   //=======================================================================
533
534
535   //=======================================================================
536   // Type traits ImagePointer to define bbtk::any<ImagePointer>
537   /// The TypeTraits for all itk::Image pointer types 
538   template <typename T> struct ImagePointer { static const bool value = false; };
539
540   typedef bbtk::any<ImagePointer> anyImagePointer;
541
542   // Specialisations for instantiated image types 
543   // DIMENSION 2
544 #ifdef BBTK_ITK_IMAGE_DIM_2
545 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
546   template <> struct ImagePointer<Image_int8_t_2_ptr> { static const bool value = true; };
547 #  endif
548 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t 
549   template <> struct ImagePointer<Image_int16_t_2_ptr> { static const bool value = true; };
550 #  endif
551 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t 
552   template <> struct ImagePointer<Image_int32_t_2_ptr> { static const bool value = true; };
553 #  endif
554 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
555   template <> struct ImagePointer<Image_uint8_t_2_ptr> { static const bool value = true; };
556 #  endif
557 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t 
558   template <> struct ImagePointer<Image_uint16_t_2_ptr> { static const bool value = true; };
559 #  endif
560 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t 
561   template <> struct ImagePointer<Image_uint32_t_2_ptr> { static const bool value = true; };
562 #  endif
563 #  ifdef BBTK_ITK_IMAGE_TYPE_float
564   template <> struct ImagePointer<Image_float_2_ptr> { static const bool value = true; };
565 #  endif
566 #  ifdef BBTK_ITK_IMAGE_TYPE_double
567   template <> struct ImagePointer<Image_double_2_ptr> { static const bool value = true; };
568 #  endif
569 #endif
570
571
572
573 #ifdef BBTK_ITK_IMAGE_DIM_3
574 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
575   template <> struct ImagePointer<Image_int8_t_3_ptr> { static const bool value = true; };
576 #  endif
577 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t 
578   template <> struct ImagePointer<Image_int16_t_3_ptr> { static const bool value = true; };
579 #  endif
580 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t 
581   template <> struct ImagePointer<Image_int32_t_3_ptr> { static const bool value = true; };
582 #  endif
583 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
584   template <> struct ImagePointer<Image_uint8_t_3_ptr> { static const bool value = true; };
585 #  endif
586 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t 
587   template <> struct ImagePointer<Image_uint16_t_3_ptr> { static const bool value = true; };
588 #  endif
589 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t 
590   template <> struct ImagePointer<Image_uint32_t_3_ptr> { static const bool value = true; };
591 #  endif
592 #  ifdef BBTK_ITK_IMAGE_TYPE_float
593   template <> struct ImagePointer<Image_float_3_ptr> { static const bool value = true; };
594 #  endif
595 #  ifdef BBTK_ITK_IMAGE_TYPE_double
596   template <> struct ImagePointer<Image_double_3_ptr> { static const bool value = true; };
597 #  endif
598 #endif
599
600
601
602 #ifdef BBTK_ITK_IMAGE_DIM_4
603 #  ifdef BBTK_ITK_IMAGE_TYPE_int8_t 
604   template <> struct ImagePointer<Image_int8_t_4_ptr> { static const bool value = true; };
605 #  endif
606 #  ifdef BBTK_ITK_IMAGE_TYPE_int16_t 
607   template <> struct ImagePointer<Image_int16_t_4_ptr> { static const bool value = true; };
608 #  endif
609 #  ifdef BBTK_ITK_IMAGE_TYPE_int32_t 
610   template <> struct ImagePointer<Image_int32_t_4_ptr> { static const bool value = true; };
611 #  endif
612 #  ifdef BBTK_ITK_IMAGE_TYPE_uint8_t 
613   template <> struct ImagePointer<Image_uint8_t_4_ptr> { static const bool value = true; };
614 #  endif
615 #  ifdef BBTK_ITK_IMAGE_TYPE_uint16_t 
616   template <> struct ImagePointer<Image_uint16_t_4_ptr> { static const bool value = true; };
617 #  endif
618 #  ifdef BBTK_ITK_IMAGE_TYPE_uint32_t 
619   template <> struct ImagePointer<Image_uint32_t_4_ptr> { static const bool value = true; };
620 #  endif
621 #  ifdef BBTK_ITK_IMAGE_TYPE_float
622   template <> struct ImagePointer<Image_float_4_ptr> { static const bool value = true; };
623 #  endif
624 #  ifdef BBTK_ITK_IMAGE_TYPE_double
625   template <> struct ImagePointer<Image_double_4_ptr> { static const bool value = true; };
626 #  endif
627 #endif
628
629
630 } // namespace bbitk
631
632 namespace bbtk
633 {
634   BBTK_DEFINE_HUMAN_READABLE_TYPE_NAME(bbitk::anyImagePointer,"anyItkImagePointer");
635 //  BBTK_DEFINE_HUMAN_READABLE_TYPE_NAME(bbitk::Image_double_2_ptr,"itkImageDouble3ptr");
636 //  BBTK_DEFINE_HUMAN_READABLE_TYPE_NAME(bbitk::Image_double_3_ptr,"itkImageDouble3ptr");
637
638  // Human readable names for itk images
639 // #define BBTK_HUMAN_READABLE_ITK_IMAGE_NAME(TYPE,DIM) std::string("itkImage")+HumanTypeName<TYPE>()+std::string(#DIM)+std::string("ptr")
640
641 #define BBTK_HUMAN_READABLE_ITK_IMAGE(TYPE,DIM)                                     \
642 template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >() \
643   { std::string n("itkImage");                                                      \
644         n+= HumanTypeName<TYPE>();                                                  \
645  n += std::string(#DIM);                                                            \
646 n += std::string("ptr");                                                            \
647         return n; }                                                                 \
648     template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >(const bbitk::Image_##TYPE##_##DIM##_ptr &)        \
649     { std::string n("itkImage");\
650  n+= HumanTypeName<TYPE>(); \
651         n += std::string(#DIM); \
652 n+= std::string("ptr"); \
653         return n; }                                                     \
654 template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_cptr >()            \
655   { std::string n("itkImage"); \
656         n+= HumanTypeName<TYPE>();\
657  n += std::string(#DIM);\
658 n += std::string("cptr"); \
659         return n; }                                                     \
660     template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_cptr >(const bbitk::Image_##TYPE##_##DIM##_cptr &)      \
661     { std::string n("itkImage");\
662  n+= HumanTypeName<TYPE>(); \
663         n += std::string(#DIM); \
664 n+= std::string("cptr"); \
665         return n; }
666
667 //BBTK_HUMAN_READABLE_ITK_IMAGE(int8_t,2);                      
668
669 //  BBTK_DEFINE_HUMAN_READABLE_TYPE_NAME(bbitk::Image_##TYPE##_##DIM##_ptr,BBTK_HUMAN_READABLE_ITK_IMAGE_NAME(TYPE,DIM) )
670
671         
672 #define BBTK_HUMAN_READABLE_ITK_IMAGES_DIM(DIM) \
673   BBTK_HUMAN_READABLE_ITK_IMAGE(int8_t,DIM);    \
674     BBTK_HUMAN_READABLE_ITK_IMAGE(uint8_t,DIM); \
675     BBTK_HUMAN_READABLE_ITK_IMAGE(int16_t,DIM); \
676     BBTK_HUMAN_READABLE_ITK_IMAGE(uint16_t,DIM);\
677     BBTK_HUMAN_READABLE_ITK_IMAGE(int32_t,DIM); \
678     BBTK_HUMAN_READABLE_ITK_IMAGE(uint32_t,DIM);\
679     BBTK_HUMAN_READABLE_ITK_IMAGE(float,DIM);   \
680     BBTK_HUMAN_READABLE_ITK_IMAGE(double,DIM)
681   
682   BBTK_HUMAN_READABLE_ITK_IMAGES_DIM(2);
683   BBTK_HUMAN_READABLE_ITK_IMAGES_DIM(3);
684   BBTK_HUMAN_READABLE_ITK_IMAGES_DIM(4);
685   //BBTK_HUMAN_READABLE_ITK_IMAGES_DIM(5)
686   
687
688 } // namespace bbtk
689
690 #endif
691 #endif