Hi ITKers and VTKers,<br><br>&nbsp;&nbsp; I have some problems in saving and displaying registration deformation field in VTK format.<br><br>The code in ITK is<br><br>&nbsp;&nbsp; typedef itk::Vector&lt; float, Dimension &gt;&nbsp;&nbsp;&nbsp; VectorPixelType;
<br>&nbsp;&nbsp; typedef itk::Image&lt; VectorPixelType, Dimension &gt; DeformationFieldType;
<br>&nbsp;&nbsp; typedef itk::ImageFileWriter&lt; DeformationFieldType &gt; FieldWriterType;<br>&nbsp;&nbsp; FieldWriterType::Pointer fieldWriter = FieldWriterType::New();<br>&nbsp;&nbsp; fieldWriter-&gt;SetFileName( &quot;field.vtk&quot; );<br>&nbsp;&nbsp; fieldWriter-&gt;SetInput( nrreg-&gt;GetDeformationField() );
<br>&nbsp;&nbsp; fieldWriter-&gt;Update();<br><br>The code in VTK is<br><br>&nbsp; vtkStructuredPointsReader *fieldReader = vtkStructuredPointsReader::New();<br>&nbsp; fieldReader-&gt;SetFileName( &quot;field.vtk&quot; );<br>&nbsp; vtkArrowSource *arrow = vtkArrowSource::New();
<br>&nbsp; vtkMaskPoints *masker = vtkMaskPoints::New();<br>&nbsp; masker-&gt;SetOnRatio( 1000 );<br>&nbsp; masker-&gt;RandomModeOn();<br>&nbsp; masker-&gt;SetInputConnection( fieldReader-&gt;GetOutputPort() );<br>&nbsp; vtkGlyph3D *glyph = vtkGlyph3D::New();
<br>&nbsp; glyph-&gt;SetInputConnection( masker-&gt;GetOutputPort() );<br>&nbsp; glyph-&gt;SetScaleModeToScaleByVector();<br>&nbsp; glyph-&gt;SetColorModeToColorByVector();&nbsp;&nbsp; <br>&nbsp; glyph-&gt;OrientOn();<br>&nbsp; glyph-&gt;SetVectorModeToUseVector();
<br>&nbsp; glyph-&gt;SetSourceConnection( arrow-&gt;GetOutputPort() );<br>&nbsp; vtkPolyDataMapper *glyphmapper = vtkPolyDataMapper::New();<br>&nbsp; glyphmapper-&gt;SetInputConnection(glyph-&gt;GetOutputPort());<br>&nbsp; vtkActor *glyphactor = vtkActor::New();
<br><br>Displaying in VTK results in all arrows just pointing to one direction, say along X-axis.<br>I found this is because ITK save field data in VTK using Data Attribute in the header:<br><br>SCALARS scalars float 3<br>

LOOKUP_TABLE default<br><br>If I manually change it to:<br><br>VECTORS vectors float<br><br>Then, glyphs are displayed correctly.<br><br>I also tried to use itkVTKImageIO to correct this behavior using the code:<br><br>typedef itk::VTKImageIO&nbsp; VTKImageIOType;
<br>VTKImageIOType::Pointer vtkIO = VTKImageIOType::New();<br>vtkIO-&gt;SetComponentType( VTKImageIOType::FLOAT );<br>vtkIO-&gt;SetPixelType( VTKImageIOType::VECTOR );<br>fieldWriter-&gt;SetImageIO( vtkIO );<br><br>ITK just saves in the same way. Don&#39;t work.
<br><br>Can I change the behavior of ITK or is there any filter in VTK can correct this? <br>Anyone has some ideas on this. <br><br>Thank you very much!<br>Mengda<br>