[vtkusers] Save Registration Deformation field in ITK and
Markus Weigert
m.weigert at fz-juelich.de
Tue Jan 2 12:14:09 EST 2007
Hi Mengda,
why do you want to save the ITK deformation field to disk and
read it with a vtk reader???
You can translate the ITK vectorimage directly to VTK using
itk::ImageToVTKImageFilter and display it.
This way, you can use ITK Imagereaders and writers to read and
write your vectordata.
You can do this by the following code:
typedef itk::Image<float,3> DeformationFieldType;
void visualizeDeformationField(DeformationFieldType::Pointer defField)
{
try {
m_DefConnector = itk::ImageToVTKImageFilter<DeformationFieldType>::New();
m_DefConnector->SetInput(defField);
m_DefConnector->SetReleaseDataFlag(true);
m_DefConnector->Update();
vtkImageData* m_vtkImage = m_DefConnector->GetOutput();
m_outline->SetInput(m_vtkImage);
m_outlineMapper->SetInput(m_outline->GetOutput());
m_outlineActor->SetMapper(m_outlineMapper);
m_outlineActor->GetProperty()->SetColor(0.7, 0.3, 0.1);
m_pointData = m_vtkImage->GetPointData();
if ( m_pointData == NULL )
{
itkWarningMacro( << "vtkImage->GetPointData() returns NULL!" );
return ;
}
if ( m_pointData->GetNumberOfArrays() == 0 )
{
itkWarningMacro( << "vtkImage->GetPointData()->GetNumberOfArrays() is 0!" );
return ;
}
else if ( m_pointData->GetArrayName( 0 ) == NULL )
{
m_vtkImage->GetPointData() ->GetArray( 0 ) ->SetName( "vectors" );
}
m_arrowSource->Update();
m_maskPoints->SetInput(m_vtkImage);
m_maskPoints->SetMaximumNumberOfPoints(1000);
m_maskPoints->RandomModeOn();
m_maskPoints->Update();
m_deformationData->SetPoints(m_maskPoints->GetOutput()->GetPoints());
m_deformationData->GetPointData()->SetVectors(m_maskPoints->GetOutput()->GetPointData()->GetArray(0));
double* range = m_maskPoints->GetOutput()->GetPointData()->GetArray(0)->GetRange();
range[0] = 0;
m_lut->RemoveAllPoints();
m_lut->AddRGBPoint(range[0], 0.0, 0.0, 1.0);
m_lut->AddRGBPoint(range[0]+(range[1]-range[0])/4, 0.0, 0.5, 0.5);
m_lut->AddRGBPoint(range[0]+(range[1]-range[0])/2, 0.0, 1.0, 0.0);
m_lut->AddRGBPoint(range[1]-(range[1]-range[0])/4, 0.5, 0.5, 0.0);
m_lut->AddRGBPoint(range[1], 1.0, 0.0, 0.0);
m_scalarBar->SetLookupTable( m_lut );
m_scalarBar->SetTitle("Vector magnitude value");
m_scalarBar->SetOrientationToVertical();
m_scalarBar->GetLabelTextProperty()->SetColor(0,0,1);
m_scalarBar->GetTitleTextProperty()->SetColor(0,0,1);
m_glyph->SetSource( m_arrowSource->GetOutput() );
m_glyph->SetInput(m_deformationData);
m_glyph->OrientOn();
m_glyph->SetVectorModeToUseVector();
m_glyph->ScalingOn();
m_glyph->SetScaleModeToScaleByVector();
m_glyph->SetColorModeToColorByVector();
m_glyph->SetScaleFactor( 5.0 );
m_glyph->Update();
m_spikeMapper->SetInput(m_glyph->GetOutput());
m_spikeMapper->SetLookupTable( m_lut );
m_spikeMapper->Update();
m_spikeActor->SetMapper(m_spikeMapper);
m_spikeActor->GetProperty()->SetColor(0.0, 0.79, 0.34);
m_3DRenderer->AddActor( m_spikeActor );
m_3DRenderer->AddActor( m_outlineActor );
m_3DRenderer->AddActor( m_scalarBar );
m_3DRenderer->GetActiveCamera()->SetViewUp(0, 0, -1);
m_3DRenderer->GetActiveCamera()->SetPosition(-2, -2, -2);
m_3DRenderer->GetActiveCamera()->SetFocalPoint(0, 0, 0);
m_3DRenderer->GetActiveCamera()->ComputeViewPlaneNormal();
m_3DRenderer->ResetCamera();
m_3DRenderer->ResetCameraClippingRange();
m_3DRenderer->SetBackground(0.0, 0.0, 0.0);
m_3DRenderWindow->Start();
m_3DRenderer->Render();
m_3DRenderWindowInteractor->redraw();
}
Kind Regards,
Markus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070102/a2ac0362/attachment.htm>
More information about the vtkusers
mailing list