[Insight-developers] spatial object iterators

Stephen R. Aylward aylward@unc.edu
Sun, 09 Feb 2003 22:17:26 -0500


Hi,

Thanks for the huge help!

Damion Shelton wrote:
> 
> First, the primary difference between spatial objects and spatial 
> functions is the means by which a value is returned. 

There are other differences such as including transforms, children 
objects, properties, bounding boxes, etc.   But I'm guessing you knew 
that.... :)

 > The
> InteriorExteriorSpatialFunction's (to be renamed to 
> BooleanSpatialFunctions) return true when a point is inside the 
> function, and false otherwise, in response to an Evaluate() call. This 
> is the "condition" in the conditional iterators. SpatialObjects are 
> quite similar, but the corresponding call is IsInside().

Cool.

> 
> There are a several ways I can see of solving this problem:
> 
> 1) Because the conditional iterators are templated, it should be 
> possible to use any of them with SpatialObjects, provided SpatialObjects 
> have an Evaluate() function. I don't know how much sense this makes in 
> the context of spatial objects (in that they don't really "Evaluate"), 
> but it would be relatively simple to wrap IsInside() into Evaluate(). 
> Both functions expect N-d points, so there's no fundamental data type 
> problem.

I could see adding an Evaluate function to the spatial objects.   If you 
Evaluate an object given a point, it returns whether or not it is in an 
object.  That really seems acceptable.

> 
> 2) It may be possible to do type checking at runtime, and call the 
> appropriate function. Is this true?

We could, but this seems a bit like a hack.

> 
> 3) SpatialObjects might be a subclass of SpatialFunctions, although I 
> haven't convinced myself of this. Are there any problems with 
> subclassing the spatial objects from spatial functions?

We could also do this.   Right now SpatialFunction derives from Object 
while SpatialObject derives from data object - I think this helps when 
SpatialObjects wrap an image/mesh.   Julien knows the most about the 
pluses/minuses of this.   Should be particularly irrelevant with 
pervasive pipelining.

> 
> 4) It would be relatively straightforward to write additional 
> conditional iterators, where the IsPixelIncluded() function is 
> implemented to call IsInside(). My concerns here are that this code 
> would essentially duplicate that of the spatial function iterators (with 
> the exception of one line) and therefore would create extra code to 
> maintain.

I agree. The plan was to write a spatialObjectToSpatialFunction adaptor 
that would handle this.   But perhaps adding the Evaluate function is 
better - saves a step for the user.

> 
> A final issue is the name of the resulting iterators. Right now, we have 
> FloodFilledSpatialFunctionConditionalIterator; if we create a version of 
> this which can iterate over spatial objects, would the name be confusing?
> 

Seems like Adding Evaluate or deriving are equivalent.   We'll think it 
over.   Any other opinions....


Thanks again for the huge help!

Stephen


> -Damion-
> 
> _______________________________________________
> Insight-developers mailing list
> Insight-developers@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-developers


-- 
===============================================
Dr. Stephen R. Aylward
Assistant Professor of Radiology
Adjunct Assistant Professor of Computer Science
http://caddlab.rad.unc.edu
aylward@unc.edu
(919) 966-9695