[ITK] change orientation of images with OrientImageFilter

Andras Lasso lasso at queensu.ca
Tue Jul 29 13:42:58 EDT 2014


Yes, the Slicer bug report that I referred to is closed: no changes planned in Slicer, as the agreement is that the issue has to be addressed at ITK level.
We did not push for a fix in ITK as Slicer always saves the images in LPS orientation (RAI in MetaIO nomenclature) and so for images saved by Slicer the loading works correctly.

Andras

From: Community [mailto:community-bounces at itk.org] On Behalf Of Butlers Home
Sent: Tuesday, July 29, 2014 1:34 PM
To: community at itk.org
Subject: Re: [ITK] change orientation of images with OrientImageFilter



On 29 July 2014 18:27, Andras Lasso <lasso at queensu.ca<mailto:lasso at queensu.ca>> wrote:
As it is described at http://www.na-mic.org/Bug/view.php?id=2173: update of the image pose is implemented in ITK for some formats (for example for NRRD it is implemented in itkNrrdImageIO.cxx), while it is not implemented for MetaIO (probably it should have been implemented in itkMetaImageIO.cxx).

I see that this will not change in the near future since the bug was submitted 2 years ago. I will try to find a workaround and post updates in case it works.


Andras


From: Community [mailto:community-bounces at itk.org<mailto:community-bounces at itk.org>] On Behalf Of Butlers Home
Sent: Tuesday, July 29, 2014 12:03 PM
Cc: community at itk.org<mailto:community at itk.org>
Subject: Re: [ITK] change orientation of images with OrientImageFilter


On 29 July 2014 17:22, Bradley Lowekamp <blowekamp at mail.nih.gov<mailto:blowekamp at mail.nih.gov>> wrote:
Hello Butlers,

Just because the images look the same doesn't mean the filter didn't have an effect! Does ITK-SNAP have a way to look at the orientation of the direction cosine matrix? This should be different between the two images.

The matrices stay the same: For example
[-0.5    0    0    0
 0     -0.5   0    0
 0        0   0.5  1]        is the same for LSP and RAI orientations.



My understanding of that orientation filter was that it changed the direction cosines AND the order of the pixels such that they still have the same physical location. Since you are using a viewer which is aware of this information I would not expect the image to visually change.

I've also checked their positions with Slicer and it yields the same interpretation. However, if what you say is true, then any visualizer should yield the same output provided that the same physical location is preserved. I still don't understand why one would not display the image with the orientation that corresponds to its specifications.


I don't know how that orientation field in the MHA file is used... others have already chimed in on that.

Brad

On Jul 29, 2014, at 10:13 AM, Butlers Home <butlershomecoffee at gmail.com<mailto:butlershomecoffee at gmail.com>> wrote:

I would like to know how I can change the orientation of two 3D images.
Scenario:
- both images are .mha
- one image has RAI as the initial orientation
- 2nd image has LPS as the initial orientation

I would like to set the same orientation RAI for both images before processing them (i.e., registering them in my case). With the below mentioned code I manage to change the orientation specified textually in the .mha files but visually they do not change. Why is that? Is the orientation changing just within the header specifications without actually changing the visualization part? For visualization I used ITK-SNAP.

Here is a code snippet from what I do:

[...]

typedef itk::ImageFileReader< ImageType2 > ImageReaderType1;
typedef itk::ImageFileReader< ImageType1 > ImageReaderType2;

ImageReaderType1::Pointer imReader1 = ImageReaderType1::New();
ImageReaderType2::Pointer imReader2 = ImageReaderType2::New();

imReader1->SetFileName("im1.mha");
imReader2->SetFileName("im2.mha");

imReader1->Update();

// set both images to same orientation

// orientation filter for 1st image
itk::OrientImageFilter<ImageType1, ImageType1>::Pointer orienter1 = itk::OrientImageFilter<ImageType1, ImageType1>::New();
orienter1->UseImageDirectionOn();
orienter1->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RAI);
orienter1->SetInput(imReader1->GetOutput());
orienter1->Update();

// orientation filter for 2nd image
itk::OrientImageFilter<ImageType2, ImageType2>::Pointer orienter2 = itk::OrientImageFilter<ImageType2, ImageType2>::New();
orienter2->UseImageDirectionOn();
orienter2->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RAI);
orienter2->SetInput(imReader2->GetOutput());
orienter2->Update();

[...]

I tried not using the cosine-based approach, i.e., use the itk::AnalyzeImageIO class together with itk::ExposeMetaData<>() but for some unknown reason, the orientation is not determined appropriately. I would also prefer not using them at all because, as far as I understood, they are deprecated.

Thank you.

Best regards,
--
Butlers
_______________________________________________
Community mailing list
Community at itk.org<mailto:Community at itk.org>
http://public.kitware.com/mailman/listinfo/community



Best,
--
Butlers

Thank you everyone for your suggestions and clarifications.


--
Butlers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20140729/1835d68f/attachment-0002.html>


More information about the Community mailing list