[Insight-users] AnatomicalOrientation and OrientImageFilter

kurt Zhao kurtzhao at gmail.com
Wed Feb 28 09:55:45 EST 2007


Hi guys,

I am trying to convert the AnatomicalOrientation of a 3D MRI from RPI to RSA
using OrientImageFilter.


However, the entry "AnatomicalOrientation" in the header of the output *mha
file is always RPI. itkSNAP was not able to interpret the anatomical
orientation as RSA either.

so my question is:

1. is it a bug in OrientImageFilter?

2. How to verify the AnatomicalOrientation of a *.nii or *.mha file? should
I look at the header of meta data? or load them into Slicer3 or SNAP?

The data can be accessed at http://www.duke.edu/~kurtzhao/RPI.zip
The code is enclosed:

Thanks a lot!
-Kurt


#include <iostream>


#include <metaCommand.h>
#include <itkImageFileWriter.h>
#include <itkImageFileReader.h>
#include <itkAnalyzeImageIO.h>
#include <itkNiftiImageIO.h>
#include <itkOrientImageFilter.h>
#include <itkSpatialOrientation.h>



int main(int argc, char **argv)
  {

  /**
   * Typedefs and test reading to determine correct image types.
   * *******************************************************************
   */

  /** Initial image type. */
  const unsigned int    Dimension  =  3;
  //typedef float PixelType;
  typedef short PixelType;

  /** Some typedef's. */
  typedef itk::Image< PixelType, Dimension >      ImageType;
  typedef itk::ImageFileReader< ImageType >       ReaderType;
  typedef itk::ImageIOBase                        ImageIOBaseType;

  ReaderType::Pointer reader = ReaderType::New();

  itk::AnalyzeImageIO::Pointer io = itk::AnalyzeImageIO::New();

  //reader -> SetImageIO ( io ) ;
  /** Setup the Reader. */
  std::string inputFileName;
  //inputFileName = "C:/data/formatConversion/c1002a3T1.hdr";
  inputFileName = "C:/data/formatConversion/RPI.mha";

  reader->SetFileName( inputFileName.c_str() );

  /** Generate all information.
  reader->GenerateOutputInformation();

  ImageIOBaseType::Pointer testImageIOBase = testReader->GetImageIO();

  unsigned int inputDimension = testImageIOBase->GetNumberOfDimensions();
  unsigned int numberOfComponents =
testImageIOBase->GetNumberOfComponents();
  std::string inputPixelComponentType =
testImageIOBase->GetComponentTypeAsString(
    testImageIOBase->GetComponentType() );
  std::cout<<inputPixelComponentType<<std::endl;
  std::string pixelType = testImageIOBase->GetPixelTypeAsString(
    testImageIOBase->GetPixelType() );
  std::cout<<pixelType<<std::endl;

  std::string  outputPixelComponentType = inputPixelComponentType;
  */

  try
    {
    reader -> Update ( ) ;
    }
  catch( itk::ExceptionObject  &  err  )
    {
    std::cerr  << "ExceptionObject caught !"  << std::endl;
    std::cerr  << err <<  std::endl;
    return EXIT_FAILURE;
    }

  typedef itk::OrientImageFilter<ImageType,ImageType> OrienterType;
  OrienterType::Pointer orienter =  OrienterType::New();
  orienter->UseImageDirectionOn();

//orienter->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_LPS);


orienter->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RSA);


//orienter->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RPI);

  orienter->SetInput( reader -> GetOutput ( ) );
  try
    {
    orienter->Update();
    }
  catch( itk::ExceptionObject  &  err  )
    {
    std::cerr  << "ExceptionObject caught !"  << std::endl;
    std::cerr  << err <<  std::endl;
    return EXIT_FAILURE;
    }

  typedef itk::ImageFileWriter < ImageType >      WriterType;

  WriterType::Pointer writer = WriterType::New();

  itk::NiftiImageIO::Pointer niftIio = itk::NiftiImageIO::New();

  //writer -> SetImageIO ( niftIio ) ;

  std::string outputFileName;

  outputFileName = "C:/data/formatConversion/RSA.mha";
  //outputFileName = "C:/data/formatConversion/LPS.mha";
  //outputFileName = "C:/data/formatConversion/RPI.mha";

  writer ->SetFileName( outputFileName.c_str() );

  //writer -> SetInput ( reader -> GetOutput ( ) ) ;
  writer -> SetInput ( orienter -> GetOutput ( ) ) ;

  writer -> UseCompressionOn ( ) ;

  try
    {
    writer -> Update ( ) ;
    }
  catch( itk::ExceptionObject  &  err  )
    {
    std::cerr  << "ExceptionObject caught !"  << std::endl;
    std::cerr  << err <<  std::endl;
    return EXIT_FAILURE;
    }

  return EXIT_SUCCESS;
  }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070228/6ca64450/attachment.html


More information about the Insight-users mailing list