]> Creatis software - clitk.git/commitdiff
add conversion utility from vtk to itk
authordsarrut <dsarrut>
Wed, 7 Jul 2010 06:56:57 +0000 (06:56 +0000)
committerdsarrut <dsarrut>
Wed, 7 Jul 2010 06:56:57 +0000 (06:56 +0000)
common/vvToITK.h

index 0bc79e6bc594cf665326cbe7c1ada30e6d329617..2323ae5cc81c152144174d20e197bd32c336e8d9 100644 (file)
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
-#ifndef vvImageToITK_h
-#define vvImageToITK_h
+  ======================================================================-====*/
+
+#ifndef VVIMAGETOITK_H
+#define VVIMAGETOITK_H
+
+// std
 #include <vector>
+
+// vv
 #include "vvImage.h"
+
+// itk
 #include <itkImage.h>
 #include <itkJoinSeriesImageFilter.h>
 #include "itkVTKImageToImageFilter.h"
 
+//--------------------------------------------------------------------
 ///Converts the vv image to itk, handling the 4D problem
 template<unsigned int Dim, class PixelType> std::vector<typename itk::Image<PixelType,Dim>::ConstPointer> vvImageToITKImageVector(vvImage::Pointer vv_image) ///Converts the vv image to itk, handling the 4D problem
 {
-    assert(Dim < 5 && Dim > 1); // We don't handle anything higher than 4-dimensional (for the moment :-p)
-    assert(vv_image->GetVTKImages().size() > 0); //we assume there is something to convert
-    typedef itk::Image< PixelType, Dim > OutputImageType;
-    std::vector<typename itk::Image<PixelType,Dim>::ConstPointer> result;
-
-    typedef itk::Image< PixelType, Dim >    ConnectorImageType;
-    typedef itk::VTKImageToImageFilter<ConnectorImageType> ConnectorType;
-    for (unsigned int i = 0; i < vv_image->GetVTKImages().size(); i++)
+  assert(Dim < 5 && Dim > 1); // We don't handle anything higher than 4-dimensional (for the moment :-p)
+  assert(vv_image->GetVTKImages().size() > 0); //we assume there is something to convert
+  typedef itk::Image< PixelType, Dim > OutputImageType;
+  std::vector<typename itk::Image<PixelType,Dim>::ConstPointer> result;
+
+  typedef itk::Image< PixelType, Dim >    ConnectorImageType;
+  typedef itk::VTKImageToImageFilter<ConnectorImageType> ConnectorType;
+  for (unsigned int i = 0; i < vv_image->GetVTKImages().size(); i++)
     {
-        typename ConnectorType::Pointer connector = ConnectorType::New();
-        connector->SetInput(vv_image->GetVTKImages()[i]);
-        connector->Update();
-        result.push_back(connector->GetOutput());
+      typename ConnectorType::Pointer connector = ConnectorType::New();
+      connector->SetInput(vv_image->GetVTKImages()[i]);
+      connector->Update();
+      result.push_back(connector->GetOutput());
     }
-    return result;
+  return result;
 }
+//--------------------------------------------------------------------
+
 
+//--------------------------------------------------------------------
 ///Converts the vv image to itk, handling the 4D problem
 template<class ImageType> typename ImageType::ConstPointer vvImageToITK(vvImage::Pointer vv_image) ///Converts the vv image to itk, handling the 4D problem
 {
-    const unsigned int Dim=ImageType::ImageDimension;
-    assert(Dim < 5 && Dim > 0); // We don't handle anything higher than 4-dimensional (for the moment :-p)
-    typedef ImageType OutputImageType;
+  const unsigned int Dim=ImageType::ImageDimension;
+  assert(Dim < 5 && Dim > 0); // We don't handle anything higher than 4-dimensional (for the moment :-p)
+  typedef ImageType OutputImageType;
 
-    if (Dim==4)
+  if (Dim==4)
     {
-        typedef itk::Image< typename ImageType::PixelType,  3 >    ConnectorImageType;
-        typedef itk::VTKImageToImageFilter<ConnectorImageType> ConnectorType;
-        typedef itk::JoinSeriesImageFilter<ConnectorImageType,OutputImageType> FilterType;
+      typedef itk::Image< typename ImageType::PixelType,  3 >    ConnectorImageType;
+      typedef itk::VTKImageToImageFilter<ConnectorImageType> ConnectorType;
+      typedef itk::JoinSeriesImageFilter<ConnectorImageType,OutputImageType> FilterType;
 
 
-        typename FilterType::Pointer filter = FilterType::New();
-        filter->SetOrigin(vv_image->GetOrigin()[3]);
-        filter->SetSpacing(vv_image->GetSpacing()[3]);
+      typename FilterType::Pointer filter = FilterType::New();
+      filter->SetOrigin(vv_image->GetOrigin()[3]);
+      filter->SetSpacing(vv_image->GetSpacing()[3]);
 
-        for (int i = 0; i < vv_image->GetSize()[3]; i++)
+      for (int i = 0; i < vv_image->GetSize()[3]; i++)
         {
-            typename ConnectorType::Pointer connector = ConnectorType::New();
-            connector->SetInput(vv_image->GetVTKImages()[i]);
-            connector->Update();
-            filter->PushBackInput(connector->GetOutput());
+          typename ConnectorType::Pointer connector = ConnectorType::New();
+          connector->SetInput(vv_image->GetVTKImages()[i]);
+          connector->Update();
+          filter->PushBackInput(connector->GetOutput());
         }
-        filter->Update();
-        return filter->GetOutput();
+      filter->Update();
+      return filter->GetOutput();
     }
-    else //Dim == 1,2,3
+  else //Dim == 1,2,3
     {
-        assert(!vv_image->IsTimeSequence()); //This case isn't implemented
-        typedef ImageType  ConnectorImageType;
-        typedef itk::VTKImageToImageFilter <ConnectorImageType> ConnectorType;
-        typename ConnectorType::Pointer connector = ConnectorType::New();
-        connector->SetInput(vv_image->GetVTKImages()[0]);
-
-        connector->Update();
-        return connector->GetOutput();
+      assert(!vv_image->IsTimeSequence()); //This case isn't implemented
+      typedef ImageType  ConnectorImageType;
+      typedef itk::VTKImageToImageFilter <ConnectorImageType> ConnectorType;
+      typename ConnectorType::Pointer connector = ConnectorType::New();
+      connector->SetInput(vv_image->GetVTKImages()[0]);
+
+      connector->Update();
+      return connector->GetOutput();
     }
 }
+//--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
 ///Converts a single time frame of a vv image to itk.
 template<unsigned int Dim, class PixelType> typename itk::Image<PixelType,Dim>::ConstPointer vvSingleFrameToITK(vvImage::Pointer vv_image,int frame) ///Converts the vv image to itk, handling the 4D problem
 {
-    assert(Dim < 4 && Dim > 0);
-    typedef itk::Image< PixelType, Dim > OutputImageType;
-    typedef itk::Image< PixelType,  Dim >    ConnectorImageType;
-    typedef itk::VTKImageToImageFilter <ConnectorImageType> ConnectorType;
-    typename ConnectorType::Pointer connector = ConnectorType::New();
-    connector->SetInput(vv_image->GetVTKImages()[frame]);
-    connector->Update();
-    return connector->GetOutput();
+  assert(Dim < 4 && Dim > 0);
+  typedef itk::Image< PixelType, Dim > OutputImageType;
+  typedef itk::Image< PixelType,  Dim >    ConnectorImageType;
+  typedef itk::VTKImageToImageFilter <ConnectorImageType> ConnectorType;
+  typename ConnectorType::Pointer connector = ConnectorType::New();
+  connector->SetInput(vv_image->GetVTKImages()[frame]);
+  connector->Update();
+  return connector->GetOutput();
 }
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<unsigned int Dim, class PixelType> 
+typename itk::Image<PixelType,Dim>::ConstPointer 
+ItkImageFromVtk(vtkImageData * input)
+{
+  typedef itk::Image< PixelType, Dim > OutputImageType;
+  typedef itk::Image< PixelType,  Dim >    ConnectorImageType;
+  typedef itk::VTKImageToImageFilter <ConnectorImageType> ConnectorType;
+  typename ConnectorType::Pointer connector = ConnectorType::New();
+  connector->SetInput(input);
+  connector->Update();
+  return connector->GetOutput();
+}
+//--------------------------------------------------------------------
+
+
 
 #endif