[vtkusers] Announcement: New image rendering classes for VTK
Dženan Zukić
dzenanz at gmail.com
Wed Jun 29 13:23:36 EDT 2011
I tried trial and error: premultiply translation, postmultiply, divide by
and multiply by spacing, all that unsuccessfully. Now I need to work out the
math :D
2011/6/29 David Gobbi <david.gobbi at gmail.com>
> Hi Dzenan,
>
> For your code, my guess is that the "translation" part of the 4x4
> matrix should be set to something like the origin multiplied by the
> rotation matrix, but there might be other little details that you need
> to take care of. My only suggestion is that you don't try to fix it
> through trial-end-error. Use pencil-and-paper to work through the
> math.
>
> - David
>
> 2011/6/29 Dženan Zukić <dzenanz at gmail.com>:
> > Hi David,
> >
> > with this I try to do what you suggested, i.e. consider VTK's world
> > coordinate system as DICOM patient coordinate system:
> > //red is the transformation-related code
> > void MainWindow::updateVisualization()
> > {
> > typedef itk::ImageToVTKImageFilter<VisualizingImageType>
> > itkVtkConverter;
> > itkVtkConverter::Pointer conv=itkVtkConverter::New();
> > conv->SetInput(logic->visualizing);
> > vtkGPUVolumeRayCastMapper *mapper = vtkGPUVolumeRayCastMapper::New();
> > mapper->SetInput(conv->GetOutput());
> > if (volume)
> > volume->Delete();
> > volume=vtkVolume::New();
> > volume->SetProperty( myTransferFunction );
> > volume->SetMapper( mapper );
> > mapper->SetBlendModeToComposite();
> > VisualizingImageType::DirectionType
> > d=logic->visualizing->GetDirection();
> > vtkMatrix4x4 *mat=vtkMatrix4x4::New();
> > for (int i=0; i<3; i++)
> > for (int k=0; k<3; k++)
> > mat->SetElement(i,k, d(i,k));
> > mat->SetElement(3,3, 1);
> > VisualizingImageType::SpacingType sp =
> logic->visualizing->GetSpacing();
> > VisualizingImageType::PointType
> origin=logic->visualizing->GetOrigin();
> > for (int i=0; i<3; i++)
> > mat->SetElement(i,3, origin[i]/sp[i]);
> > volume->SetUserMatrix(mat); //orientation and size OK, position wrong
> > vtkRenderer *renderer =
> > vis->GetRenderWindow()->GetRenderers()->GetFirstRenderer();
> > renderer->RemoveAllViewProps();
> > renderer->AddVolume( volume );
> > defaultCameraPos(); //centers view on the volume, looking at it from
> > left
> > vis->GetRenderWindow()->Render();
> >
> >
> vis->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->ResetCamera();
> > }
> > The polygonal data is in DICOM's patient coordinate system (vertex
> positions
> > from itk::Image->TransformIndexToPhysicalPoint() etc). The orientation is
> > correct, but I can't get the position correctly. I have tried
> > -origin[i]/sp[i], origin[i]*sp[i], origin[i], -origin[i], -2*origin[i]
> and
> > similar combinations but none of them worked. Any suggestion to what am I
> > doing wrong?
> > Regards,
> > Dženan
> > 2011/6/29 David Gobbi <david.gobbi at gmail.com>
> >>
> >> On Tue, Jun 28, 2011 at 9:40 AM, Dženan Zukić <dzenanz at gmail.com>
> wrote:
> >> > Hi David,
> >> >
> >> > I am interested in this too:
> >> > Does the above approach affect the polygonal actors in the scene
> >> > (segmented
> >> > parts of the image)?
> >> > Regards,
> >> > Dženan
> >>
> >> When the DICOM patient coordinate system is used as the VTK world
> >> coordinate system, the assumption is that everything (images AND
> >> polydata) would have a either already be in the patient coordinate
> >> system, or if not, you would to have a 4x4 transform to set as the
> >> actor's UserMatrix (or UserTransform). I.e. a transform to bring the
> >> data from its original coordinate system into the patient coordinate
> >> system.
> >>
> >> - David
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110629/da697388/attachment.htm>
More information about the vtkusers
mailing list