[ITK] [ITK-users] Vector field not shown correctly on VTK

Andras Lasso lasso at queensu.ca
Fri May 16 18:00:32 EDT 2014


FYI, recently extensive transformation visualization capabilities have been added to 3D Slicer (available in recent nightly releases), see some screenshots at: http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/Transforms

Slicer’s transformation visualization feature is not as generic as in Paraview, but specifically developed for medical image computing and we solved many of Paraview’s limitations (you can load arbitrarily oriented volumes and transforms; you can load transforms form ITK tfm files, etc).

In Slicer you can also combine, invert, modify transforms and see the results immediately in 2d and 3d, applied to volumes, points, surface meshes, etc. You can also process and visualize transform time sequences (applied dynamically on all kinds of objects in real-time), using the Multidimensional data extension.

Andras


From: Community [mailto:community-bounces at itk.org] On Behalf Of Nicolas Gallego
Sent: May 13, 2014 3:50 AM
To: Jose Ignacio Prieto
Cc: Insight-users User; VTK Users
Subject: Re: [ITK] [ITK-users] Vector field not shown correctly on VTK

Hi Jose Ignacio
Have you visualized your data on paraview for example?
hope that helps
--
Nicolás Gallego Ortiz
2014-05-12 21:50 GMT+02:00 Jose Ignacio Prieto <joseignacio.prieto at gmail.com<mailto:joseignacio.prieto at gmail.com>>:
Hi all, I am sending this to both lists, ITK and VTK. I have trouble loading three velocity dicom images (X, Y and Z axis). The problem is that when displaying the vector field as a Glyph3D, the arrows are aligned only in one axis. I have tried to check through iterators after the itk to vtk filter and the output shows the vector is fine. Then I don't know if the problem is in the glyph3d config or in the vtk data type. I attach all my code if someone could give me a hand.

Thank you very much.




typedef short    ShortPixelType;
typedef itk::Image<ShortPixelType, 4> ImageType4D; // ITK Image
typedef itk::Image<ShortPixelType, 3> ImageType3D; // ITK Image
typedef itk::Image< itk::CovariantVector< ShortPixelType, 3>, 4 > VectorImageType4D;
typedef itk::Image< itk::CovariantVector< ShortPixelType, 3>, 3 > VectorImageType3D;
typedef itk::itkImageSeriesReader< ImageType4D>        ReaderType;
typedef itk::ImageFileWriter< VectorImageType3D>  WriterType3D;
typedef itk::ImageFileWriter< VectorImageType4D>  WriterType4D;
typedef itk::ExtractImageFilter<VectorImageType4D, VectorImageType3D> ReductorType;
typedef itk::ImageToVTKImageFilter<VectorImageType3D>       ConnectorType;
typedef itk::ComposeImageFilter< ImageType4D, VectorImageType4D > Vector4DComposer;
typedef itk::ImageFileReader< VectorImageType4D>  ReaderType4D;



    std::vector< ReaderType::Pointer > reader;
    std::vector< NamesGeneratorType::Pointer > nameGenerator;
    std::vector< ImageIOType::Pointer > dicomIO;
    reader.resize(3);
    nameGenerator.resize(3);
    dicomIO.resize(3);
    Vector4DComposer::Pointer vecComposer = Vector4DComposer::New();
    VectorImageType4D::Pointer m_vectorImage;

   for (int i = 0 ; i < 3 ; i++)
   {
       reader[i] = ReaderType::New();
       nameGenerator[i] = NamesGeneratorType::New();
       dicomIO[i] = ImageIOType::New();
       nameGenerator[i]->SetDirectory( argv[i + 1]);
       reader[i]->SetFileNames(nameGenerator[i]->GetInputFileNames());
       reader[i]->SetImageIO( dicomIO[i] );
       reader[i]->Update();
       vecComposer->SetInput(i,reader[i]->GetOutput());
   }

   vecComposer->UpdateLargestPossibleRegion();
   ImageType4D::SizeType size = vecComposer->GetOutput()->GetLargestPossibleRegion().GetSize();

   int nframes = vecComposer->GetOutput()->GetLargestPossibleRegion().GetSize()[3];
   int dim_eliminada=3;
   size[dim_eliminada]=0;
   VectorImageType4D::IndexType start = vecComposer->GetOutput()->GetLargestPossibleRegion().GetIndex();
   start[dim_eliminada] = 30;
   VectorImageType4D::RegionType desiredRegion;
   desiredRegion.SetSize(  size  );
   desiredRegion.SetIndex( start );

   ReductorType::Pointer reductor = ReductorType::New();
   reductor->InPlaceOn();
   reductor->SetDirectionCollapseToSubmatrix();
   reductor->SetExtractionRegion( desiredRegion );
   reductor->SetInput(vecComposer->GetOutput());
   reductor->Update();


   ConnectorType::Pointer m_connector = ConnectorType::New();
   m_connector->SetInput(reductor->GetOutput());
   m_connector->UpdateLargestPossibleRegion();
   m_connector->Update();

  std::cout << "image start " << std::endl;
   for (int i = 0; i < m_connector->GetOutput()->GetDimensions()[0]; i++)
   {
       for (int j = 0; j < m_connector->GetOutput()->GetDimensions()[1]; j++)
       {
           for (int k = 0; k < m_connector->GetOutput()->GetDimensions()[2]; k++)
           {
               myfile<< "On point " << "i, j, k: " << i<<", "<< j<<", "<< k<<
                        " Component 0: "<< m_connector->GetOutput()->GetScalarComponentAsDouble(i, j, k, 0) <<
                        " Component 1: "<< m_connector->GetOutput()->GetScalarComponentAsDouble(i, j, k, 1) <<
                        " Component 2: "<< m_connector->GetOutput()->GetScalarComponentAsDouble(i, j, k, 2) <<
                         "\n";
           }
       }
   }

   vtkSmartPointer< vtkImageDataGeometryFilter > vtkConverter = vtkSmartPointer< vtkImageDataGeometryFilter >::New();
   vtkConverter->SetInput(m_connector->GetOutput());
   vtkConverter->UpdateWholeExtent();

   vtkSmartPointer< vtkArrowSource > m_arrows = vtkSmartPointer< vtkArrowSource >::New();
   m_arrows->SetTipLength(.1);
   m_arrows->SetTipResolution(5);
   m_arrows->SetTipRadius(.05);
   m_arrows->SetShaftResolution(5);
   m_arrows->SetShaftRadius(.015);
   m_arrows->Update();

   vtkSmartPointer< vtkGlyph3D > m_glyphs = vtkSmartPointer< vtkGlyph3D >::New();
//   m_glyphs->SetSourceConnection(m_connector->GetOutput());
//   m_glyphs->SetInput(m_connector->GetOutput());
//   m_glyphs->SetInputConnection(m_connector->GetOutput() ());
   m_glyphs->SetInputConnection(vtkConverter->GetOutputPort());
//   m_glyphs->SetSource(m_arrows->GetOutput());
   m_glyphs->SetSourceConnection(m_arrows->GetOutputPort());
   m_glyphs->OrientOn();
//   m_glyphs->OrientOff();
//   m_glyphs->SetVectorModeToVectorRotationOff();
   m_glyphs->SetVectorModeToUseVector();
//   m_glyphs->SetVectorModeToUseNormal();
//   m_glyphs->SetScaleModeToDataScalingOn();
//   m_glyphs->SetScaleModeToDataScalingOff();
//   m_glyphs->SetColorModeToColorByVector();
//   m_glyphs->SetScaleModeToScaleByVector();
//   m_glyphs->SetColorModeToColorByScalar();
   m_glyphs->SetColorModeToColorByScale();
   m_glyphs->SetScaleFactor(0.2);
//   m_glyphs->SetIndexModeToVector();
//   m_glyphs->SetScaleModeToDataScalingOff();
//   m_glyphs->SetScaleFactor(.5);
   m_glyphs->Update();

   vtkSmartPointer< vtkOpenGLPolyDataMapper > glyphPolyData = vtkSmartPointer< vtkOpenGLPolyDataMapper >::New();
   glyphPolyData->SetInputConnection(m_glyphs->GetOutputPort());
   vtkSmartPointer< vtkOpenGLActor > glyphActor = vtkSmartPointer< vtkOpenGLActor >::New();
   glyphActor->SetMapper(glyphPolyData);

   vtkSmartPointer< vtkWin32OpenGLRenderWindow >  renWin = vtkSmartPointer< vtkWin32OpenGLRenderWindow>::New();

   vtkSmartPointer< vtkOpenGLRenderer>  ren1 = vtkSmartPointer< vtkOpenGLRenderer> ::New();
   renWin->AddRenderer(ren1);
   ren1->AddActor(glyphActor);

   vtkSmartPointer< vtkRenderWindowInteractor > rwi = vtkSmartPointer< vtkRenderWindowInteractor >::New();
   vtkSmartPointer<MouseInteractorStyle> styleActor = vtkSmartPointer<MouseInteractorStyle>::New();
   rwi->SetInteractorStyle(styleActor);

   rwi->SetRenderWindow(renWin);
   rwi->SetSize(640, 480);
   rwi->Initialize();
   renWin->Render();
   rwi->Start();


--
José Ignacio Prieto
Software developer
Biomedical Imaging Center
Pontificia Universidad Catolica de Chile

_____________________________________
Powered by www.kitware.com<http://www.kitware.com>

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

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

_______________________________________________
Community mailing list
Community at itk.org<mailto:Community at itk.org>
http://public.kitware.com/cgi-bin/mailman/listinfo/community



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20140516/f6356801/attachment-0002.html>


More information about the Community mailing list