[Insight-users] Curvature in ShapeDetectionLevelSetImageFilter

Nils Hanssen hanssen at caesar . de
Fri, 11 Jul 2003 11:47:23 +0200


This is a multi-part message in MIME format.

------=_NextPart_000_000F_01C347A2.321532F0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hi Lydia and Josh,


I made a complete clone of the ShapeDetectionLevelSetFunction and
ShapeDetectionLevelSetImageFilter classes with the only difference, that I
modified the ShapeDetectionLevelSetFunction::CurvatureSpeed(...) method.


I tested two cases:

Case 1 - Curvature-speed of the level set function returns constant 1 (one):
PropagationScaling: 0.0001 (just to be close to zero)
CurvatureScaling: 1.0

Case 2 - Curvature-speed of the level set function returns constant 1000:
PropagationScaling: 0.0001 (just to be close to zero)
CurvatureScaling: 1000.0

I thought that the two cases should be equivalent since I saw the weighting
term in the LevelSetFunction::ComputeUpdate() method:

---
curvature_term = curve;
curvature_term *= m_CurvatureWeight * this->CurvatureSpeed(it, offset); 
---

So it should make no difference if I choose the m_CurvatureWeight=1,
CurvatureSpeed=1000 or vice versa?!

Case 1 runs okay, but Case 2 produces strange patterns at the contour
border. 
Unfortunately, my application is not a console application -> There are some
dependencies to other components.
I think the example(s) of the ShapeDetectionLSIF with the above modification
of the CurvatureSpeed method should
behave similarly. Anyway, I can reduce it to a console application if that
would help you.


Thank you very much for the support so far, Luis, Josh and Lydia!


Regards,
Nils




> Hi Josh and Nils,
>  
> Actually I did tried to get one of my Examples to illustrate this
> problem but I actually couldn't since in the Examples the
> CurvatureSpeed() is between 0 and 1.
> 
> I believe Nils derived his own classes and set the 
> CurvatureSpeed() to a
> high value.
> 
> Nils: would you be able to post your code/test illustrating the
> numerical instability problem?
> 
> - Lydia
> 
> > -----Original Message-----
> > From: Joshua Cates [mailto:cates at sci . utah . edu]
> > Sent: Thursday, July 10, 2003 3:28 PM
> > To: Lydia Ng
> > Cc: Luis Ibanez; Nils Hanssen; Insight-users at public . kitware . com
> > Subject: RE: [Insight-users] Curvature in
> > ShapeDetectionLevelSetImageFilter
> > 
> > Hi Lydia,
> > 
> > Can you send Ross and I an example of data/parameters which cause
> problems
> > in (ideally) one of the Example applications?  We'll hack 
> on this next
> > week.
> > 
> > thanks,
> > 
> > Josh.
> > 
> > ______________________________
> >  Josh Cates
> >  School of Computer Science
> >  University of Utah
> >  Email: cates at sci . utah . edu
> >  Phone: (801) 587-7697
> >  URL:   http://www . sci . utah . edu/~cates
> > 
> > 
> > On Thu, 10 Jul 2003, Lydia Ng wrote:
> > 
> > > Hi Nils and Luis,
> > >
> > > There is issue in the current implementation of the level set
> framework
> > > in that the curvature term is not taken into account when 
> computing
> the
> > > time step. Ideally, the time step should computed to maintain
> numerical
> > > stability.
> > >
> > > Thus, setting the curvature weight is high relative to the
> propagation
> > > term will cause problem most likely due to the time step being too
> > > large.
> > >
> > > This is a known problem - computing the time step to meet the CFL
> > > criterion is not widely reported in the literature - a 
> few of us is
> > > still trying to figure out what is the mathematically 
> sound thing to
> do
> > > here.
> > >
> > > BTW - I have also fixed the problem of when the propagation weight
> is
> > > zero - it shouldn't crash now - but you will still get 
> the numerical
> > > instability issue as above.
> > >
> > > - Lydia
> > >
> > > > -----Original Message-----
> > > > From: Luis Ibanez [mailto:luis . ibanez at kitware . com]
> > > > Sent: Thursday, July 10, 2003 6:58 AM
> > > > To: Nils Hanssen
> > > > Cc: Insight-users at public . kitware . com
> > > > Subject: Re: [Insight-users] Curvature in
> > > > ShapeDetectionLevelSetImageFilter
> > > >
> > > >
> > > > Hi Nils,
> > > >
> > > > I just performed a couple of tests, and the
> > > > ShapeDetectionLSIF is behaving as expected.
> > > > (Note that I did this with the current CVS
> > > >   version, not ITK 1.2).
> > > >
> > > > A couple of sample images that help to test
> > > > your case were checked in under:
> > > >
> > > >   - Insight/Examples/Data/Circle.png
> > > >   - Insight/Examples/Data/CircleSpikes.png
> > > >
> > > > http://www . itk . org/cgi-
> > > > bin/cvsweb.cgi/Insight/Examples/Data/Circle.png?cvsroot=Insight
> > > > http://www . itk . org/cgi-
> > > >
> bin/cvsweb.cgi/Insight/Examples/Data/CircleSpikes.png?cvsroot=Insight
> > > >
> > > > CircleSpikes.png simulates the conditions of your
> > > > tube but in 2D.
> > > >
> > > > The example ShapeDetectionLevelSetImageFilter
> > > > was also slightly modified in order to take the
> > > > scaling parameter from the command line arguments.
> > > >
> > > > http://www . itk . org/cgi-
> > > >
> > >
> bin/cvsweb.cgi/Insight/Examples/Segmentation/ShapeDetectionLev
> elSetFilte
> > > r.
> > > > cxx?cvsroot=Insight&sortby=date
> > > >
> > > > Running this example with the parameters below
> > > > succeded to segment the internal circle without
> > > > taking the spikes (bridges).  Note that although
> > > > the segmentation doesn't goes into the spikes, they
> > > > excert some influence on the shape of the final
> > > > contour.
> > > >
> > > > Here are the parameters:
> > > >
> > > > ShapeDetectionLevelSetFilter
> > > >
> > > >    input image:        CirclesSpikes.png
> > > >    output image:       SegmentedCircle.png
> > > >    seed point:         50 50
> > > >    distance:           20
> > > >    sigma:              1.0
> > > >    sigmoid alpha:      -40
> > > >    sigmoid beta:       128
> > > >    curvatureScaling:   3.1
> > > >    propagationScaling: 0.97
> > > >
> > > > The overlay of the segmented circle, on top
> > > > of the CircleSpikes.png image is shown in
> > > > the attachement.
> > > >
> > > > ---
> > > >
> > > > The balance between the curvatureScaling and the
> > > > propagationScaling parameters is quite delicate.
> > > >
> > > > For example:
> > > >
> > > > keeping curvature scaling = 3.1
> > > > propagation scaling = 0.98  will overflow the whole image
> > > > while prop. scaling = 0.96  will grow just to half the circle
> > > >
> > > > OR
> > > >
> > > > keeping propagation scaling = 0.97
> > > > curvature scaling = 3.0 will overflow the image
> > > > curvature scaling = 3.2 will fall short on reaching the edges
> > > >
> > > >
> > > >
> > > > My guess is that it may be possible to find a
> > > > continuous function F():
> > > >
> > > >     curvatureScaling = F( propagationScaling )
> > > >
> > > > for which the segmentation grabs on the circle edges,
> > > > but at some threshold of "PropagationScaling" the
> > > > computation will start presenting numerical
> > > > instabilities.
> > > >
> > > >
> > > >
> > > >
> > > > Regards,
> > > >
> > > >
> > > >
> > > >     Luis
> > > >
> > > >
> > > >
> > > > ---------------------
> > > > Nils Hanssen wrote:
> > > > > Hi Luis,
> > > > >
> > > > > thank you for the detailed answer.
> > > > >
> > > > >
> > > > > My initial level set conforms to the "negative inside"
> convention.
> > > > > Now, I am using a curvature weighting of 1000 (just 
> to see what
> > > happens
> > > > in
> > > > > the extreme case) and a propagation weighting of 0.001. When
> running
> > > the
> > > > > ShapeDetectionLSIF, the contour is not collapsing at 
> all. Maybe
> > > that's
> > > > > because of the feature image that dictates the curvature speed
> (==
> > > > > propagation speed in the ShapeDetectionLSIF)?
> > > > >
> > > > > Since the curvature speed in the ShapeDetectionLSF equals the
> > > > propagation
> > > > > speed, I derived my own classes called 
> "TubularLevelSetFunction"
> and
> > > > > "TubularLevelSetImageFilter". These are basically 
> clones of the
> > > > > ShapeDetection* classes, but with the difference that 
> I set the
> > > > curvature
> > > > > speed to (constant) one in the Level-set function.
> > > > > Now, the contour is collapsing according to the mean curvature
> but
> > > all
> > > > this
> > > > > happens _very_ slowly (the curvature weighting is 1000!).
> > > > >
> > > > > In itk::LevelSetFunction::ComputeUpdate(...) I see the
> following:
> > > > > ---
> > > > >   curvature_term = curve;
> > > > >   curvature_term *= m_CurvatureWeight * 
> this->CurvatureSpeed(it,
> > > > offset);
> > > > > ---
> > > > > so it should make no difference when I set the 
> curvature weight
> to 1
> > > and
> > > > the
> > > > > curvature speed to (constant) 1000 (and not vice 
> versa), right?
> But
> > > when
> > > > I
> > > > > do this, I get numerical instabilities during the evolution.
> What is
> > > > wrong
> > > > > with my assumption?
> > > > >
> > > > > Luis, what was the curvature weighting and curvature 
> speed when
> you
> > > > tested
> > > > > the collapsing contour with the syntethic sphere 
> image? Was the
> > > > curvature
> > > > > speed constant or dependent on the image?
> > > > >
> > > > > For now, I do all calculations in 2D. Could that be a 
> problem? I
> > > have
> > > > > installed a observer that shows me the progress of the contour
> after
> > > > each
> > > > > update event.
> > > > >
> > > > >
> > > > > Regards,
> > > > > Nils
> > > > >
> > > > >
> > > > >
> > > > >>-----Original Message-----
> > > > >>From: Luis Ibanez [mailto:luis . ibanez at kitware . com]
> > > > >>Sent: Wednesday, July 09, 2003 6:14 PM
> > > > >>To: Nils Hanssen
> > > > >>Cc: Insight-users at public . kitware . com
> > > > >>Subject: Re: [Insight-users] Crash in
> > > > >>ShapeDetectionLevelSetImageFilter
> > > > >>
> > > > >>
> > > > >>
> > > > >>Hi Nils,
> > > > >>
> > > > >>You are right in your interpretation of the
> > > > >>behavior for the ShapeDetectionLevelSetFilter.
> > > > >>
> > > > >>Increasing the curvature scaling while decreasing
> > > > >>the propagation scaling should make the contour
> > > > >>collapse (contract).
> > > > >>
> > > > >>I just verified this behavior using a syntethic
> > > > >>image of a sphere.
> > > > >>
> > > > >>Note that in version 1.2 this filter is expecting
> > > > >>the input level set to conform to the convention
> > > > >>of "negative inside" which means that the level
> > > > >>set has negative values 'inside' the contour and
> > > > >>positive values outside the contour.
> > > > >>
> > > > >>You may have to push the curvature scaling to
> > > > >>a value higher than 1.0. (e.g. 5.0 or so).
> > > > >>
> > > > >>I would avoid to use 0.0 for the propagation
> > > > >>scaling ( in part just for superstition  against
> > > > >>zeros values as parameters). You may want to
> > > > >>try something like 0.1 for the propagation
> > > > >>scaling.
> > > > >>
> > > > >>Please verify the convention used by your initial
> > > > >>level set. That may be the cause for the contour
> > > > >>not behaving as expected.
> > > > >>
> > > > >>
> > > > >>Regards,
> > > > >>
> > > > >>
> > > > >>    Luis
> > > > >>
> > > > >>
> > > > >>
> > > > >>---------------------
> > > > >>Nils Hanssen wrote:
> > > > >>
> > > > >>>Hi Luis,
> > > > >>>
> > > > >>>I am using the 1.2.0 web release.
> > > > >>>
> > > > >>>Regards,
> > > > >>>Nils
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>>>-----Original Message-----
> > > > >>>>From: insight-users-admin at itk . org
> > > > >>>>[mailto:insight-users-admin at itk . org]On
> > > > >>>>Behalf Of Luis Ibanez
> > > > >>>>Sent: Tuesday, July 08, 2003 3:55 PM
> > > > >>>>To: Nils Hanssen
> > > > >>>>Cc: Insight-users at public . kitware . com
> > > > >>>>Subject: Re: [Insight-users] Crash in
> > > > >>>>ShapeDetectionLevelSetImageFilter
> > > > >>>>
> > > > >>>>
> > > > >>>>
> > > > >>>>Hi Nils,
> > > > >>>>
> > > > >>>>Are you using a very recent checkout of ITK  ?
> > > > >>>>
> > > > >>>>The level set filters have been reworked in
> > > > >>>>recent days, so it will help us to know if you
> > > > >>>>are experiencing this behavior with the current
> > > > >>>>version or with the version as it was two weeks
> > > > >>>>ago (or before that).
> > > > >>>>
> > > > >>>>Please let us know,
> > > > >>>>
> > > > >>>>   Thanks
> > > > >>>>
> > > > >>>>
> > > > >>>>     Luis
> > > > >>>>
> > > > >>>>
> > > > >>>>------------------------
> > > > >>>>Nils Hanssen wrote:
> > > > >>>>
> > > > >>>>
> > > > >>>>>Hi,
> > > > >>>>>
> > > > >>>>>I am trying to understand the behaviour of the
> > > ShapeDetectionLSIF.
> > > > >>>>>Therefore, I set the propagation-weighting to zero. By
> setting
> > > the
> > > > >>>>>curvature-weighting to a value of one I would expect that
> > > > >>>>
> > > > >>>>the inital
> > > > >>>>
> > > > >>>>
> > > > >>>>>surface is shrinking to a point (I set the MaxRMSError to
> > > > >>>>
> > > > >>>>zero) and the
> > > > >>>>
> > > > >>>>
> > > > >>>>>number of iterations very high.
> > > > >>>>>
> > > > >>>>>The filter is crashing in
> > > > >>>>>SegmentationLevelSetFunction<TImageType, TFeatureImageType>
> > > > >>>>>::PropagationSpeed(const NeighborhoodType &neighborhood,
> const
> > > > >>>>>FloatOffsetType &offset) const
> > > > >>>>>[...]
> > > > >>>>>-->  else return (
> > > > >>>>
> > > > >>>>static_cast<ScalarValueType>(m_SpeedImage->GetPixel(idx)) );
> > > > >>>>// crashing here
> > > > >>>>
> > > > >>>>
> > > > >>>>>[...]
> > > > >>>>>
> > > > >>>>>When I set the propagation-weighting to - for instance -
> > > > >>>>
> > > > >>0.0001 the
> > > > >>
> > > > >>>>>filter is not crashing, but the contour is not shrinking
> > > > >>>>
> > > > >>>>according to
> > > > >>>>
> > > > >>>>
> > > > >>>>>the mean curvature.
> > > > >>>>>
> > > > >>>>>Is that the correct behaviour of the filter?
> > > > >>>>>
> > > > >>>>>I would appreciate any suggestions. Thanks!
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>Regards,
> > > > >>>>>Nils
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>-------------------------
> > > > >>>>>Nils Hanssen
> > > > >>>>>Surgical Systems Laboratory
> > > > >>>>>research center c ae sa r
> > > > >>>>>Ludwig-Erhard-Allee 2
> > > > >>>>>53175 Bonn
> > > > >>>>>fon: +49-228-9656-197
> > > > >>>>>fax: +49-228-9656-117
> > > > >>>>>___http://www . caesar . de/ssl_
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>
> > > > >>>>
> > > > >>>>
> > > > >>>>_______________________________________________
> > > > >>>>Insight-users mailing list
> > > > >>>>Insight-users at itk . org
> > > > >>>>http://www . itk . org/mailman/listinfo/insight-users
> > > > >>>>
> > > > >>>
> > > > >>>_______________________________________________
> > > > >>>Insight-users mailing list
> > > > >>>Insight-users at itk . org
> > > > >>>http://www . itk . org/mailman/listinfo/insight-users
> > > > >>>
> > > > >>
> > > > >>
> > > > >>
> > > > >>
> > > > >
> > > > > _______________________________________________
> > > > > Insight-users mailing list
> > > > > Insight-users at itk . org
> > > > > http://www . itk . org/mailman/listinfo/insight-users
> > > > >
> > > >
> > >
> > > _______________________________________________
> > > Insight-users mailing list
> > > Insight-users at itk . org
> > > http://www . itk . org/mailman/listinfo/insight-users
> > >
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users
> 

------=_NextPart_000_000F_01C347A2.321532F0
Content-Type: application/ms-tnef;
	name="winmail.dat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="winmail.dat"

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
D9Mf79svzy+9X5crVwdgfiChP/miTyAtH2MZAhygsSGSL/3e/z4T0ViwH1C3T+TPSwLv97gsMsAW
oRBi+lED6ukl77GH54/nfw3BY/tQRWAMj//s7+/fl1gHUv+SC5i8z/FP/5o0/9nukW4RLFacyHK1
b5/39N+aNRKlcOEwY/AnAGPg8wSRHiF1Z0xwGEG78SjD/YkxIfov+g/+/5eURS+XWP9GvwAPBD/Q
Sgcvkd8CylsPf8FZKxBLwCGxnhB2QGPgbfktEExhyLGC4E/go9eXSX/RgCYAAcBugOqgVzHo8WN/
qFApwExQQnANf0sgPoBkOXbgZy2z4ILQAdAtQR93AIBwWJAQP0sgNTMx+jdZIEJ+EAqP6IJ+EFzA
ACs0OS0yMjgtADk2NTYtMTk3fxSP6JGzkBXuFAAXD0sgX6MasFIAdHA62SB3G1CnXqAPwExQci6b
kC8KUPxsXxmPBc8dbx5/8Q8gr/8hv4woGrEkryW/Jmgjb/Yg/1HK8tBRUW1iXfDOHyhuT583jDca
6Sw1L1FCZOBuL/cp8k9wgnAvUbssryNfMe//JH81DyafQB0orym/N58r7/+L+i3PLt8v7zIf5q9B
f0KP90Of5Ufk7SA1/0g/Nj9Gev84HzkvSq87X0aJPS8+Pz9P/0Vv5Sfk6eTqSR9XX0lf5Sb/Sy9M
P1nPTp9P71D/Ug9AKv/k5uTmWD9kP1h/5SJaD1sfv1xvTtpef1+PYJ9iWn1ukAAAAB4AQhABAAAA
QwAAADxFRUY4NzM2RURBNDk2MjQ3OTIwODk2MTQwMUQ2QTAyQzRCOERERUBzZTJrZXhjaDAxLmlu
c2lnaHRmdWwuY29tPgAAAwAJWQEAAAALAACACCAGAAAAAADAAAAAAAAARgAAAAADhQAAAAAAAAMA
AoAIIAYAAAAAAMAAAAAAAABGAAAAABCFAAAAAAAAAwAHgAggBgAAAAAAwAAAAAAAAEYAAAAAUoUA
AH1uAQAeAAmACCAGAAAAAADAAAAAAAAARgAAAABUhQAAAQAAAAQAAAA5LjAACwARgAggBgAAAAAA
wAAAAAAAAEYAAAAABoUAAAAAAAADABKACCAGAAAAAADAAAAAAAAARgAAAAABhQAAAAAAAAsAG4AI
IAYAAAAAAMAAAAAAAABGAAAAAA6FAAAAAAAAAwAcgAggBgAAAAAAwAAAAAAAAEYAAAAAEYUAAAAA
AAADAB6ACCAGAAAAAADAAAAAAAAARgAAAAAYhQAAAAAAAAIB+A8BAAAAEAAAAL0QC1krxdQRhzIA
AQIipMkCAfoPAQAAABAAAAC9EAtZK8XUEYcyAAECIqTJAgH7DwEAAABQAAAAAAAAADihuxAF5RAa
obsIACsqVsIAAG1zcHN0LmRsbAAAAAAATklUQfm/uAEAqgA32W4AAABcXGZzMDBcaGFuc3Nlblxv
dXRsb29rLnBzdAADAP4PBQAAAAMADTT9NwAAAgF/AAEAAAAxAAAAMDAwMDAwMDBCRDEwMEI1OTJC
QzVENDExODczMjAwMDEwMjIyQTRDOTA0QTQ5NzA0AAAAAAMABhDAKOo3AwAHEDgjAAADABAQAAAA
AAMAERABAAAAHgAIEAEAAABlAAAASElMWURJQUFOREpPU0gsSU1BREVBQ09NUExFVEVDTE9ORU9G
VEhFU0hBUEVERVRFQ1RJT05MRVZFTFNFVEZVTkNUSU9OQU5EU0hBUEVERVRFQ1RJT05MRVZFTFNF
VElNQUdFRgAAAADxJw==

------=_NextPart_000_000F_01C347A2.321532F0--