[Insight-developers] Re: Vector image pixel type ?

Gordon Kindlmann gk at bwh.harvard.edu
Wed Sep 7 17:38:16 EDT 2005


hello,

If I remember correctly, the creation of the VectorImage was  
motivated by the practical usage constraints of working with  
diffusion-weighted MRI data, wherein you have multiple values  
(baseline or diffusion weighted) per pixel, but it is cleanest to  
defer learning the number of values per pixel from compile-time to  
run-time.  So, my answer is based on concerns specific to DWI, but I  
think others should chime in with thoughts on other ways the  
VectorImage can be used.

The immediate use case for the VectorImage is to do tensor estimation  
from the DWI values.  This is a simple per-pixel operation that  
computes a single tensor from the DWI values, in combination with  
accompanying information about the acquisition protocol (gradient  
directions, NEXs, etc).  This use doesn't require any mathematical  
operations on the image as whole, akin to filtering.  That is, we  
would not be doing scalar multiplication or addition on VectorImage  
pixels.  If you're asking about this with respect to the impending  
ITK release, I would say that no pixel arithmetic is required.

However, you can easily imagine doing such filtering (such as  
Gaussian blurring and up/downsampling) on DWIs, because I believe it  
would be just as justified, from a physical and image processing  
standpoint, as doing such filtering on any other kind of MR image, as  
long as the operation were done component-wise.  One could further  
imagine doing vector-valued non-linear filtering (such as anisotropic  
diffusion), which requires some notion of a gradient.  Those kinds of  
processing may complicate the interpretation of the data as a DWI  
image from which tensors can be meaningfully extracted, but I don't  
think those complications are qualitatively different than the  
interpretation of scalar MR images which have been so filtered.

In these respects, the VectorImage as used for DWI should be no  
different than any existing multi-valued image types which support  
scalar multiplication and addition operations (though the number of  
components is fixed at compile-time)- that is: pixels values are  
truly mathematical vectors.

However, other people may want to use the representational  
flexibility of VectorImages for other applications and needs, so  
other developers should probably help us determine the class of  
operations that makes sense.

best,
Gordon


On Sep 7, 2005, at 5:01 PM, Karthik Krishnan wrote:

> Hi Gordon,
>
> The VectorImage supports all iterators that image supports and as  
> you know has IO support .  So it can do anything that Image< Array  
> < T >, N > can do, (without fragmenting the memory)
>
> What exactly do you intend using this image for ?
>
> 1. Do you intend performing mathematical operations on this image ?
>
> (For instance applying a linear filter, say Gaussian smoothing on  
> VectorImage will require its PixelType to support mathematical  
> operations.)
>
> If you do then itk::Array  needs to support mathematical operators  
> like +, *, etc...
> I would just leave Array as is and create another Pixel type,  
> similar to the array, since Array is intended to represent a  
> collection of any N types.
>
>
> Let me know what you think.
>
> Regards
> karthik
>



More information about the Insight-developers mailing list