[vtkusers] Rotate vtkImage with vtkmatrix4x4

David Gobbi david.gobbi at gmail.com
Tue Mar 1 13:30:26 EST 2011


Hi Jothy,

About the right-to-left, do NOT do an image rotation to fix that.  That
should be fixed by changing the camera.  How do you look at images,
is it with the patient's left on your left, or with the patient's left
on your right?
Whichever it is, just set the camera Position and FocalPoint so that the
images are the right way.  In DICOM, X increases from right to left
(the patient's right and left).

To get the initial position correct, you should set the FocalPoint so that
it is at the center of your image.  Then set the camera Position such that
you get the direction-of-project that you want.  Yes, it is a pain, I know.

 - David


On Tue, Mar 1, 2011 at 11:20 AM, Jothy <jothybasu at gmail.com> wrote:
> I ahve to work with coronal and sagittal images as well.
>
> SetViewUpVector works, but the images are turned right-to-left and the
> images appears  all above the window - you have to pan it to view properly.
>
> I think the rotation about the IPP point is the only good solution for this
> problem.
>
> Can someone tell me how to rotate vtkImageData about the IPP point.
>
> It's really driving me nuts!
>
> Thank you
>
> Jothy
>
> On Tue, Mar 1, 2011 at 5:45 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Hi Jothy,
>>
>> If you work with sagittal and coronal image you will have to worry about
>> image orientation, but with axial images everything is identity.
>>
>> For axial images, just make sure that your camera ViewUp is (0, -1, 0)
>> and DirectionOfProjection is (0, 0, 1).  The direction of projection for
>> the camera is the (FocalPoint - Position) direction.
>>
>>  - David
>>
>>
>> On Tue, Mar 1, 2011 at 10:36 AM, Jothy <jothybasu at gmail.com> wrote:
>> > Hi David,
>> >
>> > I have given up using vtkImageViewer2 right from the beginign of this
>> > project!
>> >
>> > Since it has problem with actors with varying z position - if your
>> > actors
>> > are from cutter ( some go behind the viewer).I am using vtkImageActor
>> > with
>> > vtkImageMapToColors and vtkImageReslice.
>> >
>> > The match between the dose and CT is perfect, except the view is upside
>> > down.
>> >
>> > So you mean there is no point in setting rotation and instead use the
>> > camera
>> > orientation.
>> >
>> > Thanks
>> >
>> > Jothy
>> >
>> > On Tue, Mar 1, 2011 at 5:26 PM, David Gobbi <david.gobbi at gmail.com>
>> > wrote:
>> >>
>> >> 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