[vtkusers] Save Registration Deformation field in ITK and display in VTK glyph
Mengda Wu
wumengda at gmail.com
Tue Jan 2 01:35:23 EST 2007
Hi Luis,
Yes. Option B will work, but need small modifications:
Replace Line 481-484 with:
if( this->GetPixelType() == ImageIOBase::VECTOR )
{
file << "VECTORS vectors "
<< this->GetComponentTypeAsString(m_ComponentType) << "\n";
}
else
{
file << "SCALARS scalars "
<< this->GetComponentTypeAsString(m_ComponentType) << " "
<< this->GetNumberOfComponents() << "\n";
file << "LOOKUP_TABLE default\n";
}
I also find vtkAssignAttribute in VTK can overcome this problem without
modifying ITK. Filter the data with before Glyph:
vtkAssignAttribute *assigner = vtkAssignAttribute::New();
assigner->Assign( vtkDataSetAttributes::SCALARS,
vtkDataSetAttributes::VECTORS, vtkAssignAttribute::POINT_DATA);
Therefore, I think it is OK without modifying ITK.
Guanglei
2006/12/31, Luis Ibanez <luis.ibanez at kitware.com>:
>
>
>
> Hi Wei,
>
> Here are a couple of options:
>
>
> A: Have you tried using the vtkImageReader ?
> instead of using the vtkStructuredPointsReader.
>
>
>
> B: Enjoy Open Source: you could modify the itkVTKImageIO.cxx
> file in line 481 in order to write out "VECTORS" instead
> of "SCALARS". You probably want to do this with code such
> as:
>
>
> if( this->GetPixeltype() == ImageIOBase::VECTOR )
> {
> file << "SCALARS scalars";
> }
> else
> {
> file << "VECTORS vectors";
> }
> file << this->GetComponentTypeAsString( m_ComponentType)...
>
>
>
> "B" is probably a better option. Please give it a try
> and let us know if we should make the changes in the
> CVS repository.
>
>
>
> Thanks
>
>
> Luis
>
>
> -------------------
> Wei Xiong wrote:
> > Hi ITKers and VTKers,
> >
> > I have some problems in saving and displaying registration
> > deformation field in VTK format.
> >
> > The code in ITK is
> >
> > typedef itk::Vector< float, Dimension > VectorPixelType;
> > typedef itk::Image< VectorPixelType, Dimension >
> DeformationFieldType;
> > typedef itk::ImageFileWriter< DeformationFieldType > FieldWriterType;
> > FieldWriterType::Pointer fieldWriter = FieldWriterType::New();
> > fieldWriter->SetFileName( "field.vtk" );
> > fieldWriter->SetInput( nrreg->GetDeformationField() );
> > fieldWriter->Update();
> >
> > The code in VTK is
> >
> > vtkStructuredPointsReader *fieldReader =
> vtkStructuredPointsReader::New();
> > fieldReader->SetFileName( "field.vtk" );
> > vtkArrowSource *arrow = vtkArrowSource::New();
> > vtkMaskPoints *masker = vtkMaskPoints::New();
> > masker->SetOnRatio( 1000 );
> > masker->RandomModeOn();
> > masker->SetInputConnection( fieldReader->GetOutputPort() );
> > vtkGlyph3D *glyph = vtkGlyph3D::New();
> > glyph->SetInputConnection( masker->GetOutputPort() );
> > glyph->SetScaleModeToScaleByVector();
> > glyph->SetColorModeToColorByVector();
> > glyph->OrientOn();
> > glyph->SetVectorModeToUseVector();
> > glyph->SetSourceConnection( arrow->GetOutputPort() );
> > vtkPolyDataMapper *glyphmapper = vtkPolyDataMapper::New();
> > glyphmapper->SetInputConnection(glyph->GetOutputPort());
> > vtkActor *glyphactor = vtkActor::New();
> >
> > Displaying in VTK results in all arrows just pointing to one direction,
> > say along X-axis.
> > I found this is because ITK save field data in VTK using Data Attribute
> > in the header:
> >
> > SCALARS scalars float 3
> > LOOKUP_TABLE default
> >
> > If I manually change it to:
> >
> > VECTORS vectors float
> >
> > Then, glyphs are displayed correctly.
> >
> > I also tried to use itkVTKImageIO to correct this behavior using the
> code:
> >
> > typedef itk::VTKImageIO VTKImageIOType;
> > VTKImageIOType::Pointer vtkIO = VTKImageIOType::New();
> > vtkIO->SetComponentType( VTKImageIOType::FLOAT );
> > vtkIO->SetPixelType( VTKImageIOType::VECTOR );
> > fieldWriter->SetImageIO( vtkIO );
> >
> > ITK just saves in the same way. Don't work.
> >
> > Can I change the behavior of ITK or is there any filter in VTK can
> > correct this?
> > Anyone has some ideas on this.
> >
> > Thank you very much!
> > Mengda
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > This is the private VTK discussion list.
> > Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> > Follow this link to subscribe/unsubscribe:
> > http://www.vtk.org/mailman/listinfo/vtkusers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070101/e70b7d6e/attachment.htm>
More information about the vtkusers
mailing list