]> Creatis software - clitk.git/blobdiff - filters/clitkSplitImageGenericFilter.cxx
build segmentation by default as it is needed for vv
[clitk.git] / filters / clitkSplitImageGenericFilter.cxx
index e887b04e566da052bbfc4f705712b13d6821c4e8..4fd6eac9e0de58fb4d879f729767180a2e52f25e 100644 (file)
@@ -1,7 +1,7 @@
 /*=========================================================================
   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-  Authors belong to: 
+  Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
  * @author Joël Schaerer
  * @date   20 April 2009
 
- * @brief  
+ * @brief
  -------------------------------------------------------------------*/
 
 #include "clitkSplitImageGenericFilter.h"
-
 #include "clitkSplitImageGenericFilter.txx"
+#include <itkIntensityWindowingImageFilter.h>
 //--------------------------------------------------------------------
 clitk::SplitImageGenericFilter::SplitImageGenericFilter():
-  clitk::ImageToImageGenericFilter<Self>("SplitImage") {
+  clitk::ImageToImageGenericFilter<Self>("SplitImage")
+{
   mSplitDimension = 0;
   InitializeImageType<3>();
   InitializeImageType<4>();
@@ -39,15 +40,17 @@ clitk::SplitImageGenericFilter::SplitImageGenericFilter():
 
 //--------------------------------------------------------------------
 template<unsigned int Dim>
-void clitk::SplitImageGenericFilter::InitializeImageType() {      
+void clitk::SplitImageGenericFilter::InitializeImageType()
+{
   ADD_DEFAULT_IMAGE_TYPES(Dim);
-  ADD_VEC_IMAGE_TYPE(Dim, 3,float);
+  //ADD_VEC_IMAGE_TYPE(Dim, 3,float);
 }
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
 template<class ImageType>
-void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
+void clitk::SplitImageGenericFilter::UpdateWithInputImageType()
+{
 
   // Read input
   typedef typename ImageType::PixelType PixelType;
@@ -67,17 +70,26 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
   typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
   std::string base_filename=GetOutputFilename();
   unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension];
-  for (unsigned int i=0;i<number_of_output_images;i++)
-  {
-      std::ostringstream ss;
-      ss << i;
-      index[mSplitDimension]=i;
-      extracted_region.SetIndex(index);
-      filter->SetExtractionRegion(extracted_region);
-      filter->Update();
+  for (unsigned int i=0; i<number_of_output_images; i++) {
+    std::ostringstream ss;
+    ss << std::setfill('0') << std::setw((int)(log10(double(number_of_output_images))+1)) << i;
+    index[mSplitDimension]=i;
+    extracted_region.SetIndex(index);
+    filter->SetExtractionRegion(extracted_region);
+    filter->Update();
+    if(this->m_Png){
+      typedef itk::Image< unsigned char, ImageType::ImageDimension-1 > OutputPngImageType;
+      typedef itk::IntensityWindowingImageFilter< OutputImageType, OutputPngImageType > CastFilterType;
+      typename CastFilterType::Pointer cast = CastFilterType::New();
+      cast->SetWindowLevel(this->m_Window, this->m_Level);
+      cast->SetInput(filter->GetOutput());
+      SetOutputFilename(base_filename+"_"+ss.str()+".png");
+      SetNextOutput<OutputPngImageType>(cast->GetOutput());
+    }
+    else {
       SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
-      typename OutputImageType::Pointer output=filter->GetOutput();
-      SetNextOutput<OutputImageType>(output);
+      SetNextOutput<OutputImageType>(filter->GetOutput());
+    }
   }
 }
 //--------------------------------------------------------------------