[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