<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3059" name=GENERATOR>
<STYLE>
<!--
 /* Font Definitions */
 @font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:Verdana;
        color:windowtext;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
 /* Page Definitions */
 @page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        layout-grid:15.6pt;}
div.Section1
        {page:Section1;}
-->
</STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Verdana color=#000000 size=2>Hi, Kurt,</FONT></DIV>
<DIV><FONT face=Verdana color=#000000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><FONT color=#000000>This is a bug </FONT><A 
href="http://www.itk.org/Bug/bug.php?op=show&amp;bugid=3311&amp;pos=17"><FONT 
color=#000000>http://www.itk.org/Bug/bug.php?op=show&amp;bugid=3311&amp;pos=17</FONT></A></FONT></DIV>
<DIV><FONT face=Verdana color=#000000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana color=#000000 size=2>Hope that helps!</FONT></DIV>
<DIV><FONT face=Verdana color=#000000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana color=#000000 size=2>Fucang</FONT></DIV>
<DIV><FONT face=Verdana size=2>
<HR>
</FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>发件人:</STRONG> kurt 
Zhao</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>发送时间:</STRONG> 
2007-03-01&nbsp;09:02:17</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>收件人:</STRONG> 
insight-users@itk.org</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>抄送:</STRONG> </FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>主题:</STRONG> [Insight-users] 
AnatomicalOrientation and OrientImageFilter</FONT></FONT></DIV>
<DIV><FONT face=Verdana size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2>Hi guys,<BR><BR>I am trying to convert the 
AnatomicalOrientation of a 3D MRI from RPI to RSA using OrientImageFilter. 
<BR><BR><BR>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. <BR><BR>so my question is:<BR><BR>1. is it a bug in 
OrientImageFilter?<BR><BR>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? <BR><BR>The data can be accessed at <A 
href="http://www.duke.edu/~kurtzhao/RPI.zip">http://www.duke.edu/~kurtzhao/RPI.zip</A><BR>The 
code is enclosed:<BR><BR>Thanks a lot!<BR>-Kurt<BR><BR><BR>#include 
&lt;iostream&gt;<BR><BR><BR>#include &lt;metaCommand.h&gt;<BR>#include 
&lt;itkImageFileWriter.h&gt;<BR>#include 
&lt;itkImageFileReader.h&gt;<BR>#include &lt;itkAnalyzeImageIO.h&gt;<BR>#include 
&lt;itkNiftiImageIO.h&gt;<BR>#include &lt;itkOrientImageFilter.h 
&gt;<BR>#include &lt;itkSpatialOrientation.h&gt;<BR><BR><BR><BR>int main(int 
argc, char **argv)<BR>&nbsp; {<BR><BR>&nbsp; /** <BR>&nbsp;&nbsp; * Typedefs and 
test reading to determine correct image types.<BR>&nbsp;&nbsp; * 
******************************************************************* 
<BR>&nbsp;&nbsp; */<BR><BR>&nbsp; /** Initial image type. */<BR>&nbsp; const 
unsigned int&nbsp;&nbsp;&nbsp; Dimension&nbsp; =&nbsp; 3;<BR>&nbsp; //typedef 
float PixelType;<BR>&nbsp; typedef short PixelType;<BR><BR>&nbsp; /** Some 
typedef's. */<BR>&nbsp; typedef itk::Image&lt; PixelType, Dimension 
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType; <BR>&nbsp; typedef 
itk::ImageFileReader&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ReaderType;<BR>&nbsp; typedef 
itk::ImageIOBase&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ImageIOBaseType;<BR><BR>&nbsp; ReaderType::Pointer reader = 
ReaderType::New();<BR><BR>&nbsp; itk::AnalyzeImageIO::Pointer io = 
itk::AnalyzeImageIO::New(); <BR><BR>&nbsp; //reader -&gt; SetImageIO ( io ) 
;<BR>&nbsp; /** Setup the Reader. */<BR>&nbsp; std::string inputFileName; 
<BR>&nbsp; //inputFileName = "C:/data/formatConversion/c1002a3T1.hdr";<BR>&nbsp; 
inputFileName = "C:/data/formatConversion/RPI.mha"; <BR><BR>&nbsp; 
reader-&gt;SetFileName( inputFileName.c_str() );<BR><BR>&nbsp; /** Generate all 
information. <BR>&nbsp; reader-&gt;GenerateOutputInformation();<BR><BR>&nbsp; 
ImageIOBaseType::Pointer testImageIOBase = testReader-&gt;GetImageIO(); 
<BR><BR>&nbsp; unsigned int inputDimension = 
testImageIOBase-&gt;GetNumberOfDimensions();<BR>&nbsp; unsigned int 
numberOfComponents = testImageIOBase-&gt;GetNumberOfComponents();<BR>&nbsp; 
std::string inputPixelComponentType = 
testImageIOBase-&gt;GetComponentTypeAsString( <BR>&nbsp;&nbsp;&nbsp; 
testImageIOBase-&gt;GetComponentType() );<BR>&nbsp; 
std::cout&lt;&lt;inputPixelComponentType&lt;&lt;std::endl;<BR>&nbsp; std::string 
pixelType = testImageIOBase-&gt;GetPixelTypeAsString(<BR>&nbsp;&nbsp;&nbsp; 
testImageIOBase-&gt;GetPixelType() ); <BR>&nbsp; 
std::cout&lt;&lt;pixelType&lt;&lt;std::endl;<BR><BR>&nbsp; std::string&nbsp; 
outputPixelComponentType = inputPixelComponentType;<BR>&nbsp; */<BR><BR>&nbsp; 
try <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; reader -&gt; Update ( ) 
;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; catch( itk::ExceptionObject&nbsp; 
&amp;&nbsp; err&nbsp; ) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
std::cerr&nbsp; &lt;&lt; "ExceptionObject caught !"&nbsp; &lt;&lt; 
std::endl;<BR>&nbsp;&nbsp;&nbsp; std::cerr&nbsp; &lt;&lt; err &lt;&lt;&nbsp; 
std::endl;<BR>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>&nbsp;&nbsp;&nbsp; 
}<BR><BR>&nbsp; typedef itk::OrientImageFilter&lt;ImageType,ImageType&gt; 
OrienterType; <BR>&nbsp; OrienterType::Pointer orienter =&nbsp; 
OrienterType::New();<BR>&nbsp; orienter-&gt;UseImageDirectionOn();<BR>&nbsp; 
//orienter-&gt;SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_LPS); 
<BR>&nbsp; 
orienter-&gt;SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RSA); 
<BR>&nbsp; 
//orienter-&gt;SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RPI); 
<BR>&nbsp; orienter-&gt;SetInput( reader -&gt; GetOutput ( ) );<BR>&nbsp; try 
<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
orienter-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; catch( 
itk::ExceptionObject&nbsp; &amp;&nbsp; err&nbsp; )<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; std::cerr&nbsp; &lt;&lt; "ExceptionObject caught 
!"&nbsp; &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; std::cerr&nbsp; &lt;&lt; err 
&lt;&lt;&nbsp; std::endl;<BR>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE; 
<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp; typedef itk::ImageFileWriter &lt; 
ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriterType;<BR><BR>&nbsp; 
WriterType::Pointer writer = WriterType::New();<BR><BR>&nbsp; 
itk::NiftiImageIO::Pointer niftIio = itk::NiftiImageIO::New();<BR><BR>&nbsp; 
//writer -&gt; SetImageIO ( niftIio ) ;<BR><BR>&nbsp; std::string 
outputFileName; <BR><BR>&nbsp; outputFileName = 
"C:/data/formatConversion/RSA.mha";<BR>&nbsp; //outputFileName = 
"C:/data/formatConversion/LPS.mha"; <BR>&nbsp; //outputFileName = 
"C:/data/formatConversion/RPI.mha";<BR><BR>&nbsp; writer -&gt;SetFileName( 
outputFileName.c_str() );<BR><BR>&nbsp; //writer -&gt; SetInput ( reader -&gt; 
GetOutput ( ) ) ;<BR>&nbsp; writer -&gt; SetInput ( orienter -&gt; GetOutput ( ) 
) ; <BR><BR>&nbsp; writer -&gt; UseCompressionOn ( ) ;<BR><BR>&nbsp; try 
<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; writer -&gt; Update ( ) 
;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; catch( itk::ExceptionObject&nbsp; 
&amp;&nbsp; err&nbsp; )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
std::cerr&nbsp; &lt;&lt; "ExceptionObject caught !"&nbsp; &lt;&lt; std::endl; 
<BR>&nbsp;&nbsp;&nbsp; std::cerr&nbsp; &lt;&lt; err &lt;&lt;&nbsp; 
std::endl;<BR>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>&nbsp;&nbsp;&nbsp; 
}<BR><BR>&nbsp; return EXIT_SUCCESS;<BR>&nbsp; }<BR></FONT></DIV></BODY></HTML>