[vtkusers] vtkImageSlice question

David Gobbi david.gobbi at gmail.com
Thu May 3 11:08:44 EDT 2012


Hi Siddharth,

If you just want to map your image pixels directly to screen pixels,
then there's hardly any reason to use a computer graphics toolkit like
VTK at all.  The goal of vtkImageActor and vtkImageSlice is to place
an image into a 3D scene, so that the vtkCamera can then be set up to
view that scene from a particular viewpoint.

There are several coordinate transformations that occur along the way.

First, the sampling information for the image is applied, i.e. the
spacing and voxels and the position of the lower-left corner voxel of
the image volume (or upper-left in the case of DICOM).  This
transformation maps the voxels to a physical block of space (usually
using millimetres as units).

Next, the prop3D transformation is applied.  This establishes the
position of the aforementioned block of space within the world
coordinate system. For medical applications, I always equate the world
coordinate system with the DICOM patient coordinate system of my
primary image series, in order to keep things simple.

Next, there are two camera transformation that are applied (a view
transformation and a projection transformation) that map the world
coordinates to the view coordinates, followed by a viewport
transformation that maps the viewport coordinates to screen pixels.

None of these transformations are specific to VTK.  The same basic
approach is used in virtually all modern computer graphics libraries.

There are recipes that you can apply to achieve basic effects (e.g
like viewing a 2D slice of an image at a specific zoom factor), but in
order to get the most out of VTK, it is important understand the
computer graphics fundamentals that underlie the toolkit.

 - David


On Thu, May 3, 2012 at 7:32 AM, sidd_vtk <siddharthvikal at gmail.com> wrote:
> Hi David & all vtk users,
>
> I'm using the newly added vtkImageSlice class (I've used vtkImageActor also
> with the same issue that I'm describing below). I set up the pipeline, and
> the image shows up. The issue is that the image that comes up does not
> preserve its original size in pixels unlike how vtkActor2D does. To be more
> specific and clear, e.g. if the image size in pixels is 512x512, the use of
> vtkActor2D results in displaying the image of size 512x512 pixels, but use
> of vtkImageSlice or vtkImageActor displays in size other than true size of
> the image. And I can't seem to figure out the scale factor that has been
> applied.
>
> I need to use vtkImageSlice or vtkImageActor, because they work well with
> vtkDistanceWidget. But I also require 1:1 display of the image. If the scale
> factor is known, I can re-transform my image to get what I want.
>
> Can you please point me the code where this re-scaling of the image happens
> before it gets rendered? or How to fetch the scaling that has been applied
> to the image when vtkImageSlice or vtkImageActor has been used?
>
> Any help is greatly appreciated.
>
> regards,
> Siddharth



More information about the vtkusers mailing list