Hello Kevin,<div><br></div><div>Could you give me a little more details about how to use StreamingImageFilter()? I tried it  with the following code. But the error &quot;Failed to Allocate Memory For Image&quot; still happened. I don&#39;t have much experience in ITK. Maybe the streaming filter is employed in an incorrect way.</div>
<div><br></div><div>The pipeline is ImageReader() --&gt; StreamingFilter() --&gt; HessianFilter() --&gt; HessianToObjectnessFilter() --&gt; ImageWriter()</div><div><br></div><div>Here is part of the code:</div><div><br></div>
<div><div>typedef itk::StreamingImageFilter&lt;InputImageType, InputImageType&gt; StreamingFilterType;</div><div>StreamingFilterType::Pointer streaming = StreamingFilterType::New();</div><div>streaming-&gt;SetInput(imageReader-&gt;GetOutput());</div>
<div>streaming-&gt;SetNumberOfStreamDivisions(8);</div><div><br></div><div>typedef itk::HessianRecursiveGaussianImageFilter&lt; InputImageType &gt; HessianMatrixFilterType;</div><div><div>HessianMatrixFilterType::Pointer hessianMatrix = HessianMatrixFilterType::New();</div>
<div>hessianMatrix-&gt;SetInput(streaming-&gt;GetOutput());</div></div><div><br></div><div>typedef itk::HessianToObjectnessMeasureImageFilter&lt; HessianMatrixFilterType::OutputImageType,OutputImageType &gt; ObjectnessFilterType;</div>
<div><div>ObjectnessFilterType::Pointer objectnessFilter = ObjectnessFilterType::New();</div><div>objectnessFilter-&gt;SetInput(hessianMatrix-&gt;GetOutput());</div></div><div>** Next, Set the parameter for ObjectnessFilter **</div>
<div>** Finally, Submit to Image Writer **</div><div><br></div><div>Thanks a lot for your help.</div><div>Jianxu Chen</div><div><br></div><br><div class="gmail_quote">On Tue, Nov 6, 2012 at 9:39 AM, Jianxu Chen <span dir="ltr">&lt;<a href="mailto:jchen16@nd.edu" target="_blank">jchen16@nd.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">Hello Kevin,</span></div>
<div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif"><br>
</span></div><div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">Really appreciate your suggestion. I found that  &quot;</span><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">SetNumberOfStreamDivisions&quot; is really powerful when handling large data.</span></div>

<div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif"><br></span></div><div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">For the Hessian Matrix Filter, I noticed that this problem had already been discussed via the maillist in 2008.</span></div>

<div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif"><br></span></div><div><span style><font color="#222222" face="arial, sans-serif">                   <a href="http://www.itk.org/pipermail/insight-users/2008-June/026328.html" target="_blank">http://www.itk.org/pipermail/insight-users/2008-June/026328.html</a></font></span></div>

<div><span style><font color="#222222" face="arial, sans-serif"><br></font></span></div><div><span style><font color="#222222" face="arial, sans-serif">Some tests were conducted there. It showed that it might fail to allocate memory for the Hessian matrix even when there should be enough space theoretically. </font></span></div>

<div><span style><font color="#222222" face="arial, sans-serif"><br></font></span></div><div><span style><font color="#222222" face="arial, sans-serif">Anyway, your suggestion of using </font></span><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">SetNumberOfStreamDivisions is very useful. My problem can be solved. </span></div>

<div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif"><br></span></div><div><span style="color:rgb(34,34,34);font-size:13.333333969116211px;font-family:arial,sans-serif">Thanks again for your help.</span></div>
<span class="HOEnZb"><font color="#888888">
<div><font color="#222222" face="arial, sans-serif">Jianxu Chen</font></div></font></span><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote">On Tue, Nov 6, 2012 at 9:26 AM, Kevin H. Hobbs <span dir="ltr">&lt;<a href="mailto:hobbsk@ohio.edu" target="_blank">hobbsk@ohio.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On 11/04/2012 03:50 PM, Jianxu Chen wrote:<br>
&gt; Hello,<br>
&gt;<br>
&gt; I encountered a weird problem when computing the Hessian Matrix of a 3D<br>
&gt; image stack.<br>
&gt;<br>
&gt; I used HessianRecursiveGaussianImageFilter to compte the Hessian matrix.<br>
&gt; However, this filter only works well when the image is very very small.<br>
&gt;<br>
&gt; My data is a 1024*1024*30 image stack. When calling<br>
&gt; HessianRecursiveGaussianImageFilter to calculate the Hessian matrix, the<br>
&gt; system cannot allocate the memory space for it. Thus, I cut my data into<br>
&gt; a 350*350*30 image stack. The program works well. My computer has a 8GB<br>
&gt; RAM and is a 64-bit machine. I am wondering why the system fails to<br>
&gt; allocate the memory for the filter. There should be enough usable RAM in<br>
&gt; the machine.<br>
<br>
</div>If your data are unsigned char : 1024*1024*100 / 2^20 = 100 MiB.<br>
If your data are floats : 1024*1024*100 * 4 / 2^20 = 400 MiB.<br>
If your data are doubles : 1024*1024*100 * 8 / 2^20 = 800 MiB.<br>
<br>
The Hessian matrix is symmetric so only 6 values are required :<br>
        1024*1024*100 * 8 * 6 / 2^30 = 4.69 GiB.<br>
<br>
If you have a long pipeline your image could be in memory in many places.<br>
<div><br>
&gt;<br>
&gt; My data is at least 1024*1024*30, sometimes even 1024*1024*100. And I<br>
&gt; have to compute the Hessian matrix in my algorithm. What should I do in<br>
&gt; this case? Could you give my some advice? Really appreciate your help.<br>
&gt;<br>
<br>
</div>Shorten your pipeline. Reader =&gt; Filter =&gt; Writer.<br>
<br>
Set the ReleaseDataFlag or GlobalReleaseDataFlag so that filters free<br>
their data after satisfying downstream requests.<br>
<br>
Stream your pipeline :<br>
        writer-&gt;SetNumberOfStreamDivisions( n );<br>
<br>
<br>
</blockquote></div><br>
</div></div></blockquote></div><br></div>