[vtkusers] Rotate vtkImage with vtkmatrix4x4

David Gobbi david.gobbi at gmail.com
Tue Mar 1 12:26:55 EST 2011


Hi Jothy,

If your ImageOrientationPatient is 1 0 0 0 1 0 then the direction
cosines will be the identity matrix.

So the image is fine, my guess is that vtkImageViewer2 is the
problem.  As I've said in other emails, I never use vtkImageViewer2.
But digging into its code, I see this:

      case vtkImageViewer2::SLICE_ORIENTATION_XY:
        cam->SetFocalPoint(0,0,0);
        cam->SetPosition(0,0,1); // -1 if medical ?
        cam->SetViewUp(0,1,0);
        break;

This view orientation is NOT the proper axial orientation for
DICOM patient coordinates.  In DICOM, Y increases in the
A-P direction (top-down), but vtkImageViewer2 has Y increase
from bottom to top.

I suggest that you give up on vtkImageViewer2.  As I've said
before, I always use vtkImageActor to display images, and I
set the camera orientation myself.  And I use FileLowerLeftOn.

And it is moot now, but the math here is incorrect:
  reslice->SetElement(0,3,IPP[0]);
  reslice->SetElement(1,3,IPP[1]);
  reslice->SetElement(2,3,IPP[2]);

This applies a translation by IPP after the rotation, which is
not the same thing as rotating about IPP.

 - David



On Tue, Mar 1, 2011 at 9:58 AM, Jothy <jothybasu at gmail.com> wrote:
> Yes it doesn't rotate at all!
>
> My axial elements were
>
> reslice->DeepCopy( imageReader->GetDirectionCosines());
> reslice->SetElement(0,3,IPP[0]);
> reslice->SetElement(1,3,IPP[1]);
> reslice->SetElement(2,3,IPP[2]);
>
> My images have
>
> Image position: -275 -524 -122.441
> Image Dims: 512 512 98
> Image Origin: -275 -524 -122.441
> ImageOrient: 1 0 -1.22465e-16 0 1 0
>
>
>
>
>
> But this is changing only the y axis (some translation in Y). But no
> rotation.
>
> Any help is greatly appreciated.
>
> Thanks again
>
> Jothy
>
> On Tue, Mar 1, 2011 at 4:42 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Hi Jothy,
>>
>> When you say "doesn't rotate the image", do you mean that it does
>> nothing at all?  What are the elements of your direction cosines matrix?
>>
>> Also, note that direction cosines matrix is a pure rotation matrix.
>> i.e. it rotates about (0,0,0).  You need to create a matrix that
>> rotates around a particular point in space.
>>
>>  - David
>>
>>
>> On Tue, Mar 1, 2011 at 9:28 AM, Jothy <jothybasu at gmail.com> wrote:
>> > Thanks!
>> >
>> > Now my images appeasr like the one shown in figure.
>> >
>> > I need to rotate the image and dose about the ImagePositionPatient
>> > upside-down.
>> >
>> > I tried vtkImageFlip - it invalidates the dicom coordinate system and
>> > the
>> > dose and image doesn't match.
>> >
>> > I tried this
>> >
>> >       vtkMatrix4x4 *invert = vtkMatrix4x4::New();
>> >
>> >         invert->DeepCopy( imageReader->GetDirectionCosines());
>> >
>> >         invert->Invert();
>> >
>> >         vtkImageReslice *reslice = vtkImageReslice::New();
>> >
>> >         reslice->SetResliceAxes( invert );
>> >
>> >         reslice->SetInput(this->imageData);
>> >
>> >         reslice->Update();
>> >
>> >
>> > But it doesn't rotate the image.How to rotate the image?
>> >
>> > Thanks
>> >
>> > Jothy
>> >
>> >
>> > On Tue, Mar 1, 2011 at 4:07 PM, Jothy <jothybasu at gmail.com> wrote:
>> >>
>> >> But in this example FileLowerLeft is switched off.
>> >>
>> >> Thanks
>> >>
>> >> Jothy
>> >>
>> >> On Tue, Mar 1, 2011 at 3:50 PM, Mathieu Malaterre
>> >> <mathieu.malaterre at gmail.com> wrote:
>> >>>
>> >>> jothy, I think what you are looking for is already in gdcm, have a
>> >>> look
>> >>> at:
>> >>> gdcmreslice.cxx
>> >>>
>> >>> hth
>> >>> On Tue, Mar 1, 2011 at 4:31 PM, Jothy <jothybasu at gmail.com> wrote:
>> >>> > Hi all,
>> >>> >
>> >>> > I am trying to rotate vtkImageData using vtkMatrix4x4 about a point.
>> >>> > is
>> >>> > there any example on how to do this?
>> >>> >
>> >>> > Thanks
>> >>> >
>> >>> > Jothy
>> >>> >
>> >>> > _______________________________________________
>> >>> > Powered by www.kitware.com
>> >>> >
>> >>> > Visit other Kitware open-source projects at
>> >>> > http://www.kitware.com/opensource/opensource.html
>> >>> >
>> >>> > Please keep messages on-topic and check the VTK FAQ at:
>> >>> > http://www.vtk.org/Wiki/VTK_FAQ
>> >>> >
>> >>> > Follow this link to subscribe/unsubscribe:
>> >>> > http://www.vtk.org/mailman/listinfo/vtkusers
>> >>> >
>> >>> >
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Mathieu
>> >>
>> >
>> >
>> > _______________________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> > http://www.kitware.com/opensource/opensource.html
>> >
>> > Please keep messages on-topic and check the VTK FAQ at:
>> > http://www.vtk.org/Wiki/VTK_FAQ
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://www.vtk.org/mailman/listinfo/vtkusers
>> >
>> >
>
>



More information about the vtkusers mailing list