<div>I was trying to use GraftOutput() to set the output of CannyEdgeDetectionImageFilter.&nbsp; However, I find that the image does not change.&nbsp; I did same thing for other filters like Sigmoid and AnisotropicDiffusion, and they worked well.&nbsp; If I use&nbsp;&nbsp;g_OutputImage=cannyFilter-&gt;GetOutput();&nbsp;g_OutputImage-&gt;DisconnectPipeline(); it worked well.&nbsp;
</div>
<div>&nbsp;</div>
<div>I read the CannyEdgeDetection code for a while.&nbsp; Because I am still not familiar with the ITK architecture, I am not sure about my findings.&nbsp; But it seems to me that the beginning of the GenerateData() function just re-allocate the output buffer:
</div>
<div>template&lt; class TInputImage, class TOutputImage &gt;<br>void<br>CannyEdgeDetectionImageFilter&lt; TInputImage, TOutputImage &gt;<br>::GenerateData()<br>{<br>&nbsp; // Need to allocate output buffer<br>&nbsp; typename OutputImageType::Pointer output = this-&gt;GetOutput();
<br>&nbsp; output-&gt;SetBufferedRegion(output-&gt;GetRequestedRegion());<br>&nbsp; output-&gt;Allocate();<br>&nbsp;</div>
<div>&nbsp;</div>
<div>And at last line</div>
<div>&nbsp;<br>&nbsp; this-&gt;GraftOutput(m_UpdateBuffer);</div>
<div>&nbsp;</div>
<div>Sets the output buffer to be m_UpdateBuffer.</div>
<div>Both m_UpdateBuffer and m_UpdateBuffer1 was allocated in AllocateUpdateBuffer():</div>
<div>&nbsp;</div>
<div>
<p>template &lt;class TInputImage, class TOutputImage&gt;<br>void<br>CannyEdgeDetectionImageFilter&lt;TInputImage, TOutputImage&gt;<br>::AllocateUpdateBuffer()<br>{<br>&nbsp; // The update buffer looks just like the input.</p>

<p>&nbsp; typename TInputImage::ConstPointer input = this-&gt;GetInput();</p>
<p>&nbsp; m_UpdateBuffer-&gt;CopyInformation( input );<br>&nbsp; m_UpdateBuffer-&gt;SetRequestedRegion(input-&gt;GetRequestedRegion());<br>&nbsp; m_UpdateBuffer-&gt;SetBufferedRegion(input-&gt;GetBufferedRegion());<br>&nbsp; m_UpdateBuffer-&gt;Allocate();
<br>&nbsp; <br>&nbsp; m_UpdateBuffer1-&gt;CopyInformation( input );<br>&nbsp; m_UpdateBuffer1-&gt;SetRequestedRegion(input-&gt;GetRequestedRegion());<br>&nbsp; m_UpdateBuffer1-&gt;SetBufferedRegion(input-&gt;GetBufferedRegion());<br>&nbsp; m_UpdateBuffer1-&gt;Allocate();&nbsp; 
<br>}</p>
<p>Can anyone from development team confirm it is sth wrong with the code?&nbsp; Or it just I use it incorrectly.</p>
<p>&nbsp;</p></div>
<div>&nbsp;</div>
<div>&nbsp;</div>