[Insight-users] using itkVoronoiSegmentationImageFilter ?

Miller, James V (Research) millerjv@crd.ge.com
Tue, 22 Oct 2002 10:14:39 -0400


I have been using the Voronoi segmentation techniques the last couple of
days and discovered that they do not operate the way I expected.  This
may just be a documentation issue.

>From the presentations of the algorithms at our various meetings, I expected the voronoi
segmentations to subdivide the image until each voronoi region was "homogenous", using the classical
definition of homogeneous from other split and merge segmentation techniques.  So what I expected to
see was a partitioning of the entire image where each voronoi region was "well" approximated as
constant intensity (with extensions to piecewise linear
and piecewise quadratic intensity surfaces).

Instead, the algorithm labels each voronoi region as either "interior", "exterior", or "boundary" and
subdivides the "boundary" voronoi regions down to a specified resolution.  The definition of
"interior" is not a homogeneity measure but rather a "compatibility" measure with a seed region
(where the sample mean and sample variance of the voronoi region agree with the estimates from the
seed region using an ad-hoc criterion).

I am going to try to subclass the VoronoiSegmentationImageFilterBase class and construct an algorithm
to produce the partitioning or oversegmentation of the scene that I am interested in.  I think I can
reuse the voronoi engine and use my own TestHomogeneity() method and use a virtual function to
replace the "interior", "exterior", "boundary" designations that only allow the boundary regions to
be subdivided with code that will subdivide any region that is not homogeneous enough.

This will give us two types of voronoi segmentation algorithms, one that roughly segments a region
that intensity value "consistent" or "compatible" with a seed region and one that partitions the
image into homogeneous regions.

I am thinking of calling the new filter VoronoiPartitioningImageFilter.

Jim



> -----Original Message-----
> From: Celina Imielinska [mailto:ci42@columbia.edu]
> Sent: Monday, October 21, 2002 6:19 PM
> To: Yinpeng Jin
> Cc: Seungbum Koo; insight-users@public.kitware.com
> Subject: Re: Re: [Insight-users] using 
> itkVoronoiSegmentationImageFilter
> ?
> 
> 
> 
>  Seungbum,
> 
>   as Yinpeng said, the Voronoi Diagram classifier segments 
> globally all the
> tissue in the image that is characterized by the homogeneity operator
> (derived from the fuzzy connectendness method). If you are 
> interested in
> picking one connected component from all the segmented 
> regions, you may
> use the DeformableMeshFilter (DM) to do the selection (and
> smoothing/improvement of the final segmentation as well).
> 
>  You can't use the DeformableMeshFilter without a prior, 
> since this is a
> boundary-based segmentation method that has to be initialized near the
> solution. For example, you can use as a prior the Markov Random Field
> (MRF)/Gibbs Prior, the itkGibbsPriorFilter (or 
> itkRGBGibbsPriorFilter),
> and follow with DM, then repeat iteratively MRF and DM, and 
> so on. There is
> a new version of the DM method that can be explained, in 
> details, by Ting
> Chen (chenting@graphics.cis.upenn.edu).
> 
>  You may try also, a stand-alone, vectorial relative fuzzy 
> connectedness
> method, the VectorFuzzyconnectednessImageFilter, to segment a region.
> 
>  The "Hybrid Segmentation Engine" consists of four 
> components: Deformable
> Model (DM), Gibbs Prior/Markov Random Field (MRF), Voroni Diagram
> Clssifier (VD), and Fuzzy Connectedness (FC). We have explored some
> hybrid "mixtures" derived from the engine: e.g. FC/VD/DM, MRF/DM,
> vectorial relatice FC... but other combinations could be 
> tested as well.
> 
>  Please let us know if need more detailed explanation.
> 
>   good luck,
> 
>  Celina Imielinska
> 
> On Mon, 21 Oct 2002, Yinpeng Jin wrote:
> 
> > VoronoiSegmenationImageFilter is a region-based classification,
> > split-and-merge like algorithm.
> > you are perfectly right, it picks up all the similar color 
> regions in whole
> > image. It works well if you have multiple objects in the image to
> > segment, it was used because SimpleFuzzyConnectedness can 
> only pick up
> > one connected component.
> > there is another version of FuzzyConnectedness, which is 
> able to claim
> > multiple objects (VectoriorFuzzyConnectedness)
> > And to use Deformable Models is definitedly a good idea,  
> actually, all
> > those three methods had been tested for combining together 
> to build a
> > hybrid segmentation framework.
> > I bet Celina, Jay and Dimitris can explain the idea
> > better, for your reference, please look at following paper 
> in MICCAI 2001:
> > C. Imielinska, D. Metaxas, J. Udupa, Y.Jin and T. Chen, "Hybrid
> > Segmentation Methods of Anatomical Data." Proceedings of The Fourth
> > International Conference on Medical Image Computing and Computer
> > Assisted Interventions (MICCAI 2001), pp. 1058-1066, 
> October 2001, Utrecht
> > Netherlands.
> >
> >
> >   ----- Original Message -----
> >   From: Seungbum Koo
> >   To: Yinpeng Jin
> >   Cc: insight-users@public.kitware.com
> >   Sent: Monday, October 21, 2002 4:51 PM
> >   Subject: Re: Re: [Insight-users] using 
> itkVoronoiSegmentationImageFilter ?
> >
> >
> >   Hi,
> >   Thanks for the help. It worked and segmented but not as I 
> expected. I don't understand well about 
> VoronoiSegmentationImageFilter but it seems to segment all 
> similar color regions in whole image as the seed region. I 
> just wanted to find more exact boundary of that found using 
> FuzzyConnectednessScalarFilter.
> >   Anyway I think the VoronoiSegmentationImageFilter worked 
> fine. What do you think about using DeformableMeshFilter 
> instead of VoronoiSegmentationImageFilter?
> >
> >   regards
> >   Seungbum Koo
> >
> >   > Title : Re: [Insight-users] using 
> itkVoronoiSegmentationImageFilter ?
> >   > Date : Sun, 20 Oct 2002 13:34:32 -0400
> >   > From : "Yinpeng Jin"
> >   > To : Seungbum Koo,
> >   >
> >   > if you use takeaprior, then you don't want to setMean 
> and setVar, those two parameters will be calculated from the 
> binary mask.
> >   > and
> >   > try to use
> >   > m_voronoiFilter->SetMeanPercentError(PERCENT);
> >   > m_voronoiFilter->SetVarPercentError(VARPERCENT);
> >   > in stead of
> >   > m_voronoiFilter->SetMeanTolerance(10);
> >   > m_voronoiFilter->SetVarTolerance(20);
> >   >
> >   > they are trying to manipulate the same parameter, but 
> usually are more intuitive to figure.
> >   > the MeanPercentError could usually be set between 0.1 to 0.3
> >   > and the VarPercentError could be between 1 to 3. they 
> don't depends on your pixel intensity range, while the 
> MeanTolerance and VarTolerance usually do.
> >   > Also, you can first output your m_binaryImage to see if 
> it is something reasonable. the 
> VoronoisegmentationImagefilter will need something at least represents
> >   > parts of your target object as the a prior.
> >   > Try the above, and let me know what happens.
> >   > Yinpeng.
> >   >
> >   >
> >   >
> >   > ----- Original Message -----
> >   > From: Seungbum Koo
> >   > To: insight-users@public.kitware.com
> >   > Sent: Sunday, October 20, 2002 12:45 AM
> >   > Subject: [Insight-users] using 
> itkVoronoiSegmentationImageFilter ?
> >   >
> >   >
> >   > Hi,
> >   >
> >   > I'm trying to use itkVoronoiSegmentationImageFilter 
> combined with itkSimpleFuzzyConnectednessScalarImageFilter.
> >   >
> >   > I made a binary image from 
> itkSimpleFuzzyConnectednessScalarImageFilter but I couldn't 
> figure out how to set itkVoronoiSegmentationImageFilter 
> variables. Here is my source code.
> >   >
> >   > =============================================================
> >   > m_voronoiFilter->SetInput(m_rawImageSource->GetOutput());
> >   > m_voronoiFilter->TakeAPrior(m_binaryImage);
> >   > m_voronoiFilter->SetMean(520);
> >   > m_voronoiFilter->SetVar(20);
> >   > m_voronoiFilter->SetMeanTolerance(10);
> >   > m_voronoiFilter->SetVarTolerance(20);
> >   > // m_voronoiFilter->SetNumberOfSeeds(400); // ??
> >   > m_voronoiFilter->SetSteps(5);
> >   > m_voronoiFilter->Update();
> >   > =============================================================
> >   >
> >   > m_binaryImage is calculated from m_rawImageSource and 
> as I expected.
> >   > But this code just makes a black image... all zeros.
> >   >
> >              Seungbum Koo
> >
> >
> >
> >
> >
> >         "?i,(r) AIAI3Y, Daum" http://www.daum.net !o AEo>y3/42?A 
> 1<*a CN,?AI3Y !>
> >
> >              ou,??U! AEiCI?U! Daum,?1/2AAu
> >               ,AAI,AAI 3/42?i ?e1/2AAO?   Daum??AIA<?a
> >               DaumE,?oAC CE1/4oC?! ?A?ACA AO?iAC CyAA~
> >
> >
> >
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users
>