Sorry, here is the CORRECT link:<br><br><a href="http://www.apmaths.uwo.ca/~jdrozd/SlicerImages1.png">http://www.apmaths.uwo.ca/~jdrozd/SlicerImages1.png</a><br><br>john<br><br><div class="gmail_quote">On Wed, Oct 7, 2009 at 11:55 AM, John Drozd <span dir="ltr">&lt;<a href="mailto:john.drozd@gmail.com">john.drozd@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br><br>Sorry to bother you again, but this morning I noticed one subtle difference between the original inputted DICOM series and the outputted DICOM volume when I view it in 3D Slicer.  The outputted volume is not flipped anymore which is good, but now it is translated in the sagittal view. The original inputted series had a sagittal range of -198.4 on the left to 0 on the right as revealed by the slider in 3D Slicer, and the outputted volume has a  sagittal range of (almost exactly double), i.e.,  -396.79 on the left and -198.4 on the right.<br>

<br>I&#39;ve been trying to fix this but I have had no success yet.  <br>Do you have any suggestions please?<br><br>A screen shot of the Slicer views are posted at<br><br><a href="http://www.apmaths.uwo.ca/%7Ejdrozd/SlicerImages.png" target="_blank">http://www.apmaths.uwo.ca/~jdrozd/SlicerImages1.png</a><br>

<br>The inputted series is on the left, and the outputted volume is on the right.<br><br>Below is my code:<div class="im"><br><br>#if defined(_MSC_VER)<br>#pragma warning ( disable : 4786 )<br>#endif<br><br><br>#include &quot;itkImageFileReader.h&quot; <br>

#include &quot;itkImageFileWriter.h&quot;<br></div><div class="im">#include &quot;itkOrientedImage.h&quot;<br>#include &quot;itkGDCMImageIO.h&quot;<br>#include &quot;itkGDCMSeriesFileNames.h&quot;<br>#include &quot;itkImageSeriesReader.h&quot;<br>

<br></div><div class="im">int main(int argc, char *argv[])<br>{<br>  char *paramname;<br>  if ( argc &lt; 2 )<br>    {<br>    std::cout &lt;&lt; &quot;Parameter file name missing&quot; &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0] &lt;&lt; &quot; param.file&quot; &lt;&lt; &quot; atlas.file&quot; &lt;&lt; &quot; subject.file&quot; &lt;&lt;std::endl;<br>

    return EXIT_FAILURE;<br>    } <br>  else <br>    { <br>    paramname=argv[1]; <br>    }<br><br></div><div><div></div><div class="h5">typedef short InputPixelType;<br>  const unsigned int   InputDimension = 3;<br><br>
  typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>
<br>  typedef itk::ImageSeriesReader&lt; InputImageType &gt; ReaderSeriesType;<br><br>  ReaderSeriesType::Pointer fixedsubjectfilter = ReaderSeriesType::New();<br><br> typedef itk::GDCMImageIO           ImageIOType;<br><br>

  ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<br><br>fixedsubjectfilter-&gt;SetImageIO( gdcmImageIO );<br><br>typedef itk::GDCMSeriesFileNames NamesGeneratorType;<br>  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();<br>

<br>  nameGenerator-&gt;SetUseSeriesDetails( true );<br>  nameGenerator-&gt;AddSeriesRestriction(&quot;0008|0021&quot; );<br><br>  nameGenerator-&gt;SetDirectory( argv[3] );<br><br>try<br>    {<br>    std::cout &lt;&lt; std::endl &lt;&lt; &quot;The directory: &quot; &lt;&lt; std::endl;<br>

    std::cout &lt;&lt; std::endl &lt;&lt; argv[3] &lt;&lt; std::endl &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;Contains the following DICOM Series: &quot;;<br>    std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>

<br>typedef std::vector&lt; std::string &gt;    SeriesIdContainer;<br>   <br>    const SeriesIdContainer &amp; seriesUID = nameGenerator-&gt;GetSeriesUIDs();<br>   <br>    //std::cout &lt;&lt; seriesUID.begin() &lt;&lt; endl;<br>

<br>    SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();<br>    SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();<br>    while( seriesItr != seriesEnd )<br>      {<br>      std::cout &lt;&lt; seriesItr-&gt;c_str() &lt;&lt; std::endl;<br>

      seriesItr++;<br>      }<br><br>std::string seriesIdentifier;<br><br>    if( argc &gt; 4 ) // If no optional series identifier<br>      {<br>      seriesIdentifier = argv[3];<br>      }<br>    else<br>      {<br>      seriesIdentifier = seriesUID.begin()-&gt;c_str();<br>

      }<br><br>std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;Now reading series: &quot; &lt;&lt; std::endl &lt;&lt; std::endl;<br>    std::cout &lt;&lt; seriesIdentifier &lt;&lt; std::endl;<br>

    std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br><br>typedef std::vector&lt; std::string &gt;   FileNamesContainer;<br>    FileNamesContainer fileNames;<br><br>    fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );<br>

<br>fixedsubjectfilter-&gt;SetFileNames( fileNames );<br><br>try<br>      {<br>      fixedsubjectfilter-&gt;Update();<br>      std::cout &lt;&lt; &quot;Subject read successfully&quot;  &lt;&lt; std::endl;<br>      }<br>    catch (itk::ExceptionObject &amp;ex)<br>

      {<br>      std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>      return EXIT_FAILURE;<br>      }<br><br>typedef itk::ImageFileWriter&lt; InputImageType &gt; WriterSubjectType;<br> <br>  WriterSubjectType::Pointer fixedsubjectfilterwriter = WriterSubjectType::New();<br>

<br></div></div><div class="im">  <span style="color: rgb(255, 0, 0);">//added these lines to fix the orientation problem</span><br>  fixedsubjectfilterwriter-&gt;UseInputMetaDataDictionaryOff();<br>  fixedsubjectfilterwriter-&gt;SetImageIO( gdcmImageIO );<br>

  <span style="color: rgb(255, 0, 0);">//end of added code</span><br><br></div><div class="im">fixedsubjectfilterwriter-&gt;SetFileName( &quot;subjectout.dcm&quot; );<br><br>fixedsubjectfilterwriter-&gt;SetInput( fixedsubjectfilter-&gt;GetOutput() );<br>

<br><br>try<br>      {<br>      fixedsubjectfilterwriter-&gt;Update();<br>      }<br>    catch (itk::ExceptionObject &amp;ex)<br>      {<br>      std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>      return EXIT_FAILURE;<br>

      }<br>    }<br>  catch (itk::ExceptionObject &amp;ex)<br>    {<br>    std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>    return EXIT_FAILURE;<br>    }<br><br><br><br>return EXIT_SUCCESS;<br>}<br><br></div>Thank you<br>
<font color="#888888"><br>john</font><div><div></div><div class="h5"><br>
<br><div class="gmail_quote">On Tue, Oct 6, 2009 at 3:40 PM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

I acknowledge that it is a bit magical.<br>
<div><div></div><div><br>
On Tue, Oct 6, 2009 at 3:38 PM, John Drozd &lt;<a href="mailto:john.drozd@gmail.com" target="_blank">john.drozd@gmail.com</a>&gt; wrote:<br>
&gt; Hi Bill,<br>
&gt;<br>
&gt; Thanks. The code you sent steered me in the right direction to fix the<br>
&gt; problem.<br>
&gt;<br>
&gt; I added the following lines to my code which fixed the problem:<br>
&gt;<br>
&gt; //added these lines to fix the orientation problem<br>
&gt;   fixedsubjectfilterwriter-&gt;UseInputMetaDataDictionaryOff();<br>
&gt;   fixedsubjectfilterwriter-&gt;SetImageIO( gdcmImageIO );<br>
&gt; //end of added code<br>
&gt;<br>
&gt; I suppose when writing a DICOM series to a DICOM volume, I had to set<br>
&gt; UseInputMetaDataDictionaryOff()<br>
&gt;<br>
&gt; Unfortunately, this was not in the example code<br>
&gt; Examples/IO/DicomSeriesReadImageWrite2.cxx<br>
&gt;<br>
&gt; But it was in<br>
&gt; Examples/IO/DicomImageReadWrite.cxx<br>
&gt;<br>
&gt; Thanks again Bill and Harvey for helping me.<br>
&gt;<br>
&gt; Take care,<br>
&gt; john<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Tue, Oct 6, 2009 at 11:55 AM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; John,<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve attached some code thta passes the metat data dictionary from the<br>
&gt;&gt; input to the output. This example does a resample, bout you should do<br>
&gt;&gt; a similar thing in your program.<br>
&gt;&gt;<br>
&gt;&gt; Bill<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Oct 6, 2009 at 11:38 AM, John Drozd &lt;<a href="mailto:john.drozd@gmail.com" target="_blank">john.drozd@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; I have attached a screen capture of the Slicer views. The Slicer views<br>
&gt;&gt; &gt; on<br>
&gt;&gt; &gt; the left are the original DICOM series (that are not flipped and fine).<br>
&gt;&gt; &gt; The<br>
&gt;&gt; &gt; Slicer Views on the right are the outputted volume (after reading the<br>
&gt;&gt; &gt; series<br>
&gt;&gt; &gt; from memory) and are flipped.  Note the -ve vs +ve values on the<br>
&gt;&gt; &gt; sliders,<br>
&gt;&gt; &gt; indicating the radiologist vs neurologist views.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; John<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Oct 6, 2009 at 10:21 AM, John Drozd &lt;<a href="mailto:john.drozd@gmail.com" target="_blank">john.drozd@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I invoke the program with:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; ./DeformableRegistration &quot;param.file&quot; &quot;m000-talairach.dcm&quot;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &quot;/trumpet/downloads/DeformableRegistration_Plugin/DeformableRegistration/datasubject&quot;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; where the last item on the list is the name of the directory containing<br>
&gt;&gt; &gt;&gt; the dicom series.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; john<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Tue, Oct 6, 2009 at 10:07 AM, John Drozd &lt;<a href="mailto:john.drozd@gmail.com" target="_blank">john.drozd@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Hi Bill,<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Yes, I did read in the original DICOM series into 3D Slicer and the<br>
&gt;&gt; &gt;&gt;&gt; original series was not flipped and fine.  I was checking if ITK had<br>
&gt;&gt; &gt;&gt;&gt; read<br>
&gt;&gt; &gt;&gt;&gt; the series correctly into memory, so I wrote it to a volume. I was<br>
&gt;&gt; &gt;&gt;&gt; writing<br>
&gt;&gt; &gt;&gt;&gt; the volume out to see what was in memory and when I viewed the<br>
&gt;&gt; &gt;&gt;&gt; outputted<br>
&gt;&gt; &gt;&gt;&gt; volume in 3D Slicer it was flipped.  In this case, I was basing my<br>
&gt;&gt; &gt;&gt;&gt; code on<br>
&gt;&gt; &gt;&gt;&gt; Examples/IO/DicomSeriesReadImageWrite2.cxx<br>
&gt;&gt; &gt;&gt;&gt; I plan to today read in the series and write it to a series (instead<br>
&gt;&gt; &gt;&gt;&gt; of a<br>
&gt;&gt; &gt;&gt;&gt; volume) and see if the outputted series will be flipped (hopefully<br>
&gt;&gt; &gt;&gt;&gt; not) when<br>
&gt;&gt; &gt;&gt;&gt; I view it in 3D Slicer.<br>
&gt;&gt; &gt;&gt;&gt; By the way, as shown in Examples/IO/DicomImageReadWrite.cxx, I did<br>
&gt;&gt; &gt;&gt;&gt; read<br>
&gt;&gt; &gt;&gt;&gt; in a dicom volume (a single file containing the talairach atlas) and<br>
&gt;&gt; &gt;&gt;&gt; wrote<br>
&gt;&gt; &gt;&gt;&gt; it out to another dicom volume and the outputted volume this time was<br>
&gt;&gt; &gt;&gt;&gt; not<br>
&gt;&gt; &gt;&gt;&gt; flipped when I viewed it in 3D Slicer.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Below is my code that I used for reading a dicom series and writing to<br>
&gt;&gt; &gt;&gt;&gt; a<br>
&gt;&gt; &gt;&gt;&gt; volume:<br>
&gt;&gt; &gt;&gt;&gt; (It is part of a deformable registration program that I am writing<br>
&gt;&gt; &gt;&gt;&gt; based<br>
&gt;&gt; &gt;&gt;&gt; on Examples/Registration/DeformableRegistration1.cxx so there are some<br>
&gt;&gt; &gt;&gt;&gt; header files and code from that)<br>
&gt;&gt; &gt;&gt;&gt; The pertinent reading and writing code is in red. (about 60 lines<br>
&gt;&gt; &gt;&gt;&gt; down)<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; #if defined(_MSC_VER)<br>
&gt;&gt; &gt;&gt;&gt; #pragma warning ( disable : 4786 )<br>
&gt;&gt; &gt;&gt;&gt; #endif<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkImageFileReader.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkImageFileWriter.h&quot;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkRescaleIntensityImageFilter.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkHistogramMatchingImageFilter.h&quot;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //Added from DicomImageReadWrite.cxx<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkGDCMImageIO.h&quot;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //Added from DicomSeriesReadImageWrite2.cxx<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkOrientedImage.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkGDCMImageIO.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkGDCMSeriesFileNames.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkImageSeriesReader.h&quot;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkFEM.h&quot;<br>
&gt;&gt; &gt;&gt;&gt; #include &quot;itkFEMRegistrationFilter.h&quot;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //  Next, we use \code{typedef}s to instantiate all necessary classes.<br>
&gt;&gt; &gt;&gt;&gt; We<br>
&gt;&gt; &gt;&gt;&gt; //  define the image and element types we plan to use to solve a<br>
&gt;&gt; &gt;&gt;&gt; //  two-dimensional registration problem.  We define multiple element<br>
&gt;&gt; &gt;&gt;&gt; //  types so that they can be used without recompiling the code.<br>
&gt;&gt; &gt;&gt;&gt; //<br>
&gt;&gt; &gt;&gt;&gt; //<br>
&gt;&gt; &gt;&gt;&gt; //  Note that in order to solve a three-dimensional registration<br>
&gt;&gt; &gt;&gt;&gt; //  problem, we would simply define 3D image and element types in lieu<br>
&gt;&gt; &gt;&gt;&gt; //  of those above.  The following declarations could be used for a 3D<br>
&gt;&gt; &gt;&gt;&gt; //  problem:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::Image&lt;short, 3&gt;                    fileImage3DType;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::Image&lt;short, 3&gt;                            Image3DType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::fem::Element3DC0LinearHexahedronMembrane   Element3DType;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::fem::Element3DC0LinearTetrahedronMembrane<br>
&gt;&gt; &gt;&gt;&gt; Element3DType2;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //  Here, we instantiate the load types and explicitly template the<br>
&gt;&gt; &gt;&gt;&gt; //  load implementation type.  We also define visitors that allow the<br>
&gt;&gt; &gt;&gt;&gt; //  elements and loads to communicate with one another.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef<br>
&gt;&gt; &gt;&gt;&gt; itk::fem::FiniteDifferenceFunctionLoad&lt;Image3DType,Image3DType&gt;<br>
&gt;&gt; &gt;&gt;&gt; ImageLoadType;<br>
&gt;&gt; &gt;&gt;&gt; template class itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef Element3DType::LoadImplementationFunctionPointer<br>
&gt;&gt; &gt;&gt;&gt; LoadImpFP;<br>
&gt;&gt; &gt;&gt;&gt; typedef Element3DType::LoadType<br>
&gt;&gt; &gt;&gt;&gt; ElementLoadType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef Element3DType2::LoadImplementationFunctionPointer<br>
&gt;&gt; &gt;&gt;&gt; LoadImpFP2;<br>
&gt;&gt; &gt;&gt;&gt; typedef Element3DType2::LoadType<br>
&gt;&gt; &gt;&gt;&gt; ElementLoadType2;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::fem::VisitorDispatcher&lt;Element3DType,ElementLoadType,<br>
&gt;&gt; &gt;&gt;&gt; LoadImpFP&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; DispatcherType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::fem::VisitorDispatcher&lt;Element3DType2,ElementLoadType2,<br>
&gt;&gt; &gt;&gt;&gt; LoadImpFP2&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; DispatcherType2;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //  Once all the necessary components have been instantiated, we can<br>
&gt;&gt; &gt;&gt;&gt; //  instantiate the \doxygen{FEMRegistrationFilter}, which depends on<br>
&gt;&gt; &gt;&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; //  image input and output types.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::fem::FEMRegistrationFilter&lt;Image3DType,Image3DType&gt;<br>
&gt;&gt; &gt;&gt;&gt; RegistrationType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; int main(int argc, char *argv[])<br>
&gt;&gt; &gt;&gt;&gt; {<br>
&gt;&gt; &gt;&gt;&gt;   char *paramname;<br>
&gt;&gt; &gt;&gt;&gt;   if ( argc &lt; 2 )<br>
&gt;&gt; &gt;&gt;&gt;     {<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; &quot;Parameter file name missing&quot; &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0] &lt;&lt; &quot; param.file&quot; &lt;&lt; &quot;<br>
&gt;&gt; &gt;&gt;&gt; atlas.file&quot;<br>
&gt;&gt; &gt;&gt;&gt; &lt;&lt; &quot; subject.file&quot; &lt;&lt;std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     return EXIT_FAILURE;<br>
&gt;&gt; &gt;&gt;&gt;     }<br>
&gt;&gt; &gt;&gt;&gt;   else<br>
&gt;&gt; &gt;&gt;&gt;     {<br>
&gt;&gt; &gt;&gt;&gt;     paramname=argv[1];<br>
&gt;&gt; &gt;&gt;&gt;     }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //  The \doxygen{fem::ImageMetricLoad} must be registered before it<br>
&gt;&gt; &gt;&gt;&gt; //  can be used correctly with a particular element type.  An example<br>
&gt;&gt; &gt;&gt;&gt; //  of this is shown below for ElementType.  Similar<br>
&gt;&gt; &gt;&gt;&gt; //  definitions are required for all other defined element types.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; // Register the correct load implementation with the element-typed<br>
&gt;&gt; &gt;&gt;&gt; visitor dispatcher.<br>
&gt;&gt; &gt;&gt;&gt;   {<br>
&gt;&gt; &gt;&gt;&gt; //  Software Guide : BeginCodeSnippet<br>
&gt;&gt; &gt;&gt;&gt;   Element3DType::LoadImplementationFunctionPointer fp =<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &amp;itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;::ImplementImageMetricLoad;<br>
&gt;&gt; &gt;&gt;&gt;   DispatcherType::RegisterVisitor((ImageLoadType*)0,fp);<br>
&gt;&gt; &gt;&gt;&gt; //  Software Guide : EndCodeSnippet<br>
&gt;&gt; &gt;&gt;&gt;   }<br>
&gt;&gt; &gt;&gt;&gt;   {<br>
&gt;&gt; &gt;&gt;&gt;   Element3DType2::LoadImplementationFunctionPointer fp =<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &amp;itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;::ImplementImageMetricLoad;<br>
&gt;&gt; &gt;&gt;&gt;   DispatcherType2::RegisterVisitor((ImageLoadType*)0,fp);<br>
&gt;&gt; &gt;&gt;&gt;   }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; //  In order to begin the registration, we declare an instance of the<br>
&gt;&gt; &gt;&gt;&gt; //  FEMRegistrationFilter.  For simplicity, we will call<br>
&gt;&gt; &gt;&gt;&gt; //  it \code{registrationFilter}.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   RegistrationType::Pointer registrationFilter =<br>
&gt;&gt; &gt;&gt;&gt; RegistrationType::New();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   typedef short InputPixelType;<br>
&gt;&gt; &gt;&gt;&gt;   const unsigned int   InputDimension = 3;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   typedef itk::ImageSeriesReader&lt; InputImageType &gt; ReaderSeriesType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   ReaderSeriesType::Pointer fixedsubjectfilter =<br>
&gt;&gt; &gt;&gt;&gt; ReaderSeriesType::New();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;  typedef itk::GDCMImageIO           ImageIOType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; fixedsubjectfilter-&gt;SetImageIO( gdcmImageIO );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::GDCMSeriesFileNames NamesGeneratorType;<br>
&gt;&gt; &gt;&gt;&gt;   NamesGeneratorType::Pointer nameGenerator =<br>
&gt;&gt; &gt;&gt;&gt; NamesGeneratorType::New();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   nameGenerator-&gt;SetUseSeriesDetails( true );<br>
&gt;&gt; &gt;&gt;&gt;   nameGenerator-&gt;AddSeriesRestriction(&quot;0008|0021&quot; );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   nameGenerator-&gt;SetDirectory( argv[3] );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; try<br>
&gt;&gt; &gt;&gt;&gt;     {<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; std::endl &lt;&lt; &quot;The directory: &quot; &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; std::endl &lt;&lt; argv[3] &lt;&lt; std::endl &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; &quot;Contains the following DICOM Series: &quot;;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef std::vector&lt; std::string &gt;    SeriesIdContainer;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;     const SeriesIdContainer &amp; seriesUID =<br>
&gt;&gt; &gt;&gt;&gt; nameGenerator-&gt;GetSeriesUIDs();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;     //std::cout &lt;&lt; seriesUID.begin() &lt;&lt; endl;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;     SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();<br>
&gt;&gt; &gt;&gt;&gt;     SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();<br>
&gt;&gt; &gt;&gt;&gt;     while( seriesItr != seriesEnd )<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       std::cout &lt;&lt; seriesItr-&gt;c_str() &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;       seriesItr++;<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; std::string seriesIdentifier;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;     if( argc &gt; 4 ) // If no optional series identifier<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       seriesIdentifier = argv[3];<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;     else<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       seriesIdentifier = seriesUID.begin()-&gt;c_str();<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; &quot;Now reading series: &quot; &lt;&lt; std::endl &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; seriesIdentifier &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef std::vector&lt; std::string &gt;   FileNamesContainer;<br>
&gt;&gt; &gt;&gt;&gt;     FileNamesContainer fileNames;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;     fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; fixedsubjectfilter-&gt;SetFileNames( fileNames );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; try<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       fixedsubjectfilter-&gt;Update();<br>
&gt;&gt; &gt;&gt;&gt;       std::cout &lt;&lt; &quot;Subject read successfully&quot;  &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;     catch (itk::ExceptionObject &amp;ex)<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;       return EXIT_FAILURE;<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; typedef itk::ImageFileWriter&lt; InputImageType &gt; WriterSubjectType;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   WriterSubjectType::Pointer fixedsubjectfilterwriter =<br>
&gt;&gt; &gt;&gt;&gt; WriterSubjectType::New();<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; fixedsubjectfilterwriter-&gt;SetFileName( &quot;subjectout.dcm&quot; );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; fixedsubjectfilterwriter-&gt;SetInput( fixedsubjectfilter-&gt;GetOutput() );<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; try<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       fixedsubjectfilterwriter-&gt;Update();<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;     catch (itk::ExceptionObject &amp;ex)<br>
&gt;&gt; &gt;&gt;&gt;       {<br>
&gt;&gt; &gt;&gt;&gt;       std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;       return EXIT_FAILURE;<br>
&gt;&gt; &gt;&gt;&gt;       }<br>
&gt;&gt; &gt;&gt;&gt;     }<br>
&gt;&gt; &gt;&gt;&gt;   catch (itk::ExceptionObject &amp;ex)<br>
&gt;&gt; &gt;&gt;&gt;     {<br>
&gt;&gt; &gt;&gt;&gt;     std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>
&gt;&gt; &gt;&gt;&gt;     return EXIT_FAILURE;<br>
&gt;&gt; &gt;&gt;&gt;     }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; return EXIT_SUCCESS;<br>
&gt;&gt; &gt;&gt;&gt; }<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; john<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; On Mon, Oct 5, 2009 at 7:09 PM, Bill Lorensen<br>
&gt;&gt; &gt;&gt;&gt; &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; 3D Slicer can read the DICOM directly. It will use the direction<br>
&gt;&gt; &gt;&gt;&gt;&gt; information properly. Why are you reading and writing it? I am<br>
&gt;&gt; &gt;&gt;&gt;&gt; suprised (and concerned) that 3D SLicer would flip the images.<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; Bill<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; On Mon, Oct 5, 2009 at 6:13 PM, John Drozd &lt;<a href="mailto:john.drozd@gmail.com" target="_blank">john.drozd@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Hello,<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; I am reading a brain subject in the form of a DICOM series using<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; ITK<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; writing it out from memory as a volume.<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; I used the method shown in<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Examples/IO/DicomSeriesReadImageWrite2.cxx<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; I viewed the original DICOM series in 3D Slicer, and also viewed<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; outputted volume in 3D Slicer.<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; I am using 3D Slicer because I am developing a segmentation module<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; for<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; 3D<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Slicer using ITK.<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; I noticed that the original DICOM series and the outputted volume<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; are<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; inverted in orientation, such that the original series is the<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; radiologist<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; view and the outputted volume is the neurosurgean view as per<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; <a href="http://www.itk.org/pipermail/insight-users/2009-June/031128.html" target="_blank">http://www.itk.org/pipermail/insight-users/2009-June/031128.html</a><br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/Proposals:Orientation#DICOM_LPS_Differences_in_Visualization_presented_to_Radiologist_and_NeuroSurgeons" target="_blank">http://www.itk.org/Wiki/Proposals:Orientation#DICOM_LPS_Differences_in_Visualization_presented_to_Radiologist_and_NeuroSurgeons</a><br>


&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Does this have something to do with what I read on the internet<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; that<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; vtk&#39;s<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; images are flipped vertically from itk&#39;s images?<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Is there a way to manipulate the image in memory using ITK so that<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Slicer<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; will display the outputted volume in the same radiologist<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; orientation<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; as the<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; original DICOM series?<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Thank you.<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; john<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; John Drozd<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Postdoctoral Fellow<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Imaging Research Laboratories<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Robarts Research Institute<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Room 1256<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; 100 Perth Drive<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; London, Ontario, Canada<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; N6A 5K8<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; (519) 661-2111 ext. 25306<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; _____________________________________<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; John Drozd<br>
&gt;&gt; &gt;&gt;&gt; Postdoctoral Fellow<br>
&gt;&gt; &gt;&gt;&gt; Imaging Research Laboratories<br>
&gt;&gt; &gt;&gt;&gt; Robarts Research Institute<br>
&gt;&gt; &gt;&gt;&gt; Room 1256<br>
&gt;&gt; &gt;&gt;&gt; 100 Perth Drive<br>
&gt;&gt; &gt;&gt;&gt; London, Ontario, Canada<br>
&gt;&gt; &gt;&gt;&gt; N6A 5K8<br>
&gt;&gt; &gt;&gt;&gt; (519) 661-2111 ext. 25306<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; John Drozd<br>
&gt;&gt; &gt;&gt; Postdoctoral Fellow<br>
&gt;&gt; &gt;&gt; Imaging Research Laboratories<br>
&gt;&gt; &gt;&gt; Robarts Research Institute<br>
&gt;&gt; &gt;&gt; Room 1256<br>
&gt;&gt; &gt;&gt; 100 Perth Drive<br>
&gt;&gt; &gt;&gt; London, Ontario, Canada<br>
&gt;&gt; &gt;&gt; N6A 5K8<br>
&gt;&gt; &gt;&gt; (519) 661-2111 ext. 25306<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; John Drozd<br>
&gt;&gt; &gt; Postdoctoral Fellow<br>
&gt;&gt; &gt; Imaging Research Laboratories<br>
&gt;&gt; &gt; Robarts Research Institute<br>
&gt;&gt; &gt; Room 1256<br>
&gt;&gt; &gt; 100 Perth Drive<br>
&gt;&gt; &gt; London, Ontario, Canada<br>
&gt;&gt; &gt; N6A 5K8<br>
&gt;&gt; &gt; (519) 661-2111 ext. 25306<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; John Drozd<br>
&gt; Postdoctoral Fellow<br>
&gt; Imaging Research Laboratories<br>
&gt; Robarts Research Institute<br>
&gt; Room 1256<br>
&gt; 100 Perth Drive<br>
&gt; London, Ontario, Canada<br>
&gt; N6A 5K8<br>
&gt; (519) 661-2111 ext. 25306<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br></div></div>-- <br><div><div></div><div class="h5">John Drozd<br>Postdoctoral Fellow<br>Imaging Research Laboratories<br>Robarts Research Institute<br>Room 1256<br>100 Perth Drive<br>
London, Ontario, Canada<br>
N6A 5K8<br>(519) 661-2111 ext. 25306<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>John Drozd<br>Postdoctoral Fellow<br>Imaging Research Laboratories<br>Robarts Research Institute<br>Room 1256<br>100 Perth Drive<br>London, Ontario, Canada<br>
N6A 5K8<br>(519) 661-2111 ext. 25306<br>