X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fitk%2Fsrc%2FbbitkImage.h;h=9f74cec6f3aa7bdc203351eb5837c1f17c8086de;hb=cfad95b6e08e6e53846ffcda7fbc5932065f2c47;hp=5ecf12bf825831a26ca020239f0a9aac7a49f51c;hpb=98ab778755e68bd1b55dd41f20222b91bde7dd5a;p=bbtk.git diff --git a/packages/itk/src/bbitkImage.h b/packages/itk/src/bbitkImage.h index 5ecf12b..9f74cec 100644 --- a/packages/itk/src/bbitkImage.h +++ b/packages/itk/src/bbitkImage.h @@ -1,32 +1,39 @@ -/*========================================================================= +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + +/*========================================================================= Program: bbtk Module: $RCSfile: bbitkImage.h,v $ Language: C++ - Date: $Date: 2008/11/27 14:58:06 $ - Version: $Revision: 1.5 $ + Date: $Date: 2012/11/16 08:50:39 $ + Version: $Revision: 1.9 $ =========================================================================*/ -/* --------------------------------------------------------------------- - -* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) -* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux -* -* This software is governed by the CeCILL-B license under French law and -* abiding by the rules of distribution of free software. You can use, -* modify and/ or redistribute the software under the terms of the CeCILL-B -* license as circulated by CEA, CNRS and INRIA at the following URL -* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -* or in the file LICENSE.txt. -* -* As a counterpart to the access to the source code and rights to copy, -* modify and redistribute granted by the license, users are provided only -* with a limited warranty and the software's author, the holder of the -* economic rights, and the successive licensors have only limited -* liability. -* -* The fact that you are presently reading this means that you have had -* knowledge of the CeCILL-B license and that you accept its terms. -* ------------------------------------------------------------------------ */ + #ifdef _USE_ITK_ @@ -40,13 +47,13 @@ namespace bbitk { - + // bbtk typedefs for itk images #define BBTK_TYPEDEF_ITK_IMAGE(TYPE,DIM) \ typedef itk::Image Image_##TYPE##_##DIM; \ typedef const Image_##TYPE##_##DIM Image_##TYPE##_##DIM##_c; \ typedef Image_##TYPE##_##DIM * Image_##TYPE##_##DIM##_ptr; \ - typedef Image_##TYPE##_##DIM##_c * Image_##TYPE##_##DIM##_cptr; + typedef Image_##TYPE##_##DIM##_c * Image_##TYPE##_##DIM##_cptr; #define BBTK_TYPEDEF_ITK_IMAGES_DIM(DIM) \ @@ -63,33 +70,33 @@ namespace bbitk BBTK_TYPEDEF_ITK_IMAGES_DIM(3); BBTK_TYPEDEF_ITK_IMAGES_DIM(4); //BBTK_TYPEDEF_ITK_IMAGES_DIM(5) - - - + + + #define BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) if (false) {} - + #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())<<">"); } #define BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,MESSAGE) else { bbtkError(MESSAGE); } - + /// Generic macro which calls a TEMPLATE_FUNCTION instanciated /// on TEMPLATE_TYPE iff TYPE_INFO == typeid(TEST_TYPE). /// This macro must be used (maybe several times) between a pair of BEGIN_TEMPLATE_SWITCH and END_TEMPLATE_SWITCH macros -#define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE) \ - else if (TYPE_INFO == typeid(bbitk::TEST_TYPE)) \ +#define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE) \ + else if (TYPE_INFO == typeid(bbitk::TEST_TYPE)) \ { TEMPLATE_FUNCTION(); } - - + + // DIMENSION 2 #ifdef BBTK_ITK_IMAGE_DIM_2 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_2_##CONST##ptr,FUN,Image_int8_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_int16_t -# define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_2_##CONST##ptr,FUN,Image_int16_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) @@ -107,7 +114,7 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_int16_t -# define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_2_##CONST##ptr,FUN,Image_uint16_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) @@ -119,13 +126,13 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_2_##CONST##ptr,FUN,Image_float_2) # else # define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_2_##CONST##ptr,FUN,Image_double_2) # else # define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) @@ -145,7 +152,7 @@ namespace bbitk // DIMENSION 3 #ifdef BBTK_ITK_IMAGE_DIM_3 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_3_##CONST##ptr,FUN,Image_int8_t_3) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) @@ -181,13 +188,13 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_3_##CONST##ptr,FUN,Image_float_3) # else # define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_3_##CONST##ptr,FUN,Image_double_3) # else # define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) @@ -202,12 +209,12 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) # define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) #endif - - + + // DIMENSION 4 #ifdef BBTK_ITK_IMAGE_DIM_4 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_4_##CONST##ptr,FUN,Image_int8_t_4) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) @@ -237,19 +244,19 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_uint32_t -# define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_4_##CONST##ptr,FUN,Image_uint32_t_4) # else # define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_4_##CONST##ptr,FUN,Image_float_4) # else # define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_4_##CONST##ptr,FUN,Image_double_4) # else # define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) @@ -265,7 +272,7 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) #endif - + /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). #define BBTK_TEMPLATE_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ @@ -294,11 +301,13 @@ namespace bbitk BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,) \ - BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) + BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) + + /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). -#define BBTK_TEMPLATE_ITK_IMAGE_DIM_3_SWITCH(TYPE_INFO,FUN,ERROR_MESSAGE) \ +#define BBTK_TEMPLATE_ITK_IMAGE_DIM_3_SWITCH(TYPE_INFO,FUN,ERROR_MESSAGE) \ BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) \ BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,) \ @@ -308,13 +317,13 @@ namespace bbitk BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,) \ - BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,ERROR_MESSAGE) + BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,ERROR_MESSAGE) /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). - -#define BBTK_TEMPLATE_CONST_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ + +#define BBTK_TEMPLATE_CONST_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) \ BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,c) \ @@ -340,8 +349,8 @@ namespace bbitk BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,c) \ - BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) - + BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) + #define BBTK_GITIFPTI_DIM(DIM) \ if (pti == typeid(unsigned char)) \ return typeid(itk::Image*); \ @@ -362,8 +371,8 @@ namespace bbitk if (pti == typeid(float)) \ return typeid(itk::Image*); \ if (pti == typeid(double)) \ - return typeid(itk::Image*); - + return typeid(itk::Image*); + inline bbtk::TypeInfo GetITKImagePtrTypeInfoFromPixelTypeInfoAndDimension( bbtk::TypeInfo pti, @@ -374,8 +383,8 @@ namespace bbitk else if (dim==4) { BBTK_GITIFPTI_DIM(4); } else { - //bbtkGlobalError("GetImageTypeInfoFromPixelTypeInfo : itk::Images not compiled for dim "< m_map; }; - -#define BBTK_BUILD_ITK_IMAGE_FUNCTION_MAPPING(MAP,FUN) \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + +#define BBTK_BUILD_ITK_IMAGE_FUNCTION_MAPPING(MAP,FUN) \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; - + //======================================================================= @@ -553,13 +562,13 @@ namespace bbtk // Human readable names for itk images // #define BBTK_HUMAN_READABLE_ITK_IMAGE_NAME(TYPE,DIM) std::string("itkImage")+HumanTypeName()+std::string(#DIM)+std::string("ptr") -#define BBTK_HUMAN_READABLE_ITK_IMAGE(TYPE,DIM) \ -template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >() \ - { std::string n("itkImage"); \ - n+= HumanTypeName();\ - n += std::string(#DIM);\ -n += std::string("ptr"); \ - return n; } \ +#define BBTK_HUMAN_READABLE_ITK_IMAGE(TYPE,DIM) \ +template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >() \ + { std::string n("itkImage"); \ + n+= HumanTypeName(); \ + n += std::string(#DIM); \ +n += std::string("ptr"); \ + return n; } \ template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >(const bbitk::Image_##TYPE##_##DIM##_ptr &) \ { std::string n("itkImage");\ n+= HumanTypeName(); \