X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FvvToITK.h;h=be22b621258a5db13a57d08881d8382f95a3f79d;hb=19b462067f2b839ebb7e7cc8ba84aa14f4152e8b;hp=0bc79e6bc594cf665326cbe7c1ada30e6d329617;hpb=0b7c9b1e1215634b02cbd38d4e4ba101d6111ba8;p=clitk.git diff --git a/common/vvToITK.h b/common/vvToITK.h index 0bc79e6..be22b62 100644 --- a/common/vvToITK.h +++ b/common/vvToITK.h @@ -3,7 +3,7 @@ Authors belong to: - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,87 +14,119 @@ - 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