Thanks a ot BIll, although I just tried what you said and it still doesn&#39;t work. The output is exactly the same.<br>Has anybody&nbsp; another suggestion?<br><br>Regards<br>Bert<br><br><div class="gmail_quote">On Tue, Jun 17, 2008 at 7:43 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Bert,<br>
<br>
Move the<br>
<div class="Ih2E3d">ExtractFilterType::Pointer extractFilter = ExtractFilterType::New ();<br>
</div>inside the for loop. Currently you are reusing the output of the same<br>
instance. By moving the New inside the loop, you will get a new<br>
extract filter for each iteration. The magic of smart pointers should<br>
delete memory when it should.<br>
<br>
Bill<br>
<div><div></div><div class="Wj3C7c"><br>
On Tue, Jun 17, 2008 at 12:45 PM, Alberto &lt;<a href="mailto:albermnz@gmail.com">albermnz@gmail.com</a>&gt; wrote:<br>
&gt; Dear all,<br>
&gt; I am trying to test that I know how to use the tileFIlter. What I am doing<br>
&gt; is to extract 5 2D slices and then, withot any processing, recover the 3D<br>
&gt; image. The problem is that all slices are OK, except the first one which is<br>
&gt; equal to the las one. I cannot see the mistake, could yo help me?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; typedef unsigned char &nbsp; &nbsp; &nbsp; &nbsp; InputPixelType;<br>
&gt; &nbsp; &nbsp; typedef unsigned char &nbsp; &nbsp; &nbsp; &nbsp; MiddlePixelType;<br>
&gt; &nbsp; &nbsp; typedef unsigned char &nbsp; &nbsp; &nbsp; &nbsp; OutputPixelType;<br>
&gt;<br>
&gt; &nbsp; &nbsp; typedef itk::Image&lt; InputPixelType, &nbsp;3 &gt; &nbsp; &nbsp;InputImageType;<br>
&gt; &nbsp; &nbsp; typedef itk::Image&lt; MiddlePixelType, 2 &gt; &nbsp; &nbsp;MiddleImageType;<br>
&gt; &nbsp; &nbsp; typedef itk::Image&lt; OutputPixelType, 3 &gt; &nbsp; &nbsp;OutputImageType;<br>
&gt;<br>
&gt; &nbsp; &nbsp; typedef itk::ImageFileReader&lt; InputImageType &nbsp;&gt; &nbsp;ReaderType;<br>
&gt; &nbsp; &nbsp; typedef itk::ImageFileWriter&lt; OutputImageType &nbsp;&gt; &nbsp;WriterType;<br>
&gt;<br>
&gt; &nbsp; &nbsp; typedef itk::ExtractImageFilter&lt; InputImageType, MiddleImageType &nbsp;&gt;<br>
&gt; ExtractFilterType;<br>
&gt; &nbsp; &nbsp; typedef itk::TileImageFilter&lt;MiddleImageType, OutputImageType &gt;<br>
&gt; TileFilterType;<br>
&gt;<br>
&gt; &nbsp; &nbsp; const char * inputFilename &nbsp;= argv[1];<br>
&gt; &nbsp; &nbsp; const char * outputFilename = argv[2];<br>
&gt;<br>
&gt; &nbsp; &nbsp; ReaderType::Pointer reader = ReaderType::New();<br>
&gt; &nbsp; &nbsp; WriterType::Pointer writer = WriterType::New();<br>
&gt; &nbsp; &nbsp; reader-&gt;SetFileName( inputFilename &nbsp;);<br>
&gt; &nbsp; &nbsp; writer-&gt;SetFileName( outputFilename );<br>
&gt;<br>
&gt; &nbsp; &nbsp; reader-&gt;Update();<br>
&gt;<br>
&gt; &nbsp; &nbsp; InputImageType::RegionType inputRegion =<br>
&gt; reader-&gt;GetOutput()-&gt;GetLargestPossibleRegion();<br>
&gt; &nbsp; &nbsp; ExtractFilterType::Pointer extractFilter = ExtractFilterType::New ();<br>
&gt;<br>
&gt; &nbsp; &nbsp; InputImageType::SizeType size = inputRegion.GetSize();<br>
&gt; &nbsp; &nbsp; size[2] = 0;<br>
&gt;<br>
&gt; &nbsp; &nbsp; InputImageType::IndexType start = inputRegion.GetIndex();<br>
&gt; &nbsp; &nbsp; InputImageType::RegionType desiredRegion;<br>
&gt;<br>
&gt; &nbsp; &nbsp; TileFilterType::Pointer tileFilter = TileFilterType::New();<br>
&gt;<br>
&gt; &nbsp; &nbsp; for (int sliceNumber=0; sliceNumber&lt;5; sliceNumber++)<br>
&gt; &nbsp; &nbsp; {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; start[2] = sliceNumber;<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; desiredRegion.SetSize( &nbsp;size &nbsp;);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; desiredRegion.SetIndex( start );<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; extractFilter-&gt;SetExtractionRegion( desiredRegion );<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; extractFilter-&gt;SetInput( reader-&gt;GetOutput() );<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; extractFilter-&gt;Update();<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; TileFilterType::LayoutArrayType layout;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; layout[0] = 1;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; layout[1] = 1;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; layout[2] = 0;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; tileFilter-&gt;SetLayout( layout );<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;Set up pipeline<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; tileFilter-&gt;SetInput( extractFilter-&gt;GetOutput() );<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;Vector of pointers to the many 2D extracted images<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; std::vector&lt; MiddleImageType::Pointer &gt; extracts;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; desiredRegion.SetIndex( start );<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; extracts.push_back( extractFilter-&gt;GetOutput() );<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; if (sliceNumber != 0)<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tileFilter-&gt;PushBackInput( extracts.back() );<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; extracts.back()-&gt;DisconnectPipeline();<br>
&gt; &nbsp; &nbsp; }<br>
&gt; &nbsp; &nbsp; tileFilter-&gt;Update();<br>
&gt;<br>
&gt;<br>
&gt; Thanks a lot<br>
&gt; Best regards<br>
&gt; Bert<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Insight-users mailing list<br>
&gt; <a href="mailto:Insight-users@itk.org">Insight-users@itk.org</a><br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br>