From: dsarrut Date: Wed, 7 Jul 2010 06:56:57 +0000 (+0000) Subject: add conversion utility from vtk to itk X-Git-Tag: v1.2.0~569 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=f6eb604895c396999872e92dd944c57e8189da94;p=clitk.git add conversion utility from vtk to itk --- diff --git a/common/vvToITK.h b/common/vvToITK.h index 0bc79e6..2323ae5 100644 --- a/common/vvToITK.h +++ b/common/vvToITK.h @@ -14,87 +14,120 @@ - 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 + +// vv #include "vvImage.h" + +// itk #include #include #include "itkVTKImageToImageFilter.h" +//-------------------------------------------------------------------- ///Converts the vv image to itk, handling the 4D problem template std::vector::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::ConstPointer> result; - - typedef itk::Image< PixelType, Dim > ConnectorImageType; - typedef itk::VTKImageToImageFilter 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::ConstPointer> result; + + typedef itk::Image< PixelType, Dim > ConnectorImageType; + typedef itk::VTKImageToImageFilter 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 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 ConnectorType; - typedef itk::JoinSeriesImageFilter FilterType; + typedef itk::Image< typename ImageType::PixelType, 3 > ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + typedef itk::JoinSeriesImageFilter 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 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 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 typename itk::Image::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 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 ConnectorType; + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(vv_image->GetVTKImages()[frame]); + connector->Update(); + return connector->GetOutput(); } +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +typename itk::Image::ConstPointer +ItkImageFromVtk(vtkImageData * input) +{ + typedef itk::Image< PixelType, Dim > OutputImageType; + typedef itk::Image< PixelType, Dim > ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(input); + connector->Update(); + return connector->GetOutput(); +} +//-------------------------------------------------------------------- + + #endif