[Insight-users] Re: Gradient Vector Flow Image Filter compile error

Luis Ibanez luis.ibanez at kitware.com
Thu Oct 21 11:23:51 EDT 2004



Hi Quan,



The purpose of the GradientVectorFlowImageFilter is to
smooth a vector field by computing the equivalent of
diffusion on the vector field.

This filter expect an image of vectors as input and
will produce an image of vectors (the same image type)
as output.



The typical use of this filter in deformable models
is to use the following pipeline:



A) ImageToBeSegmented
           |
           | [scalar image]
           V
B) GradientMagnitudeFilter (edge detector)
           |
           | [scalar image]
           V
C) GradientImageFilter (create vector field)
           |
           | [vector image]
           V
D) GradientVectorFlowImageFilter (smooth vector field)
           |
           | [vector image]
           V


A) is the input image to be segmented, where you
    expect to have edges defining the borders of
    anatomical structures.

B) Is edge detection, so its output can be seen
    as an edge map.

C) Computes a vector field where the vectors
    point to the local increading direction of
    the edge map.  In principle, this vector field
    is such that by following the path of vectors
    you will end up in the maximum of intensities
    of the edge map.

D) Since (C) tends to be quite noisy, and it tends
    the point to local directions that are not necesarily
    the ones best suited for directing a model towards
    the edges of structures (e.g. they cannot drive a
    deformable model inside a narrow passage), it is
    usually desirable to massage the vector field in
    (C) with the filter (D).


The output of this pipeline is then used as the
source of "External Forces" for the deformable
model.

All this will be clearer if you play with some
synthetic examples and visualize the resulting
vector fields with ParaView.  You can download
paraview for free from

            http://www.paraview.org



    Regards,


       Luis





===========================================
Quan Chen wrote:

> Sorry, I just checked the example (I didn't be able to find it under
> example dir, it was under Testing dir).  And I see the different way
> that this filter should be used.  However I still have question.
> 
> The testing example puts this way:
> 
> typedef itk::GradientVectorFlowImageFilter<myGradientImageType,
> myGradientImageType>
>                                               myGVFFilterType;
> 
>   typedef itk::GradientImageFilter<myImageType, double, double>
>                                               myGFilterType;
> 
> So it want the inputimage and outimage of the GradientVectorFlow the
> same format?  However, the filter itself should expected a edge image,
> which is not gradient image itself.  In the testing example, we have
> 
> myGFilterType::Pointer gfilter = myGFilterType::New();
> myGVFFilterType::Pointer m_GVFFilter = myGVFFilterType::New();
> 
>   m_GVFFilter->SetInput(gfilter->GetOutput());
> 
> Now the output of the gfilter (myGFilterType) should be myImageType,
> right?  So the GVFFilter will doing some conversion?  Why this filter
> is designed this way?
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 
> 






More information about the Insight-users mailing list