Hi!<br>I want to exctract one slice from a volume (.mha)....so I found this nice example: Examples/IO/ImageReadExtractWrite.cxx.<br><br>I implemented it for my function (see below...) but anyhow I get a error from ImageFileWriter..<br>
this is the log: Error&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; error C2664: &#39;itk::ImageFileWriter&lt;TInputImage&gt;::SetInput&#39; : cannot convert parameter 1 from &#39;itk::SmartPointer&lt;TObjectType&gt;&#39; to &#39;const itk::Image&lt;TPixel,VImageDimension&gt; *&#39;&nbsp;&nbsp;&nbsp; <br>
<br>any idea?<br>Marta<br><br>CODE: <br><br>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>#include &quot;itkExtractImageFilter.h&quot;<br>#include &quot;itkImage.h&quot;<br>#include &quot;itk_image.h&quot;<br>
#include &quot;slice_extraction.h&quot;<br>#include &quot;itkImageLinearIteratorWithIndex.h&quot;<br><br><br>/* =======================================================================*<br>&nbsp;&nbsp;&nbsp; Definitions<br>&nbsp;* =======================================================================*/<br>
<br>typedef itk::ExtractImageFilter&lt;inImgType,outImgType&gt;&nbsp;&nbsp;&nbsp; FilterType;<br>typedef itk::ImageLinearIteratorWithIndex&lt;outImgType&gt;&nbsp;&nbsp;&nbsp; IteratorType;<br>typedef itk::ImageLinearConstIteratorWithIndex&lt;outImgType&gt;&nbsp;&nbsp;&nbsp; ConstIteratorType;<br>
typedef itk::ImageFileWriter&lt;inImgType&gt;&nbsp;&nbsp;&nbsp; WriterType;<br><br><br>void slice_extraction(inImgType::Pointer reader, char* name)<br>{<br><br>&nbsp;&nbsp;&nbsp; FilterType::Pointer filter=FilterType::New();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; reader-&gt;Update(); <br>
&nbsp;&nbsp;&nbsp; inImgType::RegionType inputRegion=reader-&gt;GetLargestPossibleRegion();<br><br>&nbsp;&nbsp;&nbsp; inImgType::SizeType size = inputRegion.GetSize();<br>&nbsp;&nbsp;&nbsp; size[2] = 0;<br><br>&nbsp;&nbsp;&nbsp; inImgType::SizeType slices = reader-&gt;GetLargestPossibleRegion().GetSize();<br>
&nbsp;&nbsp;&nbsp; inImgType::IndexType start = inputRegion.GetIndex(); <br>&nbsp;&nbsp;&nbsp; start[2] = slices[2];<br><br>&nbsp;&nbsp;&nbsp; inImgType::RegionType desiredRegion; <br>&nbsp;&nbsp;&nbsp; desiredRegion.SetSize(size);<br>&nbsp;&nbsp;&nbsp; desiredRegion.SetIndex(start);<br><br>&nbsp;&nbsp;&nbsp; filter-&gt;SetExtractionRegion(desiredRegion);<br>
&nbsp;&nbsp;&nbsp; filter-&gt;SetInput(reader);<br><br><br>&nbsp;&nbsp;&nbsp; outImgType::ConstPointer inImg;<br><br><br>&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; filter-&gt;Update();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; inImg = filter-&gt;GetOutput();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch ( itk::ExceptionObject &amp;err)<br>
&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;ExceptionObject caught a !&quot; &lt;&lt; std::endl; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; std::cout &lt;&lt; err &lt;&lt; std::endl; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; outImgType::Pointer outImg=outImgType::New();<br>
<br>&nbsp;&nbsp;&nbsp; outImg-&gt;SetRegions(inImg-&gt;GetRequestedRegion());<br>&nbsp;&nbsp;&nbsp; outImg-&gt;CopyInformation(inImg);<br>&nbsp;&nbsp;&nbsp; outImg-&gt;Allocate();<br><br>&nbsp;&nbsp;&nbsp; ConstIteratorType inputIt(inImg,inImg-&gt;GetRequestedRegion());<br>&nbsp;&nbsp;&nbsp; IteratorType outputIt(outImg,inImg-&gt;GetRequestedRegion());<br>
<br>&nbsp;&nbsp;&nbsp; inputIt.SetDirection(0);<br>&nbsp;&nbsp;&nbsp; outputIt.SetDirection(0);<br><br>&nbsp;&nbsp;&nbsp; // the input iterator moves fwd across the columns, while the output iterator moves backward (CHECK IF IMAGE CORRECT!)<br>&nbsp;&nbsp;&nbsp; for ( inputIt.GoToBegin(),outputIt.GoToBegin(); !inputIt.IsAtEnd(); outputIt.NextLine(),&nbsp; inputIt.NextLine())<br>
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; inputIt.GoToBeginOfLine();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; outputIt.GoToEndOfLine();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; --outputIt;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while ( ! inputIt.IsAtEndOfLine() )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; outputIt.Set( inputIt.Get() );<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++inputIt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; --outputIt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; WriterType::Pointer writer = WriterType::New();<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetFileName(name);<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetInput(outImg);<br>&nbsp;&nbsp;&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; writer-&gt;Update();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch ( itk::ExceptionObject &amp;err)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;ExceptionObject caught !&quot; &lt;&lt; std::endl; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; std::cout &lt;&lt; err &lt;&lt; std::endl; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //return -1;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br><br>}<br clear="all"><br>-- <br>*******************************************************************<br>Marta Peroni<br><br>contacts:<br>mail: <a href="mailto:m.peroni@gmail.com">m.peroni@gmail.com</a><br>
mobile: +393488202136 (IT) +16178186365 (US)<br>skype: ablondieforlife<br><br>********************************************************************