Bryn <br><br>Thank you for the tip. I successfully connected the pipelines using the itkGDCM dicom series reader then used a itkcurvatureflowimagefilter and finally connected the ITK image to the vtk pipeline without writing an XML file using the vtkKWImage class and its SetITKImageBase. <br>
<br>A section of thecode is listed below for my future reference =)<br><br>I also reviewed the code you sugested for picking seed points. <a href="http://www.vision.ee.ethz.ch/%7Eblloyd/ImageViewer/" target="_blank">http://www.vision.ee.ethz.ch/~blloyd/ImageViewer/</a><br>
<br>I could not build the project I think the tar file is missing the Qt files and then I got some additional errors. My question is, I noticed that you write a xxx.txt file of the seeds you select with this application. <br>
<br>Do you later on read the seed.txt file in ITK? or can you export the seeds from VTK to ITK? <br><br>Thank you again. <br><br>Sergio <br><br><br><br>  char fname[] = &quot;/home/echopixel/Desktop/engine/code/seed/images&quot;;<br>
// DICOM READER <br>  typedef unsigned short    PixelType;<br>  const unsigned int      Dimension = 3;<br><br>  typedef itk::Image&lt; PixelType, Dimension &gt;         ImageType;<br><br>  typedef itk::ImageSeriesReader&lt; ImageType &gt;        ReaderType;<br>
  ReaderType::Pointer reader = ReaderType::New();<br><br>  typedef itk::GDCMImageIO       ImageIOType;<br>  ImageIOType::Pointer dicomIO = ImageIOType::New();<br>  <br>  reader-&gt;SetImageIO( dicomIO );<br><br>  typedef itk::GDCMSeriesFileNames NamesGeneratorType;<br>
  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();<br>  nameGenerator-&gt;SetUseSeriesDetails( true );<br>  nameGenerator-&gt;SetDirectory( fname );<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; fname &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>    const SeriesIdContainer &amp; seriesUID = nameGenerator-&gt;GetSeriesUIDs();<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; 3 ) // 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>    fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );<br>
  <br>    reader-&gt;SetFileNames( fileNames );<br>    try<br>      {      //reader is handler to image stack (volume)<br>      reader-&gt;Update();        // reader contaisn VOLUME stack as ITK Image<br>      }<br>    catch (itk::ExceptionObject &amp;ex)<br>
      {        //ctach any errors and print on screen<br>      std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>      }<br><br>    }     // END OF TRY that Identified Series and led to TRY that triggers reading. <br>  catch (itk::ExceptionObject &amp;ex)<br>
  {    // catch any errors and print on screen. <br>   std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>  }<br><br>  //Because CT Scanning has some offsets we must account for them - Slope and Intercept<br>   double intercept = dicomIO-&gt;GetRescaleIntercept();<br>
   double slope = dicomIO-&gt;GetRescaleSlope();<br><br>   std::cout &lt;&lt; &quot;Rescale Intercept value: &quot; &lt;&lt; intercept &lt;&lt; endl;<br>   std::cout &lt;&lt; &quot;Rescale Slope value: &quot; &lt;&lt; slope &lt;&lt; endl;<br>
  // image = reader image is ITK image contains volume stack<br>  ImageType::Pointer image = reader-&gt;GetOutput();<br>  //Get original stack parameters ie SIZE X 512 Y 512 Z 400+ slices<br>  ImageType::RegionType inputRegion = image-&gt;GetLargestPossibleRegion();<br>
  ImageType::SizeType size = inputRegion.GetSize();<br> <br>  int Xmax = size[0];<br>  int Ymax = size[1];<br>  int Zmax = size[2];<br>    // Ajust Slope &amp; Intercept Values to each VOXEL - Operate on same image through iterator IN<br>
    typedef itk::ImageRegionIterator&lt; ImageType &gt; IteratorType;<br>    IteratorType in( image, image-&gt;GetRequestedRegion() );<br>    // For each voxel in stack - pointed by IN incorporate slope and rescale<br>    for ( in.GoToBegin(); !in.IsAtEnd(); ++in) {    <br>
        in.Set( (in.Value() * slope) + (abs(intercept)));<br>    }<br><br>// DICOM READER <br>// itk filter <br>  itk::CurvatureFlowImageFilter&lt;ImageType,ImageType&gt;::Pointer cf = itk::CurvatureFlowImageFilter&lt;ImageType,ImageType&gt;::New();<br>
  cf-&gt;SetInput( reader-&gt;GetOutput() );<br>  //cf-&gt;SetInput(image);<br>  std::cout &lt;&lt; &quot;Now doing ITK-Curvature Flow: &quot; &lt;&lt; std::endl &lt;&lt; std::endl;<br>  cf-&gt;SetTimeStep(0.25);<br>  cf-&gt;SetNumberOfIterations(10);<br>
  cf-&gt;Update();<br><br>  vtkKWImage *kwImage = vtkKWImage::New();<br>  kwImage-&gt;SetITKImageBase(cf-&gt;GetOutput());<br><br>  vtkImageData *vtkImage = kwImage-&gt;GetVTKImage();<br><br>  double range[2];<br>  vtkImage-&gt;GetScalarRange(range);<br>
<br>  vtkImageShiftScale* shifter = vtkImageShiftScale::New();<br>  shifter-&gt;SetShift(-1.0*range[0]);<br>  shifter-&gt;SetScale(255.0/(range[1]-range[0]));<br>  shifter-&gt;SetOutputScalarTypeToUnsignedChar();<br>  shifter-&gt;SetInput(vtkImage);<br>
  shifter-&gt;ReleaseDataFlagOff();<br>  shifter-&gt;Update();<br><br>  vtkImageViewer2 *ImageViewer = vtkImageViewer2::New();<br>  ImageViewer-&gt;SetInput(shifter-&gt;GetOutput());<br>  ImageViewer-&gt;SetColorLevel(127);<br>
  ImageViewer-&gt;SetColorWindow(255);<br> <br><br><br>