]> Creatis software - clitk.git/commitdiff
clitkSetBackground accepts vector fields
authorRomulo Pinho <romulo.pinho@lyon.unicancer.fr>
Fri, 17 Feb 2012 14:36:50 +0000 (15:36 +0100)
committerRomulo Pinho <romulo.pinho@lyon.unicancer.fr>
Fri, 17 Feb 2012 14:36:50 +0000 (15:36 +0100)
tools/clitkSetBackgroundGenericFilter.cxx
tools/clitkSetBackgroundGenericFilter.txx

index 038fcca70dff2933cb25ddbf8f9aea299ebca2b4..2cb3c00bf0b329a03970c9bb6cff283cdfbdce5b 100644 (file)
@@ -50,19 +50,50 @@ SetBackgroundGenericFilter::SetBackgroundGenericFilter()
 void SetBackgroundGenericFilter::Update()
 {
   // Read the Dimension and PixelType
-  int Dimension;
+  int Dimension, Components;
   std::string PixelType;
-  ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType);
+  //ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType);
+  ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType, Components);
 
-
-  // Call UpdateWithDim
-  if(Dimension==2) UpdateWithDim<2>(PixelType);
-  else if(Dimension==3) UpdateWithDim<3>(PixelType);
-  else if (Dimension==4)UpdateWithDim<4>(PixelType);
-  else {
+  if (Dimension > 4) {
     std::cout<<"Error, Only for 2 , 3 or 4 Dimensions!!!"<<std::endl ;
     return;
   }
+  
+  if (Components > 3) {
+    std::cout<<"Error, Only 1, 2, or 3-component images are supported!!!"<<std::endl ;
+    return;
+  }
+
+  if (Components > 1 && PixelType != "float") {
+    std::cout<<"Error, Only float multi-component images are supported!!!"<<std::endl ;
+    return;
+  }
+
+  switch (Components) {
+    case 1:
+      // Call UpdateWithDim
+      if(Dimension==2) UpdateWithDim<2>(PixelType);
+      else if(Dimension==3) UpdateWithDim<3>(PixelType);
+      else if (Dimension==4)UpdateWithDim<4>(PixelType);
+      break;
+    case 2:
+    {
+      typedef itk::Vector<float, 2> TPixelType;
+      if(Dimension==2) UpdateWithDimAndPixelType<2, TPixelType>();
+      else if(Dimension==3) UpdateWithDimAndPixelType<3, TPixelType>();
+      else if (Dimension==4)UpdateWithDimAndPixelType<4, TPixelType>();
+      break;
+    }
+    case 3:
+    {
+      typedef itk::Vector<float, 3> TPixelType;
+      if(Dimension==2) UpdateWithDimAndPixelType<2, TPixelType>();
+      else if(Dimension==3) UpdateWithDimAndPixelType<3, TPixelType>();
+      else if (Dimension==4)UpdateWithDimAndPixelType<4, TPixelType>();
+      break;
+    }
+  }
 }
 
 
index 8a825ad408fa20bf1119562efb15e27a5d8aee97..63ccfb026a9d75ade4c9b978990a54b13c445d3b 100644 (file)
@@ -54,7 +54,6 @@ SetBackgroundGenericFilter::UpdateWithDim(std::string PixelType)
   }
 }
 
-
 //-------------------------------------------------------------------
 // Update with the number of dimensions and the pixeltype
 //-------------------------------------------------------------------
@@ -65,7 +64,7 @@ SetBackgroundGenericFilter::UpdateWithDimAndPixelType()
 
   // ImageTypes
   typedef itk::Image<PixelType, Dimension> InputImageType;
-  typedef itk::Image<float, Dimension> MaskImageType;
+  typedef itk::Image<unsigned char, Dimension> MaskImageType;
 
   // Read the input
   typedef itk::ImageFileReader<InputImageType> InputReaderType;