[Insight-users] using itkVoronoiSegmentationImageFilter ?

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


Yinpeng,

I just threw together a quick partitioning voronoi filter.

I overrode the methods:

TestHomogeneity() - of course

ClassifyDiagram() - remove the code that tries to identify boundaries. rather I just keep track of
whehter a region was homogeneous or not.

GenerateAddingSeeds() - add a new seed if either adjacent region is inhomogeneous

MakeSegmentBoundary() - output all edges

MakeSegmentObject() -  not completed.  need to output a segment id for each 
region.


So it was quite simple to create a partitioning filter. Though I must admit that I ended up copying
the code in the above methods are removing the
parts that identified boundary regions.  It is not a clean as I would like.
The other option was to put a mode into the base class that could be
used to determine whether the filter is segmenting or partitioning. I didn't
take that path initially because I didn't want a the variable to be something
that could be changed on the fly.  I might rework the functions a bit
so each of the methods in the base class call a virtual function whose default implementations would
be for segmentation and the subclass could override 
for partitioning.



> -----Original Message-----
> From: Yinpeng Jin [mailto:yj76@columbia.edu]
> Sent: Tuesday, October 22, 2002 12:14 PM
> To: Miller, James V (Research); 'Celina Imielinska'
> Cc: insight-users@public.kitware.com
> Subject: Re: Re: [Insight-users] using 
> itkVoronoiSegmentationImageFilter ?
> 
> 
> I think Jim is right, you can certainly build more "advanced" 
> homogeneity
> operator based on t-test or some other measurements.
> that is also what Elsa did before, she used some histogram 
> based operator to
> mearsuring the homogeneity (not checked into ITK yet).
> actually, the VoronoiSegmenation we were using is rather a "matching"
> operator, which defines some descriptions (mean, std) of the
> target object, and trying to find regions that matches those 
> descriptions
> within a certain tolerance level.
> And as we presented before in the ITK meeting, the
> VoronoiSegmenationImageFilterBase provide a general framework of
> segmentation based on
> this concept, and developer can build their own 
> TestHomogeneity() for their
> own voronoi segmentation filters, and any reasonable 
> description parameters
> can be added in for the "matching" purpose.
> But I am not so sure if the "partitioning" filter can be 
> easily derived from
> this base class. certainly, the whole structure might be
> similar, a new base class might be needed.
> I think we can keep the the same design, e.g. a base class for the
> "partitioning" functionality.
> and user/developer can derive their own class by adding in different
> homogenerity operators.
> 
> 
> 
> ----- Original Message -----
> From: "Miller, James V (Research)" <millerjv@crd.ge.com>
> To: "'Celina Imielinska'" <ci42@columbia.edu>
> Cc: "Yinpeng Jin" <yj76@columbia.edu>; "Seungbum Koo" 
> <koosb2@hanmail.net>;
> <insight-users@public.kitware.com>
> Sent: Tuesday, October 22, 2002 11:35 AM
> Subject: RE: Re: [Insight-users] using 
> itkVoronoiSegmentationImageFilter ?
> 
> 
> > Celina,
> >
> > I am not sure the VoronoiSegmentationImage filter is using the fuzzy
> > connectedness criterion to measure homogeneity.  I have to 
> admit that
> > I don't have the formula for the (simple) fuzzy 
> connectedness criterion
> > in front of me.  But the VoronoiSegmentation code is merely 
> comparing
> > (sample) means and (sample variances) based on the following:
> >
> > 1. sample mean of the region is within a specified percentage of the
> training mean
> > 2. sample variance is less than a specified percentage of 
> the training
> > variance.
> >
> > I think a better statistic would be the two sample 
> Student-t test or the
> > two sample Hotelling T^2 statistic that would compare the 
> difference in
> > sample means taking into account the sample variances and 
> the number of
> > samples used in calculing the region sample mean (variance) and the
> > training sample mean (and variance).
> >
> > This statistic is a Mahananobis (intensity) distance 
> between the training
> set and the current region.
> > Have you tried these types of statistics before?
> >
> > My interest in the "partitioning" version of the algorithm is not so
> > much to segment to the boundary of a piece of anatomy but 
> to characterize
> > the texture in a piece of anatomy as it relates to function 
> and disease.
> >
> > Jim
> >
> >
> >
> > > -----Original Message-----
> > > From: Celina Imielinska [mailto:ci42@columbia.edu]
> > > Sent: Tuesday, October 22, 2002 11:07 AM
> > > To: Miller, James V (Research)
> > > Cc: Yinpeng Jin; Seungbum Koo; insight-users@public.kitware.com
> > > Subject: RE: Re: [Insight-users] using
> > > itkVoronoiSegmentationImageFilter
> > > ?
> > >
> > >
> > >
> > >
> > >  Jim,
> > >
> > >   Your understanding of the Voronoi filter is right:
> > > "The definition of "interior" is not a homogeneity measure
> > > but rather a
> > > "compatibility" measure with a seed region." (I would call is
> > > a "sample"
> > > or "training" region). Also, you are right that the algorithm
> > > "subdivides
> > > the "boundary" Voronoi regions down to a specified
> > > resolution". The idea is to
> > > select and subdivide ONLY the regions "where the boudary is"
> > > (or we think
> > > where the boundary is), not to partition the image into
> > > homogeneous regions.
> > >
> > >  The idea behind this filter is that the "homogeneity
> > > operator" that is
> > > derived from (simple) Fuzzy Connectedness method (we also
> > > experiment with
> > > the vectorial relative fuzzy connectedness method to get
> > > better results),
> > > where a sample of tissue is segmented and compared against
> > > its backgrund
> > > (this is not done in an ad hoc way), captures the characteristics
> > > of the sample region (of target tissue) that IS NOT
> > > inherently homogeneous
> > > (this is why it is expressed by FC method, that describes
> > > "connectedness
> > > of inherently inhomogeneous tissue that is recognized as 
> one object -
> > > hanging-togetherness").
> > > That is the finesse of this approach. Before, we were generating
> > > experimentally "homogeneity" statistcs of inherently
> > > inhomogeneous regions
> > > that represented one organ, and it was not a very 
> sophisticated way to
> > > approach the problem (but it still could "drive" sucessfully
> > > the Voronoi
> > > Diagram classifier). Understanding the power of the fuzzy
> > > connectedness
> > > approach (we also experiment with the vectorial relative
> > > fuzzy filter to
> > > get better results) is important in understanding why 
> inhomogeneous
> > > regions still form a "whole" structures that we can
> > > perceptually recognize
> > > as one. Also, this method allows us to generate the "homogeneity
> > > operators" automaticaally, instead of experimentally. The way
> > > we use the
> > > term "homogeneous operator" really means how we can describe
> > > the "homogeneous"
> > > component (the "strenght" of homogeneity) of something that is not
> > > homogeneous by nature.
> > >
> > >  But, if you would like to use this filter to achieve a 
> partition into
> > > homogeneous regions, you can easily do it. The only thing is
> > > that you will
> > > be able to tile the image with homogeneous regions but this
> > > will not give
> > > you a better estimation WHERE the object (if it is inherenty
> > > inhomogeneous) is. On the other hand, there could be a 
> need for having
> > > the new filter:
> > >
> > >   VoronoiPartitioningImageFilter
> > >
> > >  since it can be easily derived from the original one 
> (and it might be
> > > potentially useful).
> > >
> > >   I am trully glad that we are having a discussion on the
> > > Voronoi Diagram
> > > filter, and I agree with your interpretation of the method
> > > and the your
> > > proposition to extend it to a new filter (one may always 
> need it for
> > > something else).
> > >
> > >   I would like to also see more discussion on other 
> components of the
> > > hybrid segmentation enginge (the "stand-alone" vectorial
> > > relative fuzzy
> > > connectednes, Gibbs prior, and Deformable Model),
> > >
> > >  -Celina
> > >
> > >
> > >
> > > On Tue, 22 Oct 2002, Miller, James V (Research) wrote:
> > >
> > > > 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
> > > > >
> > > >
> > >
>