[vtkusers] Pass an itkimage::Pointer to a template function in a non template class

Antonin Perrot-Audet antonin07130 at gmail.com
Wed May 12 14:58:03 EDT 2010


Sorry I sent it to the vtk list first, but this concerns itk & vtk users....
> Hello ITK users,
>
> I am facing a problem I guess many of you already solved :
> I wrote a non-template class, but I would like this class to accept 
> both itk images and vtk images.
>
> In order to process the vtk images, I would like to create a template 
> function within my non template class, that takes an itkimage::Pointer 
> as input, internally convert it into a vtkimage* and store the 
> vtkimage* in an array.
>
> It seems like I can't pass the itkimage::Pointer as an argument : If I 
> try to write the image from within the function (with an itk writer), 
> I write an empty image (of the good size !).
>
>
>
>
>
> here is a code example of what I am trying to do :
>
>
>
> 1) A simplified version of what I want to do :
>
> The version of my function (AddImage) that just writes the images from 
> the function :
>
> ----------------myclass.h------------------
> // plenty of other functions
>
>   template <typename TitkImage>
>   void AddImage(typename TitkImage::Pointer iImage)
>   {
>     typedef itk::ImageFileWriter<TitkImage>    WriterType;
>     typename WriterType::Pointer itkwriter = WriterType::New();
>
>     itkwriter->SetInput(iImage);
>     itkwriter->SetFileName ("iktout.png");
>     itkwriter->Update();
>     itkwriter->Write();
>   }
> -----------------------------------------------
>
>
> -----------------main.cpp-------------------
> int main( )
> {
> // declare an instance of myclass
>
>   typedef itk::Image<unsigned short,2> ImageType;
>   typedef itk::ImageFileReader<ImageType> itkreaderType;
>
> // setup the itk reader with the correct filename, and update it
>
> myclass->AddImage<ImageType>( itkreader->GetOutput() );
>
> return 0;
> }
>
> -----------------------------------------------
>
>
>
>
>
>
>
>
> 2) what I actually want to do :
>
> The version of myclass that imports an itkimage converts it as a vtk 
> image and store it somewhere in myclass, main.cpp is the same as in 1)
>
> ----------------myclass.h-----------------
> // non template class definition and heritage
> // non template members and functions ...
>
>   template <typename TitkImage>
>   void AddImage(typename TitkImage::Pointer iImage, std::string 
> iImageName ="")
>   {
>     typedef itk::ImageToVTKImageFilter<TitkImage>    ConnectorType;
>     typename ConnectorType::Pointer itkvtkConnector = 
> ConnectorType::New();
>
>     itkvtkConnector->SetInput(iImage);
>   try
>     {
>     itkvtkConnector->Update();
>     }
>   catch( itk::ExceptionObject & exp )
>     {
>     std::cerr << exp << std::endl;
>     }
>
>     AddImage( itkvtkConnector->GetOutput() ); // call the other 
> importer of myclass
>
>   }
>
>
>   void AddImage(vtkImageData* iImage); // a function that stores a 
> vtkImageData* into an array
>
> // other stuff ....
>
> -----------------------------------------------
>
>
>
>
> I have already looked at : 
> http://old.nabble.com/Smart-pointers-as-function-argument-ts26375719.html#a26375719 
>
> but it doesn't answer my problem, as the itkimage is already bad 
> inside my function.
>
> The weird thing is that if I print it from my function, it prints that 
> the image is a 2D image, of correct dimensions, and of unsigned char 
> pixel type.
>
>
> Well, if someone has an idea, that would help a lot !
>
> Thanks a lot,
>
> Antonin.
>
> PS: As soon as I am done with that thing, I will write a small script 
> to build itk's nightly every night.


-- 
Antonin Perrot-Audet
Electrical Engineering&  Computer Sciences, INSA Lyon
M2 GEGP Signal&  Image Processing, INSA Lyon, UCBL, Centrale Lyon




More information about the vtkusers mailing list