[Insight-users] AnatomicalOrientation and OrientImageFilter

jiafucang jiafucang at anketech.com
Thu Mar 1 00:46:05 EST 2007


Hi, Kurt,

This is a bug http://www.itk.org/Bug/bug.php?op=show&bugid=3311&pos=17

Hope that helps!

Fucang



发件人: kurt Zhao
发送时间: 2007-03-01 09:02:17
收件人: insight-users at itk.org
抄送: 
主题: [Insight-users] AnatomicalOrientation and OrientImageFilter

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/20070301/2a4e49b8/attachment.html


More information about the Insight-users mailing list