[Insight-users] itkImageToVTKImageFilter

Árpád Szamosi szamosi.arpad at gmail.com
Sun Mar 22 13:17:24 EDT 2009


Thanks Luis, here is the code:

#include "itkOrientedImage.h"
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"

#include "itkImageToVTKImageFilter.h"

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkPolyDataNormals.h"
#include "vtkStructuredPointsReader.h"
#include "vtkMarchingCubes.h"
#include "vtkProperty.h"
#include "vtkCleanPolyData.h"



int main( int argc, char* argv[] )
{

long int size[3];
double IntesityLevel=atof(argv[2]);

  typedef signed short    PixelType;
  const unsigned int      Dimension = 3;

  typedef itk::OrientedImage< PixelType, Dimension >         ImageType;

  typedef itk::ImageSeriesReader< ImageType >        ReaderType;
  ReaderType::Pointer reader = ReaderType::New();

  typedef itk::GDCMImageIO       ImageIOType;
  ImageIOType::Pointer dicomIO = ImageIOType::New();

  reader->SetImageIO( dicomIO );

  typedef itk::GDCMSeriesFileNames NamesGeneratorType;
  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();

  nameGenerator->SetUseSeriesDetails( true );
  nameGenerator->AddSeriesRestriction("0008|0021" );

  nameGenerator->SetDirectory( argv[1] );



    std::cout << std::endl << "The directory: " << std::endl;
    std::cout << std::endl << argv[1] << std::endl << std::endl;
    std::cout << "Contains the following DICOM Series: ";
    std::cout << std::endl << std::endl;

    typedef std::vector< std::string >    SeriesIdContainer;

    const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();

    SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();
    SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();
    while( seriesItr != seriesEnd )
      {
      std::cout << seriesItr->c_str() << std::endl;
      seriesItr++;
      }

    std::string seriesIdentifier;


    seriesIdentifier = seriesUID.begin()->c_str();


    std::cout << std::endl << std::endl;
    std::cout << "Now reading series: " << std::endl << std::endl;
    std::cout << seriesIdentifier << std::endl;
    std::cout << std::endl << std::endl;


    typedef std::vector< std::string >   FileNamesContainer;
    FileNamesContainer fileNames;

    fileNames = nameGenerator->GetFileNames( seriesIdentifier );

    reader->SetFileNames( fileNames );

    try
      {
      reader->Update();
      }
    catch (itk::ExceptionObject &ex)
      {
      std::cout << ex << std::endl;
      return EXIT_FAILURE;
      }

size[0] = reader->GetOutput()->GetRequestedRegion().GetSize()[0] ;
size[1] = reader->GetOutput()->GetRequestedRegion().GetSize()[1] ;
size[2] = reader->GetOutput()->GetRequestedRegion().GetSize()[2] ;
std::cout << "A térfogat méretei:" << std::endl;
std::cout << "x:" << size[0] << std::endl;
std::cout << "y:" << size[1] << std::endl;
std::cout << "z:" << size[2] << std::endl;

///////////////////////////////////////// ITK
///////////////////////////////////////////////////////////////////

   typedef itk::ImageToVTKImageFilter< ImageType>   ConnectorType;
   ConnectorType::Pointer connector = ConnectorType::New();
   connector->SetInput( reader->GetOutput() );

///////////////////////////////////////// VTK
////////////////////////////////////////////////////////////////////

    vtkRenderer *renderer = vtkRenderer::New();
    vtkRenderWindow *window = vtkRenderWindow::New();
    window->AddRenderer(renderer);
    vtkRenderWindowInteractor *interactor =
vtkRenderWindowInteractor::New();
    interactor->SetRenderWindow(window);



    vtkStructuredPointsReader *vreader =
vtkStructuredPointsReader::New();
    vreader->SetInputConnection( connector->GetOutput() );
    //reader->SetFileName(argv[1]);

    vtkMarchingCubes *iso = vtkMarchingCubes::New();
    iso->SetInputConnection(vreader->GetOutputPort());
    iso->SetValue( 0, IntesityLevel);

    vtkCleanPolyData *clean = vtkCleanPolyData::New();
    clean->SetInputConnection(iso->GetOutputPort());

    vtkPolyDataNormals *normal = vtkPolyDataNormals::New();
    normal->SetInputConnection(clean->GetOutputPort());
    normal->SetFeatureAngle(60.0);

    vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
    mapper->SetInputConnection(normal->GetOutputPort());
    mapper->ScalarVisibilityOff();

    vtkActor *isoactor =  vtkActor::New();
    isoactor->SetMapper(mapper);
    isoactor->GetProperty()->SetColor(1,1,0);

    vtkCamera *camera = vtkCamera::New();
    camera->SetViewUp (0, 0, 1);
    camera->SetPosition (0, -1, 0);
   /* camera->SetFocalPoint (0, 0, 0);*/
    camera->ComputeViewPlaneNormal();


    renderer->AddActor(isoactor);
    renderer->SetActiveCamera(camera);
    renderer->ResetCamera ();
    camera->Dolly(1);


    renderer->SetBackground(1,1,1);
    window->SetSize(640, 480);


    renderer->ResetCameraClippingRange ();

    interactor->Initialize();
    window->SetWindowName( "Koponya" );  //azert itt mert bugos
    interactor->Start();

    std::cout << "Kész" << std::endl;


    reader->Delete();
    dicomIO->Delete();
    nameGenerator->Delete();
    connector->Delete();
    renderer->Delete();
    window->Delete();
    interactor->Delete();
    vreader->Delete();
    iso->Delete();
    clean->Delete();
    normal->Delete();
    mapper->Delete();
    isoactor->Delete();
    camera->Delete();


  return EXIT_SUCCESS;

}


2009/3/22 Luis Ibanez <luis.ibanez at kitware.com>

> Hi Arepi,
>
> Please post your code...
>
> It doesn't makes much sense to connect the output of an importer
> as the input of a reader.  (maybe you meant to say a "writer" ?).
>
> Source code will be better that a verbal description of the source code
>  :-)
>
>    Thanks
>
>        Luis
>
>
> ------------------------------------------
> On Sun, Mar 22, 2009 at 11:07 AM, Arepi <szamosi.arpad at gmail.com> wrote:
> >
> > Hi,
> >
> > I tried connect itk to vtk whit itkImageToVTKImageFilter. The first part
> is
> > itk and  read a DICOM series(see
> > Examples/IO/DicomSeriesReadImageWrite2.cxx.), but I would the reader
> input
> > connect to vtk, instead write to a .vtk file. The second part is vtk and
> I
> > tried connect the itkImageToVTKImageFilter output to en
> > vtkStructuredPointsReader(and than MarchingCubes, DataNormal etc) but
> came
> > back whit following error:
> >
> >  error C2664: 'void vtkAlgorithm::SetInputConnection(vtkAlgorithmOutput
> *)'
> > : cannot convert parameter 1 from 'vtkImageData *' to 'vtkAlgorithmOutput
> *'
> >        Types pointed to are unrelated; conversion requires
> > reinterpret_cast, C-style cast or function-style cast
> >
> > I choossed a wrong reader or what should I do to works it fine?
> >
> > Thanks!
> >
> > Arepi
> > --
> > View this message in context:
> http://www.nabble.com/itkImageToVTKImageFilter-tp22646859p22646859.html
> > Sent from the ITK - Users mailing list archive at Nabble.com.
> >
> > _____________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.itk.org/mailman/listinfo/insight-users
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090322/02b9e42e/attachment.htm>


More information about the Insight-users mailing list