[ITK-users] Vector field not shown correctly on VTK
Jose Ignacio Prieto
joseignacio.prieto at gmail.com
Mon May 12 15:50:57 EDT 2014
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20140512/801909fe/attachment.html>
More information about the Insight-users
mailing list