X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FvvToITK.h;h=be22b621258a5db13a57d08881d8382f95a3f79d;hb=19b462067f2b839ebb7e7cc8ba84aa14f4152e8b;hp=542cea26ff43ada6e1bfd4857320938006a93b9c;hpb=931a42358442f4ee4f314613c991c838d4b4e3b7;p=clitk.git diff --git a/common/vvToITK.h b/common/vvToITK.h index 542cea2..be22b62 100644 --- a/common/vvToITK.h +++ b/common/vvToITK.h @@ -1,110 +1,132 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Module: $RCSfile: vvToITK.h,v $ - Language: C++ - Date: $Date: 2010/01/06 13:32:01 $ - Version: $Revision: 1.1 $ - Author : Joel Schaerer (joel.schaerer@insa-lyon.fr) + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr -Copyright (C) 2008 -Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr -CREATIS-LRMN http://www.creatis.insa-lyon.fr + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. + It is distributed under dual licence -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + ===========================================================================**/ -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -=========================================================================*/ -#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(not 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