Good evening, insight-users!!<br><br>I am trying to get a program that firstly read DICOM series from a directory, later extract all the images without considering headings and at last copy the image series (all the images png for example) into a new directory. When I read the errors, the compilator shows that there is an incompatibility of types, but I am not able to find what is the matter with that. Could you help me? <br>
<br>This is my code:<br><br>#if defined(_MSC_VER)<br>#pragma warning ( disable : 4786 )<br>#endif<br><br>#ifdef __BORLANDC__<br>#define ITK_LEAN_AND_MEAN<br>#endif<br><br>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>
#include &quot;itkRescaleIntensityImageFilter.h&quot;<br>#include &quot;itkGDCMImageIO.h&quot;<br>#include &quot;itkGDCMSeriesFileNames.h&quot;<br>#include &quot;itkImageSeriesReader.h&quot;<br>#include &quot;itkImageSeriesWriter.h&quot;<br>
<br>#include &lt;list&gt;<br>#include &lt;fstream&gt;<br>#include &lt;vector&gt;<br>#include &lt;itksys/SystemTools.hxx&gt;<br><br><br><br>int main( int argc, char* argv[] )<br>{<br>&nbsp; if( argc &lt; 3 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0] &lt;&lt; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; DicomDirectory&nbsp; OutputPngSeriesDirectory&quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br><br><br>&nbsp; typedef signed short&nbsp;&nbsp;&nbsp; PixelType;<br>&nbsp; const unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension = 3;<br><br>&nbsp; typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType;<br>
&nbsp; typedef itk::ImageSeriesReader&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType;<br><br><br>&nbsp; typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;<br>&nbsp; typedef itk::GDCMSeriesFileNames&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NamesGeneratorType;<br><br>
&nbsp; ImageIOType::Pointer gdcmIO = ImageIOType::New();<br>&nbsp; NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();<br><br>&nbsp; <br>&nbsp; <br>&nbsp; namesGenerator-&gt;SetInputDirectory( argv[1] );<br><br>&nbsp; const ReaderType::FileNamesContainer &amp; filenames = <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namesGenerator-&gt;GetInputFileNames();<br><br><br>&nbsp; <br><br>&nbsp; unsigned int numberOfFilenames =&nbsp; filenames.size();<br>&nbsp; std::cout &lt;&lt; numberOfFilenames &lt;&lt; std::endl; <br>&nbsp; for(unsigned int fni = 0; fni&lt;numberOfFilenames; fni++)<br>
&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;filename # &quot; &lt;&lt; fni &lt;&lt; &quot; = &quot;;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; filenames[fni] &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;<br><br>&nbsp; ReaderType::Pointer reader = ReaderType::New();<br>
<br>&nbsp; reader-&gt;SetImageIO( gdcmIO );<br>&nbsp; reader-&gt;SetFileNames( filenames );<br><br><br>&nbsp; <br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; reader-&gt;Update();<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; catch (itk::ExceptionObject &amp;excp)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception thrown while writing the image&quot; &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excp &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; typedef signed short InputPixelType;<br>&nbsp; const unsigned int&nbsp;&nbsp; InputDimension = 2;<br><br>&nbsp; typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>
<br><br>&nbsp; typedef itk::ImageFileReader&lt; InputImageType &gt; ReaderType2;<br><br>&nbsp; ReaderType::Pointer reader2 = ReaderType2::New();<br>&nbsp; reader2-&gt;SetFileName(reader-&gt;GetOutput() );<br><br>&nbsp; typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;<br>
<br>&nbsp; ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<br>&nbsp; <br>&nbsp; reader2-&gt;SetImageIO( gdcmImageIO );<br><br><br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; reader2-&gt;Update();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; catch (itk::ExceptionObject &amp; e)<br>&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;exception in file reader &quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br><br><br>&nbsp; typedef unsigned char WritePixelType;<br>
&nbsp; <br>&nbsp; typedef itk::Image&lt; WritePixelType, 2 &gt; WriteImageType;<br>&nbsp; <br>&nbsp; typedef itk::RescaleIntensityImageFilter&lt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputImageType, WriteImageType &gt; RescaleFilterType;<br><br>&nbsp; RescaleFilterType::Pointer rescaler = RescaleFilterType::New();<br>
<br>&nbsp; rescaler-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<br>&nbsp; rescaler-&gt;SetOutputMaximum( 255 );<br><br><br>&nbsp; typedef itk::ImageFileWriter&lt; WriteImageType &gt;&nbsp; Writer2Type;<br><br>&nbsp; Writer2Type::Pointer writer2 = Writer2Type::New();<br>
<br>&nbsp; writer2-&gt;SetFileName( argv[2] );<br>&nbsp;<br>&nbsp; rescaler-&gt;SetInput( reader2-&gt;GetOutput() );<br>&nbsp; writer2-&gt;SetInput( rescaler-&gt;GetOutput() );<br><br><br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; writer2-&gt;Update();<br>&nbsp;&nbsp;&nbsp; }<br>
&nbsp; catch (itk::ExceptionObject &amp; e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;exception in file writer &quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>
<br>&nbsp; const char * outputDirectory = argv[2];<br><br>&nbsp; itksys::SystemTools::MakeDirectory( outputDirectory );<br><br>&nbsp; <br>&nbsp; typedef signed short&nbsp;&nbsp;&nbsp; OutputPixelType;<br>&nbsp; const unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputDimension = 2;<br><br>
&nbsp; typedef itk::Image&lt; OutputPixelType, OutputDimension &gt;&nbsp;&nbsp;&nbsp; Image2DType;<br><br>&nbsp; typedef itk::ImageSeriesWriter&lt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType, Image2DType &gt;&nbsp; SeriesWriterType;<br><br>&nbsp; SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();<br>
<br>&nbsp; seriesWriter-&gt;SetInput( reader2-&gt;GetOutput() );<br>&nbsp; seriesWriter-&gt;SetImageIO( gdcmIO );<br><br>&nbsp; namesGenerator-&gt;SetOutputDirectory( outputDirectory );<br><br>&nbsp; seriesWriter-&gt;SetFileNames( namesGenerator-&gt;GetOutputFileNames() );<br>
<br>&nbsp; seriesWriter-&gt;SetMetaDataDictionaryArray( <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader2-&gt;GetMetaDataDictionaryArray() );<br><br><br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; seriesWriter-&gt;Update();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; catch( itk::ExceptionObject &amp; excp )<br>
&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception thrown while writing the series &quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excp &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; <br>&nbsp; return EXIT_SUCCESS;<br>
}<br><br><br>Thank you very much!! I would be very grateful if you could help me a bit!!<br><br>Regards!<br clear="all"><br>-- <br>Ignacio García Fenoll<br>Grupo de Imágenes Médicas<br>Departamento de Teoría de la Señal y Comunicaciones<br>
Universidad de Sevilla<br>e-mail: <a href="mailto:igfenoll@gmail.com">igfenoll@gmail.com</a><br><br>