<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt;color:#000000;"><div>Hi,<br>i try to apply a discrete gaussian filter on a serie of 3D dicom images.so i try to do what Luis said to me to read the dicom serie before and then add the discrete gaussian filter. the code that i wrote is the follwing, please can you help me toi correct it. really i need help.<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><br>#include "itkOrientedImage.h"<br>#include "itkGDCMImageIO.h"<br>#include "itkGDCMSeriesFileNames.h"<br>#include "itkImageSeriesReader.h"<br>#include "itkImageFileWriter.h"<br><br><br>#include "itkRescaleIntensityImageFilter.h"<br>#include "itkDiscreteGaussianImageFilter.h"<br><br><br>int main( int argc, char* argv[] )<br>{<br><br>&nbsp;/* if( argc
 &lt; 3 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Usage: " &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0] &lt;&lt; " DicomDirectory&nbsp; outputFileName&nbsp; [seriesName]" &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>*/<br><br>&nbsp;&nbsp;&nbsp; argc = 2;<br>&nbsp;&nbsp;&nbsp; argv[1] = "dicom";<br>&nbsp;&nbsp;&nbsp; argv[2] = "dicomMRA.hdr";<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::OrientedImage&lt; PixelType, Dimension &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType;<br><br>&nbsp; typedef itk::ImageSeriesReader&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType;<br>&nbsp; ReaderType::Pointer reader = ReaderType::New();<br><br>&nbsp; typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ImageIOType;<br>&nbsp; ImageIOType::Pointer dicomIO = ImageIOType::New();<br>&nbsp; <br>&nbsp; reader-&gt;SetImageIO( dicomIO );<br><br>&nbsp; typedef itk::GDCMSeriesFileNames NamesGeneratorType;<br>&nbsp; NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();<br><br>&nbsp; nameGenerator-&gt;SetUseSeriesDetails( true );<br>&nbsp; nameGenerator-&gt;AddSeriesRestriction("0008|0021" );<br>&nbsp; <br>&nbsp; nameGenerator-&gt;SetDirectory( argv[1] );<br><br>&nbsp; <br><br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; "The directory: " &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; argv[1] &lt;&lt; std::endl ;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Contains the following DICOM Series: ";<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br><br><br><br>&nbsp;&nbsp;&nbsp; typedef std::vector&lt; std::string &gt;&nbsp;&nbsp;&nbsp;
 SeriesIdContainer;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; const SeriesIdContainer &amp; seriesUID = nameGenerator-&gt;GetSeriesUIDs();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();<br>&nbsp;&nbsp;&nbsp; SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();<br>&nbsp;&nbsp;&nbsp; while( seriesItr != seriesEnd )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; seriesItr-&gt;c_str() &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesItr++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br>&nbsp;&nbsp;&nbsp; std::string seriesIdentifier;<br><br>&nbsp;&nbsp;&nbsp; if( argc &gt; 3 ) // If no optional series identifier<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesIdentifier = argv[3];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seriesIdentifier = seriesUID.begin()-&gt;c_str();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br><br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Now reading series: " &lt;&lt; std::endl &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; seriesIdentifier &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<br><br><br><br><br><br>&nbsp;&nbsp;&nbsp; typedef std::vector&lt; std::string &gt;&nbsp;&nbsp; FileNamesContainer;<br>&nbsp;&nbsp;&nbsp; FileNamesContainer fileNames;<br><br>&nbsp;&nbsp;&nbsp; fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );<br><br>&nbsp;&nbsp;&nbsp; reader-&gt;SetFileNames( fileNames );<br><br><br><br>&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;Update();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;
 catch (itk::ExceptionObject &amp;ex)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br>}<br>&nbsp; catch (itk::ExceptionObject &amp;ex)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; ex &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>typedef itk::DiscreteGaussianImageFilter&lt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputImageType, OutputImageType &gt;&nbsp; FilterType;<br><br>&nbsp; FilterType::Pointer filter = FilterType::New();<br>&nbsp;filter-&gt;SetInput( reader-&gt;GetOutput() );<br><br>const double gaussianVariance = atof( argv[3] );<br>&nbsp; const unsigned int maxKernelWidth = atoi( argv[4] );<br>&nbsp;filter-&gt;SetVariance( gaussianVariance );<br>&nbsp;
 filter-&gt;SetMaximumKernelWidth( maxKernelWidth );<br>&nbsp; filter-&gt;Update();<br><br><br>&nbsp; typedef unsigned char WritePixelType;<br>&nbsp; typedef itk::Image&lt; WritePixelType, 2 &gt; WriteImageType;<br>&nbsp; typedef itk::RescaleIntensityImageFilter&lt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType, WriteImageType &gt; RescaleFilterType;<br>&nbsp; RescaleFilterType::Pointer rescaler = RescaleFilterType::New();<br><br>&nbsp; rescaler-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<br>&nbsp; rescaler-&gt;SetOutputMaximum( 255 );<br><br>&nbsp; typedef itk::ImageFileWriter&lt; WriteImageType &gt;&nbsp; WriterType;<br>&nbsp; WriterType::Pointer writer = WriterType::New();<br>&nbsp; writer-&gt;SetFileName( argv[2] );<br>&nbsp; rescaler-&gt;SetInput( filter-&gt;GetOutput() );<br>&nbsp; writer-&gt;SetInput( rescaler-&gt;GetOutput() );<br>&nbsp; writer-&gt;Update();<br>&nbsp; return
 EXIT_SUCCESS;<br><br>}<br>&nbsp;&nbsp;&nbsp; thanks to all<br></div></div><br>



      </body></html>