<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.6944.0">
<TITLE>Re: [Insight-users] nested filters behaving like nested Image functions</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi Jim,<BR>
<BR>
Thanks for your expert knowledge on pipeline behaviour...!<BR>
<BR>
Miller, James V (Research) wrote:<BR>
<BR>
&gt; Jerome,<BR>
&gt;&nbsp;<BR>
&gt; With respect to C):&nbsp; Why is B not an image function?&nbsp; Is it only because the function you want does not exist and it exists as a filter?&nbsp; One option is to create an image function that does what you want.<BR>
<BR>
Yes exactly, the filter exisits but not its corresponding imageFunction. The filter can become complex, and rewrite an ImageFunction can be a little tedious...<BR>
<BR>
&gt;&nbsp;<BR>
&gt; To use a filter like this, you will need:<BR>
&gt;&nbsp;<BR>
&gt; 1) Make sure the outer filter's GenerateInputRequestedRegion() takes into account any padding needed by the inner filter.<BR>
&gt;&nbsp;<BR>
&gt; 2) Depending on the filter you are calling internally you may need to be a careful with managing the pipeline.&nbsp; At the 10,000 foot<BR>
&gt; level, you should be able to specify a requested region on the output of the inner filter and call Update().&nbsp; The output of the inner<BR>
&gt; filter should not need to reallocate. The memory management within the pipeline will try to reuse a buffer if it is the same size or<BR>
&gt; smaller than the current buffer.&nbsp; Calling Update() on the inner filter may affect the RequestedRegion of the outer filter's input.<BR>
&gt; This may or may not cause a problem with the remainder of your processing.&nbsp; If you try to access the RequestedRegion<BR>
&gt; of the outer filter's input after you do all the Update()'s on the inner filter, said RequestedRegion may be very small.<BR>
&gt;&nbsp;<BR>
&gt; A solution to this it to create a shallow copy of the outer filter's input image.&nbsp; Just create a new image of the same type<BR>
&gt; as the input.&nbsp; Set the regions to match the outer filter's input regions.&nbsp; But instead of calling Allocate() just set the PixelContainer<BR>
&gt; on the shallow image to be the same PixelContainer as the outer's filter's input.&nbsp; Then use this shallow copy as the input to<BR>
&gt; your inner filters.<BR>
&gt;<BR>
Great, thanks. I will first try your last option hoping I can make it work.<BR>
<BR>
Regards,<BR>
<BR>
Jerome.<BR>
<BR>
&gt;&nbsp;<BR>
&gt;&nbsp;<BR>
&gt;&nbsp;<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; -----Original Message-----<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; From: insight-users-bounces+millerjv=crd.ge.com@itk.org [<A HREF="mailto:insight-users-bounces+millerjv=crd.ge.com@itk.org">mailto:insight-users-bounces+millerjv=crd.ge.com@itk.org</A>]On Behalf Of SCHMID, Jerome<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Sent: Tuesday, November 01, 2005 2:44 AM<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; To: insight-users@itk.org<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Subject: [Insight-users] nested filters behaving like nested Image functions<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Hi all,<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Sorry for a subject title so complicated, I tried to find an &quot;explicit&quot; sentence...<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; In order to illustrate my questions, let's take a simple example:<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; filter A will perform this operation in its GenerateData() :<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Given a set of pixels within the requested region of an input image I, do<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // current Pixel in the input is named input_px. The corresponding pixel at the same position in the output is called ouput_px<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apply a filter B locally: &quot;output_px = B( input_px)&quot;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Some remarks:<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; a) B should be created _before_ the traversal of the pixels set.<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; b) B performs a _local_ treatment, that means it just needs a required region on the input (as usually performed in itk with the region enlargement techniques.)<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; c) B is a filter, _not_ an imageFunction, that means that no current itk class allows to do:<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; B-&gt;SetInputImage(I);<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; output_px = B-&gt;Evaluate( input_px_position );<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; The questions are then:<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; 1) How to deal with remark c)? Should I:<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; - create a requested region whose size is (1,1,1) in 3D and whose position is the current input pixel<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; - set it to filter B<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; - Update() on B<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; - Retrieve the value of output_pixel with&nbsp; GetPixel()<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; 2) If my previous solution is correct, how the filter B will behave with successive SetRequestedRegion + Update() calls as we have to traverse a set of different pixels that are not continuous? As the size of the requestedRegion doesn't change, its internal buffered region will remains the same ( i.e requested region + elargement needed for processing)? Or due to call of GetPixel of different regions within the image, some allocation will be done?<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; I do not need to perform a kind of &quot;GraftOutput() operation&quot; as everytime I can copy the value of the output_pixel in another structure that is much leighter than the whole image as it is not very dense.<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; I hope I have been enough clear...!<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Thank you!<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Jerome<BR>
&gt;<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; -----------------------------------<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Jerome SCHMID<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Project Manager/ Engineer<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Augmented and Virtual Reality<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; MIS Centre<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Prince of Wales Hospital<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Chinese University Of Hong-Kong<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; -----------------------------------<BR>
&gt;<BR>
<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>