<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi Kana,<div><br></div><div>Have you tried to build in release mode? It can make a big difference.</div><div><br></div><div>Good luck,</div><div><br></div><div>Dawood</div><div><br></div><div><br></div><div>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div><br></div><div>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div><br></div><div><span class="Apple-style-span" style="font-family: 'Times New Roman';
 font-size: medium; "><pre>&gt;<i> Hi ITK Users,
</i>&gt;<i>
</i>&gt;<i> I need some advice on memory management and speed.
</i>&gt;<i>
</i>&gt;<i> My system details: 64 bit windowsXP system and 4Gb RAM.
</i>&gt;<i>
</i>&gt;<i> My goal: To obtain eigen vectors for 100Mb unsigned short image. Eigen
</i>&gt;<i> vectors not for the whole image but for certain regions (approx occupies 40%
</i>&gt;<i> of image).
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i> I have to do some preprocessing too.
</i>&gt;<i>
</i>&gt;<i> The pipeline is :
</i>&gt;<i>
</i>&gt;<i> Original image -&gt; discretegaussian -&gt; gradientmagnitude -&gt;
</i>&gt;<i> HessianRecursiveGaussianImageFilter-&gt;symmetric eigenvalue analysis -&gt;
</i>&gt;<i> finally 3 vector image
</i>&gt;<i>
</i>&gt;<i> For the above pipeline for a 100Mb image, i am running out of RAM.
</i>&gt;<i>
</i>&gt;<i> After reading itkmails, i decided to use streamfilter to stream part of the
</i>&gt;<i> image so that the RAM usage is low. I only tested half way and the RAM was
</i>&gt;<i> overloaded.
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i> I am using streamimagefilter to reduce the memory usage. After calculation
</i>&gt;<i> of gradientmagnitude i have used 1.08Gb RAM. After this i need 1.2Gb RAM
</i>&gt;<i>
</i>&gt;<i> For hessianimageoutput, so by using streamfilter i thought i would be
</i>&gt;<i> reaching 2.5Gm RAM but i reach approx 6Gb(virtual memory is used).
</i>&gt;<i>
</i>&gt;<i> 1.       Am i doing something wrong with the stream filter ? (code given
</i>&gt;<i> below)
</i>&gt;<i>
</i>&gt;<i> 2.       I tried another option: As i do not need hessian for the whole
</i>&gt;<i> image, I used discretehessianfunction for hessian calculation but it is 30
</i>&gt;<i> times slower that the recursivehessian. Is discretegaussianimagefunction
</i>&gt;<i> multithreaded?
</i>&gt;<i>
</i>&gt;<i> 3.       Is there any other way to achieve speed vs RAM compromised
</i>&gt;<i> solution?
</i>&gt;<i>
</i>&gt;<i> 4.       The 100Mb data set is test data. The real data is 10Gb for which
</i>&gt;<i> i will use 64 bit linux system (opensuse 11.2) . will the pipeline be
</i>&gt;<i> executed in linux too?
</i>&gt;<i>
</i>&gt;<i> Below is my code and after application of filter show the RAM usage:
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   char *infilename = "StreamTest.mhd";
</i>&gt;<i>
</i>&gt;<i>   typedef itk::CovariantVector&lt;float,3&gt; VectorPixelType;
</i>&gt;<i>
</i>&gt;<i>   typedef itk::Vector&lt; VectorPixelType, 3 &gt; EV_PixelType;
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   //Image type
</i>&gt;<i>
</i>&gt;<i>   typedef itk::Image&lt;unsigned short, 3&gt;              InputImageType;
</i>&gt;<i>
</i>&gt;<i>   typedef itk::Image&lt;float, 3&gt;                       FloatImageType;
</i>&gt;<i>
</i>&gt;<i>   typedef
</i>&gt;<i> itk::Image&lt;EV_PixelType,3&gt;
</i>&gt;<i> EVImageType;
</i>&gt;<i>
</i>&gt;<i> **** RAM usage = 674Mb****
</i>&gt;<i>
</i>&gt;<i>   //reader initialisation and reading file
</i>&gt;<i>
</i>&gt;<i>   typedef itk::ImageFileReader&lt;InputImageType&gt;
</i>&gt;<i> ReaderType;
</i>&gt;<i>
</i>&gt;<i>   ReaderType::Pointer reader = ReaderType::New();
</i>&gt;<i>
</i>&gt;<i>   reader-&gt;SetFileName( infilename );
</i>&gt;<i>
</i>&gt;<i>   reader-&gt;Update();
</i>&gt;<i>
</i>&gt;<i>   InputImageType::Pointer inImage = reader-&gt;GetOutput();
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i> **** RAM usage = 783Mb****
</i>&gt;<i>
</i>&gt;<i>   typedef itk::DiscreteGaussianImageFilter&lt;InputImageType, FloatImageType&gt;
</i>&gt;<i> RGIFType;
</i>&gt;<i>
</i>&gt;<i>   RGIFType::Pointer gaussfilter = RGIFType::New();
</i>&gt;<i>
</i>&gt;<i>   gaussfilter-&gt;SetInput(inImage);
</i>&gt;<i>
</i>&gt;<i>   gaussfilter-&gt;SetVariance(4.0);
</i>&gt;<i>
</i>&gt;<i>   gaussfilter-&gt;SetMaximumError(0.01);
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   typedef itk::CastImageFilter&lt;FloatImageType,InputImageType&gt; CIFType;
</i>&gt;<i>
</i>&gt;<i>   CIFType::Pointer castfilter = CIFType::New();
</i>&gt;<i>
</i>&gt;<i>   castfilter-&gt;SetInput(gaussfilter-&gt;GetOutput());
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   typedef itk::GradientMagnitudeImageFilter&lt;InputImageType,FloatImageType&gt;
</i>&gt;<i> GMIFType;
</i>&gt;<i>
</i>&gt;<i>   GMIFType::Pointer gmfilter = GMIFType::New();
</i>&gt;<i>
</i>&gt;<i>   gmfilter-&gt;SetInput(castfilter-&gt;GetOutput());
</i>&gt;<i>
</i>&gt;<i>   gmfilter-&gt;Update();
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   FloatImageType::Pointer gmImage = gmfilter-&gt;GetOutput();
</i>&gt;<i>
</i>&gt;<i> **** RAM usage = 1290Mb****
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   gaussfilter-&gt;UnRegister();
</i>&gt;<i>
</i>&gt;<i>   castfilter-&gt;UnRegister();
</i>&gt;<i>
</i>&gt;<i>   **** RAM usage = 1080Mb****
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   typedef itk::HessianRecursiveGaussianImageFilter&lt;FloatImageType&gt;
</i>&gt;<i> HessianRecursiveGaussianFilterType;
</i>&gt;<i>
</i>&gt;<i>   typedef HessianRecursiveGaussianFilterType::OutputImageType
</i>&gt;<i> HessianImageType;
</i>&gt;<i>
</i>&gt;<i>   HessianRecursiveGaussianFilterType::Pointer hessianfilter =
</i>&gt;<i> HessianRecursiveGaussianFilterType::New();
</i>&gt;<i>
</i>&gt;<i>   hessianfilter-&gt;SetInput(gmImage);
</i>&gt;<i>
</i>&gt;<i>   hessianfilter-&gt;SetSigma(1);
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>   typedef itk::StreamingImageFilter&lt;HessianImageType,HessianImageType&gt;
</i>&gt;<i> StreamerType;
</i>&gt;<i>
</i>&gt;<i>   StreamerType::Pointer streamer = StreamerType::New();
</i>&gt;<i>
</i>&gt;<i>   streamer-&gt;SetInput( hessianfilter-&gt;GetOutput() );
</i>&gt;<i>
</i>&gt;<i>   streamer-&gt;SetNumberOfStreamDivisions( 20 );
</i>&gt;<i>
</i>&gt;<i>   streamer-&gt;Update();
</i>&gt;<i>
</i>&gt;<i> **** RAM usage = 3600Mb**** after few seconds it came to **** RAM usage =
</i>&gt;<i> 6120Mb****
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i>
</i>&gt;<i> Thank you in advance.
</i>&gt;<i>
</i>&gt;<i> Regards,
</i>&gt;<i>
</i>&gt;<i> Kana Arunachalam Kannappan
</i>&gt;<i>
</i>&gt;<i> Research Associate
</i>&gt;<i>
</i>&gt;<i> FH OÖ Forschungs &amp; Entwicklungs GmbH
</i>&gt;<i>
</i>&gt;<i> Stelzhamer Strasse 23,
</i>&gt;<i>
</i>&gt;<i> 4600 Wels,
</i>&gt;<i>
</i>&gt;<i> Austria.
</i>&gt;<i>
</i>&gt;<i> Phone: +43 (0)7242 72811 -4420
</i>&gt;<i>
</i>&gt;<i> <a href="http://www.itk.org/mailman/listinfo/insight-users">kana.arunachalam at fh-wels.at</a>
</i>&gt;<i>
</i>&gt;<i> www.fh-ooe.at; www.3dct.at</i></pre></span></div></td></tr></table><br>