[Insight-users] Multi-initial in the levelset processing

彭文敏 pwm at dsp.whu.edu.cn
Fri Jun 24 09:06:36 EDT 2005


Hello Olivier! 
            I think we have different understanding concerning the SD.For me ,I compute the whole all pixels'SD according to the unique initial curve,and you do it by compute the points near the initial curves(narrow band?), and so, the more  the num of initial curves is ,the more easily it will converge.But the problem is if you seed one curve,the algorithm maybe  dose not converge  ,while in my implementation with the coputation of the wholeall pixels,it should converge in all conditions.But my experiment doesn't second it.The convergence are associated with the initial position ,the timestep,and the parameter.So I can not even unserstand the "take more seed curves, you have more chance  that the level set algorithm will converge faster".
            Meanwile,if there are more than two areas that you should segment,thta is  you will have to use more than one levelset equation,typically log(n) levelset functions are needed ,then how can you compute the different SD according to your closet distance computation method?
            Thank you!
****************************************************************************************************************************
For most level set algorithms, you only need to compute the signed distance 
function in a neighbourhood of your curve e.g. 6 pixel on each side. Then 
you just have to compute the signed distance function to the closest curve.
Those reduce the computation cost. There exists some very efficient 
algorithms to compute that (such as Fast Marching).

The other thing is that when you take more seed curves, you have more chance 
that the level set algorithm will converge faster. 

The set of initial curves C is the zero level set of the signed distance 
function (say f_0), defined on the image domain (say S). 
i.e. C= { x : f_0(x) = 0 }.
The idea of Level set, is that you evolve the function f_0 instead of the 
curves. 
The way you evolve the function is by setting an appropriate PDE. Typically, 
this PDE will look like

df 
--- (x, t) = V(x, t) | (grad f )(x, t) |
dt

where f: S x R ---> R, and V is the speed of the curve. We take as initial 
condition f(x, 0) = f_0.
A basic numerical algorithm to solve this is as follow:
Write 
df f(x, n+Dt) - f(x, n)
--- ~= --------------------------
dt Dt

Where Dt is a small time step.
Then, substituing in the PDE, you get

f(x, n+Dt) = Dt ( V | grad f(x, n) | ) + f(x, n).

Which gives you the function f at time n+Dt, if you know the function f at 
time n. So starting with f_0, you can build all of f.
At time n, the position of the curve(s) is given by { x : f(x, n) = 0 }. The 
inside is always given by { x : f(x, n) < 0 } and the outside is similar.
It is exactly the same algorithm that you use if you have 1 or several seed 
curves. The function that you evolve "don't know" how many components there 
are. In fact, even when you start with only 1 seed curve, that curve will 
often split into several components.

Your final output is a function f(x, T), that is stable, i.e. that doesn't 
move anymore.

Several level set alorithms are implemented in ITK, what does differ from 
one another is the PDE used to evolved the curve. If your speed V is always 
positive, there is some very efficient methods using Fast Marching.


			   						Yours sincerely
									Wenmin Peng
        							pwm at dsp.whu.edu.cn
            						2005-06-23
-------------- next part --------------
A non-text attachment was scrubbed...
Name: face-3.gif
Type: image/gif
Size: 842 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/insight-users/attachments/20050624/4e897d9c/face-3.gif


More information about the Insight-users mailing list