[Insight-users] Incremental Updates

Luis Ibanez luis.ibanez@kitware.com
Fri, 21 Mar 2003 14:43:35 -0500


Hi Ron,

1) We are using vtkVideoSource succesfully in
    another project in order to feed video data
    into ITK. (using the VTKImageToImage adaptor).

    That should work ok for you. Just keep in mind
    that the pipeline is driven by demand,
    and not by pushing data. So your
    application has to have a loop requesting
    images every X secons (or milliseconds)
    in order to update the pipeline.

2) I would suggest to preallocate the full 3D
    image that you expect to fill up. That is,
    set the number of Z slices to the expected
    US images to be captured. And progresively
    copy data from your video source into the
    correspondig slice of the 3D data set.

3) I'm affraid that the pipeline will not be
    easy to use for just computing the incremental
    changes. Every filter in the pipeline will
    assume that the 3D image is an entirely new
    data set.

    The only option is if your processing is
    done on each slice independently.... but
    this will put you in the old approach of
    doing 3D segmentation by stacking 2D
    segmentations.

4) In practice it depends on what type of filters
    do you want to apply.

     For example, you could manage to run a
     Region growing algrithm only on the region where
     the new slice(s) were added, and keeping previos
     segmentged regions...

     It will require some coding... but it should be
     feasible.


5)  Do you want this segmentation to work in real
     time ?

     That is, as each new slice arrive, do you need
     to get the segmentation updated before the next
     video image gets there ?


6)  One option that comes to mind is to segment
     every slice using 2D level sets. For example
     GeodesicActiveContours.  then use the final
     level set of slice N as the initial level set
     for slice N+1.  Since level sets are robust
     to topological splits and merges, they would
     probaly do the right thing when going through
     vascular branch points in the artery.

     I'm assuming that you move the US probe along
     the axis of the artery, so each indivicual image
     shows the artery as an almost circular object....
     is this the case ?



Regards,


    Luis


----------------------------------------------------
Ron Inbar wrote:
> Hi Luis,
> 
> 
>>Could you describe more details about the filter you
>>have in mind?
> 
> 
> Yes.  I was thinking about using a frame-grabber to incrementally build a
> volume from acquired video frames, and I'd like to see the results of the
> segmentation on the fly.  To be more specific, I want to segment
> intra-vascular ultrasound (IVUS) images of a coronary artery.
> 
> I saw that VTK has a class called vtkVideoSource (with several
> hardware-specific subclasses) that is supposed to do just that, but I didn't
> exactly understand how it fits into the pipeline framework.
> 
> 
>>I'm assuming that by 'adding' you mean something
>>like concatenating image regions, not cumulating
>>values in the same initialy defined image region.
> 
> 
> Yes, exactly.
> 
> 
>>This can be done at the application level by using
>>events and observers, but cannot be done using the
>>current built-in pipeline mechanisms.
> 
> 
> I'm aware of that, and I don't see any particular problem with implementing
> it at the application level.
> 
> What I'm concerned about is efficiency: I don't want to process the existing
> data over and over again as new data are concatenated to the region;
> instead, I would like each filter to use the data in its current
> BufferedRegion as it computes the new, larger output.  The problem with this
> requirement, as far as I see, is that generally when a filter is asked to
> update its output it has no knowledge about the nature of the change in its
> input; it can't tell, for example, whether it was re-wired to a new source
> altogether, or whether new data were simply concatenated to the existing
> data, as is the case in my application.  That's why I said I'm willing to
> write my own filters: I could make these filters take a "hint" from the
> application programmer, telling them that the input was just extended.  If
> they don't receive this hint, they would just re-compute everything from
> scratch, but if they do, they will try to avoid redundant re-computation.
> 
> If you can think of a way to achieve the same effect using existing ITK
> components, it would be of great assistance.
> 
> Sincerely,
> 
> Ron
> 
> 
> This e-mail message has been sent by MediGuide
> and is for the use of the intended recipients only.
> The message may contain privileged or confidential information .
> If you are not the intended recipient you are hereby notified that any use,
> distribution or copying of this communication is strictly prohibited,
> and you are requested to delete the e-mail and any attachments
> and notify the sender immediately.
>